编辑git提交消息时自动进入插入模式

编辑git提交消息时自动进入插入模式,git,vim,Git,Vim,如果我执行一个git提交,当Vim打开时,我希望立即处于插入模式 我注意到在编辑时,filetype被设置为gitcommit,所以我想我可以通过自动命令来实现这一点 au BufRead gitcommit startinsert! 但这不起作用,我做错了什么 解决方案 我决定使用au FileType gitcommit执行“normal!O”| startinsert在当前文件上方添加新行,然后进入插入模式以准备输入消息。这可能比需要的复杂一点,但您可以使用单独的FileType插件:

如果我执行一个git提交,当Vim打开时,我希望立即处于插入模式

我注意到在编辑时,
filetype
被设置为
gitcommit
,所以我想我可以通过自动命令来实现这一点

au BufRead gitcommit startinsert!
但这不起作用,我做错了什么

解决方案


我决定使用
au FileType gitcommit执行“normal!O”| startinsert
在当前文件上方添加新行,然后进入插入模式以准备输入消息。

这可能比需要的复杂一点,但您可以使用单独的FileType插件:

$ mkdir -p ~/.vim/ftplugin/gitcommit
$ echo 'startinsert!' > !$/git-commit-insert.vim

:au Event pattern命令中,模式通常与缓冲区名称匹配。您可以使用
BufRead COMMIT\u EDITMSG
,而不是
BufRead gitcommit
。如果要与filetype选项匹配,请使用
filetype
事件

我倾向于编写多行提交消息,并且我有一个自动命令(来自vimrc_example.vim)可以这样做

exe "normal! g`\""
每当我输入一个新的缓冲区,那么

au FileType gitcommit 1 | startinsert
是否在进入插入模式前转到第一行?既然我已经测试过了,我想我会保留它。:)

另一种方法:

export GIT_EDITOR='vim +startinsert'
或者添加
从消息末尾开始(在使用git钩子完成消息时很有用)


非常感谢。有没有办法调试自动命令?我做了
:设置ft?
以查找当前缓冲区的文件类型,我还有其他自动命令,例如
au BufReadPost quickfix setlocal nospell
,它们使用相同的东西。我已经决定使用
au文件类型gitcommit执行“normal!O”| startinsert
在上面添加新行,然后进入插入模式。谢谢:)首先,
:执行“正常!0”
不会添加新行。它只是将光标移动到行的开头。我的
:1
移动到第一行。您可以使用
:verbose au BufReadPost quickfix
查看为该事件和模式定义了哪些自动命令,以及哪个文件定义了它们。类似地,
:verbose set ft?
。如果这是一个零就可以了,但它不是,它是一个大写字母o(o);)谢谢你在
:verbose
上的提示,我会研究一下。谢谢,我以后会记住这一点,但我已经有一些自动命令,我想用类似的方式来做:)谢谢,是的,我在发布问题之前考虑过这一点,但我想我想自动化一些更多,但为了清楚起见,我没有考虑这个问题。您还可以执行
vim+start
btw。您建议的解决方案对于已经包含诸如--amend或merges之类文本的消息来说并不太好。你知道如何改变这些情况下的行为吗?不,我发现了同样的事情,我想知道一个更好的方法。
export GIT_EDITOR='vim +startinsert!'