【问题标题】:Easy motion vim plugin mapping issueEasy motion vim 插件映射问题
【发布时间】:2013-09-29 05:11:47
【问题描述】:

我已经安装了 vim EasyMotion 插件。

按下,

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

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

【问题讨论】:

  • EasyMotion 的问题跟踪器是over there
  • 感谢您的宝贵意见。这很有帮助。确实如此。

标签: vim plugins


【解决方案1】:

您可以尝试这样的映射:

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 的目的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-10-30
    • 2020-03-09
    • 2013-09-20
    • 2012-09-28
    • 2013-08-23
    • 1970-01-01
    • 1970-01-01
    • 2013-05-27
    相关资源
    最近更新 更多