打开Git提交编辑器到特定的光标位置

5
我已经修改了我的prepare-commit-msg钩子,将分支名称包含在我的提交消息开头(例如[JCH-234] -)。但是,当我运行git commit时,光标位于编辑器Vim的开头。我正在寻找一种方法将光标定位在我的分支名称之后的位置。
我知道移动光标只需要按几个额外的按键,但我相信注重细节,并希望尽可能实现这一点。

这个回答解决了你的问题吗?在Git提交模板中改变光标位置 - Malvineous
3个回答

9

在我看来,这是git配置的问题,我们不应该为此添加特殊的vim脚本/配置。

您可以设置GIT_EDITOR变量,例如:

GIT_EDITOR="vim -c'startinsert|norm! ggA'"

这样,每次你执行 git commit 时,git 将调用 pre-commit-msg 钩子,在 vim 中打开文件,并将光标定位在第一行末尾,也就是你的分支名之后,并切换到插入模式。

这个可以工作。不过,我在想,是否有情况下我不希望Git编辑器在行末打开光标?我能想到的唯一另一个Git使用编辑器的时候是交互式变基,但我认为这不会成为问题。你有什么想法吗? - Jake Henningsgaard
@JakeHenningsgaard 无论你想在vim打开后将光标放在哪里,你都可以用你的vim-fu更改-c'...'命令。例如,在一个单词后面,...|norm! w ... - Kent
@JakeHenningsgaard,既然你已经打开了vim,那么在vim中移动光标就在你的指尖上。这很容易,对吧?如果像你说的那样,只是有时不想把它放在行尾,那也很简单。 - Kent
是的,这很有道理。我在想可能有这样一种情况,即在运行 git commit 时希望光标位于行尾,但在运行 git rebase -i 时希望它位于行首。我不认为这是这种情况,也不认为这适用,但我只是想问一下。 - Jake Henningsgaard
但是为什么光标会从比平常更低的位置开始呢? - math2001

0

你可以使用类似以下代码:

augroup git_commit
    autocmd!

    autocmd BufReadPost *
        \  if &filetype == 'gitcommit'
        \|     execute 'normal $'
        \| endif
augroup end

BufReadPost 自动命令在缓冲区内容加载后触发。如果 filetypegitcommit,我们可以运行任何动作来移动光标。

这里我使用了 $ 来移动到行尾,但你也可以使用 f- 或其他适合你的方法。


0

由于您正在使用vim作为编辑器,请使用“A”(大写A)命令在行末进入插入模式。


正如问题中所提到的,我正在使用 Vim。这个解决方案行不通。我需要让 Vim 在特定位置打开光标。我的意思是,我想避免每次执行 git commit 时都要移动光标。 - Jake Henningsgaard
你想在特性标签后面写提交信息,是吗?如果是的话,那么这个解决方案可以解决问题,我自己在日常工作流中也使用它。在NORMAL模式下按下"A"键,vim会将光标移动到行末并进入INSERT模式。然后你就可以编写你的信息,离开INSERT模式,保存即可完成提交。你根本不需要移动光标。 - johannesmik

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接