vim: команда запуска после загрузки плагинов
С помощью vim я могу запустить команду, когда vim открыт, например: открыть vim и создать разделение
vim +sp
Я использую vim-fugitive плагин, я использую
vim +Gstatus
я получил
E492: No es una orden del editor: Gstatus
может потому что беглецы не грузятся при запуске vim Gstatus
когда я запускаю vim из терминала, как я могу выполнить команду после загрузки плагинов?
В частности, Как я могу запустить VIM из терминала с Gstatus
поджат.
4 ответа
Ответ на ваш общий вопрос содержится в :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
автокомандный.
Для вашего конкретного вопроса беглец использует VimEnter
автокоманда, определенная в файле плагина, для определения :Gstatus
и другие команды. Если вы хотите сделать :Gstatus
автоматически, вы должны использовать аналогичную автокоманду и убедиться, что она определена после беглеца, так что ваша будет выполнена после беглеца. Например, поместите эту строку (не проверено) в ~/.vim/after/plugin/myfugitive.vim
или некоторые такие:
:au VimEnter * if exists(':Gstatus') | Gstatus | endif
Это проверит, была ли команда определена; если это так, он вызовет команду.
: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)
Одна вещь, которую вы могли бы рассмотреть, это создать псевдоним, такой как
alias gst='vim $(git rev-parse --show-toplevel)/.git/index'
это откроет:Gstatus без файла (как предложено derenio), однако вам не нужно находиться в корневом каталоге git, чтобы это работало.
Беглец автоматически бежит :Gstatus
после открытия .git/index
файл вашего целевого хранилища. Вместо того, чтобы пытаться запустить вручную Gstatus
, используйте эту команду:
vim .git/index
Замечания:
Если вы хотели бы призвать Gstatus
как предложено ФП ($ vim +Gstatus
), вы можете добавить следующее к вашему vimrc
:
command Gstatus edit .git/index
Однако это работает, только если вы находитесь в корневом каталоге вашего репозитория git.
Беглый плагин определяет Gstatus
команда с command!
, Это означает, что беглец молча перезаписывает это определение команды.
Все предложения по открытию .git/index
file, по сути, верны, но нужно быть осторожным в отношении фактического местоположения этого файла. Технически правильный вызов:
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
затем также передаются vim
, и я предполагаю, что если есть аргументы, один из них, скорее всего, будет файлом, с которым мы хотим взаимодействовать, поэтому winc p
возвращает фокус предыдущему окну (первому загруженному файлу) только при наличии аргументов.
Обратите внимание, что вы можете заменить '+ped ${GIT_DIR}/index'
с \"+ped $(git rev-parse --git-path index)\"
если вы хотите быть полностью уверенными в завтрашнем дне.