提交 Git 更改时,如何在第一行末尾以插入模式启动 Vim?

提交 Git 更改时,如何在第一行末尾以插入模式启动 Vim?

将 Vim 设置为始终的最佳方式是什么将光标置于第一行末尾的插入模式(考虑提交消息模板)运行时git commit?这基本上会做与ggA每次按下相同的事情。理想情况下,这应该是一个 Vim 配置(大概在〜/.vim/after/ftplugin/gitcommit.vim),因为我依赖$VISUAL而不是单独为所有内容配置编辑器。


这几乎有效:

call feedkeys('ggA', 'int')

但是,运行时echo 'some text' >/tmp/COMMIT_EDITMSG && vim -Nu NONE --cmd 'filetype plugin on' /tmp/COMMIT_EDITMSG光标位于状态行上,直到我按下某键:

Vim 缺少光标


1 | startinsert!适用于echo 'some text' >/tmp/COMMIT_EDITMSG && vim -Nu NONE --cmd 'filetype plugin on' /tmp/COMMIT_EDITMSG,但运行时git commit -t /tmp/COMMIT_EDITMSG它完全中断 - 未显示提交消息,并且提交模板显示在状态行下方:

<code>git commit</code> 损坏的视图

按向右箭头后,将显示提交消息和光标,并且编辑器处于插入模式,但光标位于第二个字符而不是行尾:

移动光标后的 <code>git commit</code>

我是否需要在配置中添加一些内容来告诉 Vim 显示缓冲区的实际内容?

答案1

改编 Vim Wikia 中给出的自动命令之一,这似乎git commit -t /tmp/COMMIT_EDITMSG对我来说效果很好:

" ~/.vim/ftplugin/gitcommit.vim
au! VimEnter COMMIT_EDITMSG exec 'norm gg' | startinsert!

exec 'norm gg' |之所以使用它,1 |是因为:1 |相当于:1p |并且在打印该行时有一个小的延迟。

答案2

您可以使用命令告诉 git 调用 vim startinsert。将其放入您的~/.bashrc文件中:

export GIT_EDITOR="vim -c 'startinsert'"

但请注意,当您必须提交合并时必须按转义键会很烦人,因为已经为这些生成了提交消息。

相关内容