3

使用 vim,我可以在 vim 打开时启动命令,例如:打开 vim 并创建一个拆分

vim +sp

我用 vim-fugitive 插件,是我用

vim +Gstatus

我明白了

E492: No es una orden del editor: Gstatus

可能是因为 vim 启动时没有加载逃犯Gstatus

当我从终端启动 vim 时,如何在加载插件后执行命令?

特别是,我如何从Gstatus预加载的终端启动 vim。

4

5 回答 5

5

您的一般问题的答案包含在 中:help startup。以下是一些相关部分:

3. Execute Ex commands, from environment variables and/or files
...
      *VIMINIT* *.vimrc* *_vimrc* *EXINIT* *.exrc* *_exrc* *$MYVIMRC*
     c. Four places are searched for initializations.  The first that exists
    is used, the others are ignored.  ...
    -  The user vimrc file(s):
            "$HOME/.vimrc"  (for Unix and OS/2) (*)
...
            "$HOME/_vimrc"  (for MS-DOS and Win32) (*)
            "$VIM/_vimrc"   (for MS-DOS and Win32) (*)
...
4. Load the plugin scripts.                 *load-plugins*
    This does the same as the command: >
        :runtime! plugin/**/*.vim
...
8. Perform GUI initializations
    Only when starting "gvim", the GUI initializations will be done.  See
    |gui-init|.
...
12. Execute startup commands
    If a "-t" flag was given to Vim, the tag is jumped to.
    The commands given with the |-c| and |+cmd| arguments are executed.
    The starting flag is reset, has("vim_starting") will now return zero.
    If the 'insertmode' option is set, Insert mode is entered.
    The |VimEnter| autocommands are executed.

这是一种作弊,在终端中无法与 vim 一起使用,但您可以将命令放入您的 gvimrc 文件中,它们将在所有插件加载后运行。正如@Peter Rincker 在回答后的评论中建议的那样,更可靠的是使用VimEnter自动命令。

对于您的特定问题,fugitive 使用VimEnter在其插件文件中定义的自动命令来定义:Gstatus和其他命令。如果你想:Gstatus自动执行,你应该使用类似的自动命令并确保它是在逃犯之后定义的,这样你的就会在逃犯之后执行。例如,将此行(未经测试)放入~/.vim/after/plugin/myfugitive.vim或类似:

:au VimEnter * if exists(':Gstatus') | Gstatus | endif

这将测试命令是否已定义;如果是这样,它将调用该命令。

于 2014-03-15T20:16:18.330 回答
3

:Gstatus是一个缓冲区特定的命令。因此,除非您在存储库中打开文件,否则该命令将不存在。在此处阅读更多信息::h :command-buffer以及此处的第一段:h fugitive-commands

例子:

vim -c Gstatus <filename>  # -c "cmd" will be executed after the first file has been read.
vim +Gstatus <filename>    # +command is a shortcut for `-c command`
vim .git/index             # opens :Gstatus without a file (answer by derenio)
于 2014-03-14T16:05:58.020 回答
1

Fugitive:Gstatus在打开.git/index目标存储库的文件后自动运行。不要尝试手动运行Gstatus,而是使用以下命令:

vim .git/index

注意:
如果您想Gstatus按照 OP 建议的方式调用 ( $ vim +Gstatus),您可以将以下内容添加到您的vimrc:

command Gstatus edit .git/index

但是,这仅在您位于 git 存储库的根目录中时才有效。

逃犯插件Gstatuscommand!. 这意味着逃犯默默地覆盖了这个命令定义。

于 2015-04-21T13:41:47.287 回答
1

关于打开.git/index文件的所有建议基本上都是正确的,但需要注意该文件的实际位置。从技术上讲,最正确的调用是:

alias gst='vim $(git rev-parse --git-path index)'

一个充分的调用是:

alias gst='vim $(git rev-parse --git-dir)/index'

这正确地考虑了诸如索引存储在根存储库的子目录中(而不是在工作树中)的工作树之类的事情。

我首选的方法是通过git定义如下的别名:

[alias]
    vim = "!_(){ cd ${GIT_PREFIX}; \
        vim '+ped ${GIT_DIR}/index' '+winc P' '+setl fdl=1' ${1:+'+winc p'} $* \
    ;};_"

的目的cd ${GIT_PREFIX}是因为别名总是从存储库的基础运行,所以这确保我们返回到我们调用它的目录。在ped ${GIT_DIR}/index预览窗口中加载索引(这是什么:Gstatus),并将winc P焦点设置到预览窗口。这setl fdl=1只是为了撤消折叠,因为我默认启用了它们,但不希望它们出现在状态窗口中。

${1:+'winc p'} $*意味着传递给的任何参数随后git vim也会传递vimwinc p文件)只有在有参数的情况下。

请注意,如果您想成为完全未来的证明,您可以'+ped ${GIT_DIR}/index'替换为。\"+ped $(git rev-parse --git-path index)\"

于 2019-07-04T00:23:44.477 回答
1

您可以考虑的一件事是设置别名,例如

alias gst='vim $(git rev-parse --show-toplevel)/.git/index'

这将在没有文件的情况下打开 :Gstatus(如 derenio 建议的那样),但是您不需要位于 git 的根目录中即可。

于 2017-09-12T11:05:52.690 回答