4

为方便起见,这是脚本:

" Uncomment the following to have Vim jump to the last position when                                                       
" reopening a file
if has("autocmd")
  au BufReadPost * if line("'\"") > 0 && line("'\"") <= line("$")
    \| exe "normal! g'\"" | endif
endif

该功能非常出色,但不适用于某些将 Vim 作为编辑器调用的情况:例如,我经常编写两行 git commit 消息,所以下次提交时它会将我放在第二行,我必须对此进行调整.

类似地,许多其他系统允许您将 Vim 指定为编辑器,作为涉及编辑文件的某些过程的一部分。

我们如何检测到这一点并修改我们的 last-position-jump 脚本?Git 实际上有点特别,因为它使用的.git/COMMIT_EDITMSG文件在提交时保持不变,这就是发生这种情况的原因。对于临时文件,它不会出现在 Vim 以前从未见过的文件上。

这可能使任务变得微不足道(通过检查当前文件是否 == COMMIT_EDITMSG... 来增加脚本)

但是,一个非常完美的答案是我们是否可以检测到 Vim 是从命令行调用还是被脚本打开。有没有办法告诉?我知道 unix 程序可以确定它们是否以术语/伪术语运行,尽管它们最终都会从终端接收输入。

4

3 回答 3

4

如果您不想修改具有各种异常的全局规则(如 FDinoff 的答案),您还可以通过将以下内容放入以下内容来撤消跳转~/.vim/after/ftplugin/gitcommit.vim

:autocmd BufWinEnter <buffer> normal! gg0

尽管我没有遇到上述命令的任何问题,即使在缓冲开关上,更强大的版本也会使 autocmd触发一次

augroup DisableLastPositionJump
    autocmd! BufWinEnter <buffer> execute 'normal! gg0' | autocmd! DisableLastPositionJump BufWinEnter <buffer>
augroup END
于 2013-05-24T06:21:48.013 回答
2

Git 提交消息的文件类型为gitcommit.

只需添加一个检查以查看文件是否不是gitcommit文件类型,以决定何时跳转到最后一个位置。

if has("autocmd")
  au BufReadPost * if line("'\"") > 0 && line("'\"") <= line("$") && &filetype != "gitcommit"
    \| exe "normal! g'\"" | endif
endif
于 2013-05-24T05:12:16.293 回答
2

如果你不想让 VIM 记住你上次提交的位置,请在 中设置以下内容~/.vimrc

autocmd FileType gitcommit call setpos('.', [0, 1, 1, 0])

来源:http: //vim.wikia.com/wiki/Always_start_on_first_line_of_git_commit_message

于 2014-11-07T19:48:02.190 回答