Vim文本替换-接下来的n行(不是文件的其余部分)



我经常想使用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一起使用,因此.命令仍然可以使用

最新更新