在某些情况下,将搜索和替换行为挂钩到某些内容会很方便。例如,我的 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”,它就会在命令执行期间暂时将光标置于中心。我很想找到一个缩写或其他东西来代替它,但我想不出任何可靠的方法。