vim - 如何修改 last-position-jump vimscript 以不为 git commit 消息执行此操作

标签 vim

为方便起见,这里是脚本:

" 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 指定为编辑器,作为涉及编辑文件的某些过程的一部分。

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

这可能使任务几乎变得微不足道(通过检查当前文件 == COMMIT_EDITMSG ...)

但是,一个真正完美的答案是我们是否可以检测 Vim 是从命令行调用还是由脚本打开。有办法告诉吗?我知道 unix 程序可以确定它们是否在 term/pseudoterm 中运行,尽管它们最终会从终端接收输入。

最佳答案

如果您不想在各种异常(exception)情况下修改全局规则(如 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

关于vim - 如何修改 last-position-jump vimscript 以不为 git commit 消息执行此操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16727923/

相关文章:

Vim - 如何识别插件引发错误

vim - vim中将制表符替换为空格

vim-latex 套件,如何默认打开文件而不折叠文本

vim - 如何防止在 Vim 中遍历跳转列表时离开当前缓冲区?

vim - 使用 vim-airline 的修补 Powerline 字体

git - 由于存在目录,无法更新 github 中的子模块

Bash keybinding with "bind"- 避免像 Vim 中的 noremap 那样递归

vim - Caps Lock 作为 Tmux 前缀键

python - 为什么 Vim 使用 +python3 编译时运行 python2?

search - VIM 中的自定义搜索模式