Следующий код в моем .vimrc
и обычно восстанавливает последнюю позицию курсора файла, который я открыл с энергией:
autocmd BufReadPost *
\ if line("'\"") > 1 && line("'\"") <= line("$") |
\ exe "normal! g`\"" |
\ endif
Я действительно люблю эту функцию и хочу оставить включенным, за исключением одного файла: При фиксировании с мерзавцем разожжена энергия, и я могу отредактировать сообщение о фиксации с нею. Однако файл сообщения о фиксации существует, прежде чем энергия запускается (и предварительно заполняется), таким образом, энергия рассматривает его как существующий файл и восстанавливает последнюю позицию курсора (который обычно является не, где я хотел бы начать вводить).
Так есть ли возможность изменить вышеупомянутый сценарий для исключения COMMIT_EDITMSG
файл?
Прочитав руководство по автоматическим командам, я заметил, что, похоже, невозможно определить шаблон, которому они соответствуют, таким образом, чтобы исключить специальный шаблон. И я также не смог использовать некоторую переменную, содержащую текущее имя файла, чтобы просто расширить существующий if для исключения файла.
Однако, основываясь на комментарии Павла Шведа (о gg
перемещении в начало файла), я подумал, что таким же образом должно быть возможно просто перезаписать эффект восстановления позиции, просто переместив его в начало позже снова. Поэтому я придумал следующее:
autocmd BufReadPost COMMIT_EDITMSG
\ exe "normal! gg"
Поместив это после предыдущего autocmd BufReadPost
, я просто соединяю выполнение событий, так что vim, после выполнения первого и восстановления позиции, считывает это, сопоставляет с исключенным именем файла и использует gg
для перемещения курсора наверх, по сути, перезаписывая эффект оригинального autocmd.
И это работает просто отлично :)
Вам, вероятно, стоит изучить mksession. Вы можете настроить автоматические команды VimEnter / VimLeave, чтобы они «делали правильные вещи», когда вы указали файлы в командной строке (например, когда git вызывает vim). Для этого существует множество сценариев, например, см. http://vim.wikia.com/wiki/Working_with_multiple_sessions .