0

我安装了 vim EasyMotion 插件。

紧迫,

<Leader><Leader>f从当前行向前搜索。
<Leader><Leader>F从当前行向后搜索。

有没有办法只使用'f'来搜索缓冲区的整个可见部分?理想情况下,我不想使用两种不同的绑定来向前和向后搜索。一个单一的绑定来搜索缓冲区的整个可见部分将是最理想的。

4

1 回答 1

0

您可以尝试这样的映射:

nnoremap <leader><leader>f :execute "/\\%>" . line('w0') . "1\\%<" . line('w$') . "l"<left>

这是一个令人困惑的语法,所以我将它解压缩。

line('w0')line('w$')分别返回缓冲区中第一条和最后一条可见行的行号,以便您使用它们来查找可见部分的范围。

/搜索命令允许指定范围,但语法很奇怪。格式是/\%>Xl\%<YlX 是开始的行,Y 是结束的行。

不可能只将结果从line()普通/调用中删除,但我们可以构建一个字符串,.用于将段连接在一起,一旦构建了命令,将其传递给以:exec实现它。

最后,还有<left>. 那是用于光标定位的。当你执行<leader><leader>f时,整个映射就像你在输入它一样触发,所以你最终:exec会在行上得到完整的命令,并且它以 " 结尾,但你想在这些引号内输入。或者,你可以"<left>从映射结束,但是您必须记住在输入搜索词后关闭引用。

我对 EasyMotion 不熟悉,所以这可能无法完全满足您的要求(我在输入答案后才意识到这一点),但它只会让您在缓冲区的当前可见部分中运行搜索,并且您可以毫不费力地使其适应 EasyMotion 的目的。

于 2013-09-24T13:52:46.797 回答