【问题标题】:vim autocmd hook after performing a search in the text?在文本中执行搜索后,vim autocmd 挂钩?
【发布时间】:2016-10-15 05:39:13
【问题描述】:

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

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

map * *<F11>

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

但我仍然需要将我的自定义行为添加到 / 命令,这更复杂,因为在完成之前它会获取输入搜索模式。

您对如何进行有任何提示吗?我可以使用autocmd 吗?或者有没有map 的把戏?

【问题讨论】:

  • 更多解释请举个例子
  • 刚刚添加了一些上下文;更多细节会将问题转移到其他细节
  • 什么样的自定义行为?如果你不隐藏,我可以告诉一个答案:D
  • 恕我直言,stackoverflow 上的问题应该尽可能“原子”,以便以更全面的方式描述问题。无论如何,即使这无助于回答我的问题,我也会告诉你我的想法只是为了满足你的好奇心:我正在构建一个外部程序,它将在包含许多源文件的目录中搜索我的令牌在我正在编辑的当前文件中搜索。快完成了,非常酷。

标签: vim editor text-editor vi


【解决方案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 搜索,它不会取消映射&lt;cr&gt;&lt;esc&gt;,那么下次你会进入:(命令行)模式, 映射仍将处于活动状态......这是一个无法解决的问题(&lt;c-c&gt; 不能 重新映射)。

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

但是...这是我前段时间找到的唯一解决方案,可以半解决这个问题。

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-05-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-21
    • 2011-08-25
    相关资源
    最近更新 更多