我安装了 vim EasyMotion 插件。
紧迫,
<Leader><Leader>f
从当前行向前搜索。
<Leader><Leader>F
从当前行向后搜索。
有没有办法只使用'f'来搜索缓冲区的整个可见部分?理想情况下,我不想使用两种不同的绑定来向前和向后搜索。一个单一的绑定来搜索缓冲区的整个可见部分将是最理想的。
您可以尝试这样的映射:
nnoremap <leader><leader>f :execute "/\\%>" . line('w0') . "1\\%<" . line('w$') . "l"<left>
这是一个令人困惑的语法,所以我将它解压缩。
line('w0')
并line('w$')
分别返回缓冲区中第一条和最后一条可见行的行号,以便您使用它们来查找可见部分的范围。
/
搜索命令允许指定范围,但语法很奇怪。格式是/\%>Xl\%<Yl
X 是开始的行,Y 是结束的行。
不可能只将结果从line()
普通/
调用中删除,但我们可以构建一个字符串,.
用于将段连接在一起,一旦构建了命令,将其传递给以:exec
实现它。
最后,还有<left>
. 那是用于光标定位的。当你执行<leader><leader>f
时,整个映射就像你在输入它一样触发,所以你最终:exec
会在行上得到完整的命令,并且它以 " 结尾,但你想在这些引号内输入。或者,你可以"<left>
从映射结束,但是您必须记住在输入搜索词后关闭引用。
我对 EasyMotion 不熟悉,所以这可能无法完全满足您的要求(我在输入答案后才意识到这一点),但它只会让您在缓冲区的当前可见部分中运行搜索,并且您可以毫不费力地使其适应 EasyMotion 的目的。