我经常想使用vim(使用rebase)压缩git提交。我有一个非常好的快捷方式来压缩从光标到文件末尾的所有提交:
map s :,$s/^pick/squash/<CR>
但通常不希望将此替换应用于文件中的所有剩余行,而是应用于接下来的n行。有没有办法修改这个命令,只将它应用于接下来的n行?
如果您事先知道n
(例如,对于10):
nnoremap <buffer> s :,+10s/^pick/squash/<CR>
这将更改当前行和接下来的10行。
如果你事先不知道n
,你可以尝试一种视觉映射:
xnoremap <buffer> s :s/^pick/squash/<CR>
所以你首先选择你的范围(例如V10j
),然后点击s
。
或者,您可以使用Vim的股票git-ftplugins提供的一些工具,这些工具提供:Squash
、:Cycle
。。。命令。这些很方便,但单独使用有点蹩脚。
在~/.vim/ftplugins/gitrebase.vim
中放入以下内容:
nnoremap <buffer> S :Cycle<cr>:silent! call repeat#set('S')<cr>
xnoremap S :normal S<cr>:silent! call repeat#set(v:count1.'VS')<cr>'<
现在,您可以使用S
循环浏览各个选项。您还可以直观地选择线路并使用S
。额外的好处是,这些映射可以与repeat.vim一起使用,因此.
命令仍然可以使用