VIM:使用 /c 与替代命令时是否可以添加自定义行为?

VIM:使用 /c 与替代命令时是否可以添加自定义行为?

在某些情况下,将搜索和替换行为挂钩到某些内容会很方便。例如,我的 vimrc 中有以下映射:

nnoremap n nzzzv

每次您前进到下一场比赛时,屏幕都会居中。这很有效,但在执行 %s//c 命令时不适用。有没有办法在用户选择确认选项 y/n/q/q/l/etc 之一时进行挂钩,以便您可以触发命令?

答案1

对于将当前替换的线居中的具体用例,一种解决方法是

:set scrolloff=999

在命令之前:substitute。这与将当前行居中的效果相同zz

答案2

不幸的是,不是。通常的方法是使用

:autocmd CursorMoved * ...

但在查询循环中不会触发该事件:substitute///c。可以将其视为一种具有许多限制的特殊模式;在保持正确搜索状态的同时允许自定义功能将非常困难。

您必须:substitute自己重新实现该功能。也许您可以使用:help sub-replace-expression其中的查询;我还没有尝试过是否可以进行用户交互。

答案3

根据 Ingo Karkat 使用 scrolloff 选项的建议,我最终选择了这个:

command! -nargs=1 CC set scrolloff=999|exec <f-args>|set scrolloff=0

所以现在您只需运行“CC %s//c”,它就会在命令执行期间暂时将光标置于中心。我很想找到一个缩写或其他东西来代替它,但我想不出任何可靠的方法。

相关内容