Vim:在长线内快速移动

时间:2011-03-29 21:06:49

标签: vim

我启用了自动换行功能,并且往往有很长的行。 但是在“w”实际上是4行高的线内移动是很麻烦的。我一直在使用/跳到我正在寻找的那个词,但这似乎过度了。

关于如何在一条线内快速移动的任何提示?

谢谢,

MRB

8 个答案:

答案 0 :(得分:92)

  • 您可以使用$0^移至行结束点,然后使用wb。此外,向wb添加数字参数可以加快整个过程,因此使用6w而不仅仅w可以将您带到您需要的位置。< / LI>
  • 使用ft移动到单个字符也会有所帮助。 (我通常用标点符号来表示。例如,如果我在一条长行2f.上有四个句子将会到第二句末尾)
  • 使用()键是浏览整个句子的另一种方式。
  • 将长行拆分成多行(手动或set tw=72 [或80])可以使编辑更简单。您随时可以使用J
  • 加入
  • 我刚刚发现的内容,您可以使用gjgk上下移动一个显示的行。这样,您可以将一条包裹的线条视为多条线。

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

答案 1 :(得分:22)

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

另请查看'virtualedit'某些选项,这些选项允许您在没有将光标移动到下一个最佳物理角色的情况下光标搜索“void”区域。

您可能想要(暂时)

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

省略<buffer>部分以全局应用此功能。

答案 2 :(得分:6)

您可以使用()按句子导航;它只是寻找.,但这可能非常有用,特别是如果你不喜欢这个句子并且想要改变它:(c)将跳到当前句子的开头,然后改变整句话。

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

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

答案 3 :(得分:6)

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

nnoremap k gk
nnoremap j gj

以下是其他几行:

nnoremap 0 g0
nnoremap $ g$
nnoremap ^ g^

答案 4 :(得分:5)

跳出长队时我首选的策略是使用f Ft T来填充字符。这一系列动作增压的原因是您可以使用;,动作,因此您不必计算角色相对于光标的位置,但只是一步一步(非常有用 ' " .等)

我们说我们有一条线:

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

如果我们需要从该行的开头跳到第三个点,我们可以使用3f.f.;;访问两个点并登陆第三个点。

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

答案 5 :(得分:3)

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

该插件的名称为PreciseJump,您可以找到它here

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

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

答案 6 :(得分:2)

您还可以使用W B来跳转到下一个空格:) G移到文档的末尾

答案 7 :(得分:2)

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

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

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

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

这会将您的控制和控制映射到移动命令。会使错误输入“gg”变得不可能,并且与控制权和控制权完全一致,可以左右移动。

如果添加其他两行,则可以在插入模式(!)

中使用相同的命令
imap <C-Up> <C-[> g<Up> i
imap <C-Down> <C-[> g<Down> i

(VIM很棒!)

Greg Ruo