在文本中执行搜索后,vim autocmd挂钩?

时间:2016-06-14 13:02:16

标签: vim editor text-editor vi

我查看了autocmd可以处理的事件列表,但我找不到有关搜索查询的事件。

我想要做的是在每次执行文本搜索后添加一些自定义行为。我能够使用以下命令重新映射*命令:

map * *<F11>

在这种情况下,我将<F11>映射到:call My_function(),这将对@/中包含的搜索模式执行某些操作。

但是我仍然需要将自定义行为添加到/命令中,这比较复杂,因为它已经完成了输入搜索模式。

你对如何进行有任何暗示吗?我可以使用autocmd吗?或者可能有一个map技巧?

1 个答案:

答案 0 :(得分:1)

(坏)方法是重新映射 return 键(以及 esc 键) 当按下 / 时,就像这样:

function! MyCustomBehaviour()
    echo "Oui oui"
endf

function! UnmapSearch()
    cunmap <cr>
    cunmap <esc>
endf

function! MapSearch()
    cnoremap <cr> <cr>:call UnmapSearch()<bar>call MyCustomBehaviour()<cr>
    cnoremap <silent> <esc> <c-c>:call UnmapSearch()<cr>
endf

noremap / :<c-u>call MapSearch()<cr>/

这是一个糟糕的方式,因为它非常错误:如果你在编辑时按 Ctrl-C 搜索,它不会取消映射<cr><esc>,然后您下次进入:(命令行)模式, 映射仍然有效...这是一个无法解决的问题(<c-c>无法解决 重新映射)。

这也是一种糟糕的方式,因为以这种方式直接重新映射/密钥,IMO,不是一个好习惯。

但是......这是我几次解决这个问题的唯一解决办法。

另一种解决方法(我最终选择的方法)可以写成一行:

cnoremap <c-cr> <cr>:call MyCustomBehaviour()<cr>