vim恢复光标位置; 排除特殊文件

pok*_*oke 9 vim

以下代码在我的内部.vimrc并通常恢复我用vim打开的文件的最后一个光标位置:

autocmd BufReadPost *
  \ if line("'\"") > 1 && line("'\"") <= line("$") |
  \   exe "normal! g`\"" |
  \ endif
Run Code Online (Sandbox Code Playgroud)

我真的很喜欢这个功能,并希望保持打开状态,除了一个文件:当使用git提交时,vim会被激活,我可以用它来编辑提交消息.但是,在vim启动之前存在提交消息文件(并且已预先填充),因此vim将其视为现有文件并恢复最后一个光标位置(通常不是我想要开始键入的位置).

那么有可能修改上面的脚本来排除COMMIT_EDITMSG文件吗?

pok*_*oke 9

在阅读了关于自动命令的手册之后,我注意到似乎无法定义它们匹配的模式,以便它们排除特殊模式.而且我也无法使用包含当前文件名的变量,所以我只是扩展现有的if以排除文件.

然而,根据由帕维尔Shved注释(关于gg移动到文件的顶部),我认为以同样的方式,应该可以简单地改写通过简单地将其移动到顶部的位置恢复的效果,以后再.所以我想出了这个:

autocmd BufReadPost COMMIT_EDITMSG
  \ exe "normal! gg"
Run Code Online (Sandbox Code Playgroud)

在前一个之后放置这个autocmd BufReadPost简单地链接事件执行,所以vim,在执行第一个并恢复位置之后,读取它并在排除的文件名上匹配它并使用gg将光标移动到顶部,基本上覆盖了原始的效果自动命令.

这工作得很好:)