【问题标题】:Vim: move around quickly inside of long lineVim:在长线内快速移动
【发布时间】:2011-03-29 21:06:49
【问题描述】:

我启用了自动换行,并且往往有很长的行。 但是在一条实际上是 4 行高的行内移动,并带有“w”是很麻烦的。我一直使用 / 来跳转到我正在寻找的单词,但这似乎有点过头了。

关于如何在一行内更快移动的任何提示?

谢谢,

B先生

【问题讨论】:

    标签: vim


    【解决方案1】:
    • 您可以使用$0^ 移动到线端点,然后使用wb。此外,将数字参数添加到 wb 可以加速该过程,因此使用 6w 而不仅仅是 w 可以让您到达您需要的位置。
    • 使用ft 移动到单个字符也会有所帮助。 (我通常将它与标点符号一起使用。例如,如果我在一长行中有四个句子2f. 将转到第二句的末尾)
    • 使用 () 键是浏览整个句子的另一种方法。
    • 将长行拆分为多行(手动或使用set tw=72 [或80])可以使编辑更简单。您以后可以随时通过J 加入他们。
    • 我刚刚发现的东西,您可以使用gjgk 上下移动显示的 行。这样一来,您就可以将一个换行视为多行。

    如果您对正在编辑的数据类型发表评论,我们可能会更容易提出建议。

    【讨论】:

    • gjgk 也可以用等效的箭头来完成,即 g<arrow-up>g<arrow-down>。非常感谢!
    • gm 转到屏幕中间的字符
    • 感谢您的回答(尤其是关于gjgk 的提示!)
    • 请注意,g 技巧是泛化的。 g0 会将您移至显示行的开头,g$ 会将您移至显示行的末尾。
    • 感谢您提供有关使用 () 导航句子的提示。当您将 L 或 R 仅移位映射到它们各自的括号时,效果很好。
    【解决方案2】:

    我认为你可以从 gk 和 gj 而不仅仅是 k 和 j 中受益。

    另请查看'virtualedit' 中的一些选项,这些选项可让您在“空白”区域中进行光标移动,而无需将光标移至下一个最佳物理字符。

    你可能想要(暂时)

    nnoremap <buffer> k gk
    nnoremap <buffer> j gj
    

    省略&lt;buffer&gt; 部分以全局应用。

    【讨论】:

    • 这是我使用的解决方案。很方便。向上和向下箭头仍然保留移动到上一条和下一条实际行的传统行为。
    【解决方案3】:

    您可以使用()进行逐句导航;它只是寻找.,但这非常有用,尤其是如果您不喜欢该句子并想更改它:(c) 将跳到当前句子的开头,然后更改整个句子。

    您还可以使用带有计数修饰符的we 来移动单词。 3w 将一次移动三个单词。

    您还可以使用fF 向前和向后搜索特定字符。如果您要查找单词quitesyzygy,这比the 更有用。 :)

    【讨论】:

      【解决方案4】:

      我在排长队时首选的策略是使用f Ft T 将角色归零。使这一系列动作超强的原因在于您可以利用;, 动作,因此您不必计算字符相对于光标的位置,而只需单步执行即可(非常有用的 '".等)

      假设我们有一条线:

      reallyLongObjectName.longMethod().prettyPrettyLongMethod().burp();
      

      如果我们需要跳到行首的第三个点,我们可以使用3f.f.;; 访问两个点并落在第三个点。

      虽然; , 样式可以使用更多的击键,但我发现它整体上更加灵活和有趣。

      【讨论】:

        【解决方案5】:

        如果您选择重新映射这些路线:

        nnoremap k gk
        nnoremap j gj
        

        这里还有几个类似的:

        nnoremap 0 g0
        nnoremap $ g$
        nnoremap ^ g^
        

        【讨论】:

          【解决方案6】:

          我最近开始使用一个插件,我发现它非常适合在一行(或洞文件)内快速移动。

          插件的名字是PreciseJump,你可以找到它here

          当你使用这个插件时,它定义了映射 _f 和 _F。

          如果您键入 _f 后跟 x,它将突出显示所有 x 字符,并将临时替换为您可以按以跳转到该位置的其他字符。检查脚本页面以获取插图。

          【讨论】:

            【解决方案7】:

            您还可以使用W B 移动,这将跳到下一个空格:) G 移动到文档末尾

            【讨论】:

              【解决方案8】:

              请注意,使用“g”后跟向上或向下箭头确实可以正常工作,但是如果您的行长且移动速度很快,您可能会错误地输入“gg”并最终出现在文本的顶部... ! (撤消不会把你带回来,而且AFAIK没有一键按下的方式回到你原来的位置。)

              这种事发生在我身上太多次了。

              我所做的是,我建议你修改(或创建)你的“~/.vimrc”并添加这两行:

              map <C-Up> g<Up>
              map <C-Down> g<Down>
              

              这会将您的控制向上和控制向下映射到移动命令。将使错误输入“gg”成为不可能,并且与 control-right 和 control-left 完全一致,可以绕长线移动。

              如果你添加这两行,你可以在插入模式下使用相同的命令(!)

              imap <C-Up> <C-[> g<Up> i
              imap <C-Down> <C-[> g<Down> i
              

              (VIM 很棒!)

              格雷格若

              【讨论】:

              • 尝试ctrl+o 回到之前的位置
              • 或者您可以通过在正常模式下输入:marks然后'd移动到标记d来查看位置
              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2011-10-08
              • 2012-03-21
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2012-02-03
              • 1970-01-01
              相关资源
              最近更新 更多