Vim:在长行内快速移动

67

我启用了自动换行,并且通常会有很长的行。 但是在实际上有4行高度的“w”内移动比较麻烦。 我一直使用/跳转到我要查找的单词,但这似乎有些过头了。

有没有关于如何更快地在行内移动的提示?

谢谢,

MrB

8个回答

118
  • 您可以使用$0^来移动到行端点,然后再使用wb。此外,在wb中添加数字参数可以加快进程,因此使用6w而不是仅使用w可以将您带到所需位置。
  • 使用ft移动到单个字符也会有所帮助。(我通常在标点符号中使用此功能。例如,如果我在一行上有四个句子,则2f.将转到第二个句子的末尾)
  • 使用()键是导航整个句子的另一种选择。
  • 将长行拆分为多行(手动或使用set tw=72 [或80])可以使编辑更简单。您始终可以使用J将它们连接起来。
  • 我刚刚发现的一件事,您可以使用gjgk向上和向下移动一个显示行。这样,您可以将您的一个换行行视为多个行。

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


12
gjgk 也可以用相应的箭头来完成,即 g<箭头向上>g<箭头向下>。非常感谢! - alexm
14
前往屏幕中间行的字符。 - Alex Kroll
2
感谢您的回答(特别是关于“gj”和“gk”的提示!) - Maciek Talaska
1
请注意,g技巧是通用的。 g0将把您移动到显示行的开头,而g$将把您移动到显示行的结尾。 - chessofnerd
1
感谢您提供的有关使用 () 导航句子的提示。当您将 L 或 R shift 键映射到相应的括号时,它可以完美地发挥作用。 - Mallory-Erik
显示剩余2条评论

31

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

此外,查看 'virtualedit' 以获取一些选项,使您可以在"虚空"区域中通过光标移动,而无需将光标切换到下一个最佳物理字符。

您可能想要(暂时)

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

如果要全局应用,请省略 <buffer> 部分。


这是我使用的解决方案。非常方便。向上和向下箭头仍保留传统行为,用于移动到前一个和后一个实际行。 - gotgenes

9
你可以使用()来按句子导航;它只是查找.,但这可能非常有帮助,特别是如果你不喜欢这个句子并想要更改它:(c)将跳转到当前句子的开头,然后更改整个句子。
你还可以使用we,带有计数修饰符,以移动单词。 3w每次会移动三个单词。
你还可以使用fF向前和向后搜索特定字符。如果你正在寻找单词quitesyzygy,那么这将非常有用,而不是the。 :)

9

我在处理长行文本时,常用的策略是使用 f Ft T 定位到目标字符。这一系列动作的优秀之处在于你可以利用 ;, 动作来遍历它们(对于定位 ' " . 等特殊字符非常有用),而不必计算字符相对于光标的位置。

假设我们有一行文本:

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

如果我们需要跳转到一行开头的第三个点,我们可以使用3f.f.;;,它们会访问两个点并着陆在第三个点。虽然;,样式需要更多按键,但我发现它总体上更灵活、更有趣。

8
如果您选择重新映射它们的路线:
nnoremap k gk
nnoremap j gj

这里还有几个相关的内容:

nnoremap 0 g0
nnoremap $ g$
nnoremap ^ g^

3
我最近开始使用一个插件,它可以让我在一行(或整个文件)中快速移动,这个插件叫做PreciseJump,你可以在这里找到它的链接
当你使用这个插件时,它会定义两个映射:_f和_F。如果你输入_f,然后输入x,它会高亮所有的x字符,并且会暂时替换成其他字符,你可以按下这些字符来跳转到相应的位置。请查看脚本页面以了解更多信息。

2
请注意,使用"g"键后跟上或下箭头确实可以正常工作,但如果你有很长的行并且移动速度较快,你可能会误输入"gg",导致回到文本顶部...!(撤消将无法让你返回,并且据我所知没有一键返回之前位置的快捷键。)
这种情况也发生在我身上很多次。
我所做的是,建议您修改(或创建)您的“~/.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

1
尝试使用 ctrl+o 返回到先前的位置。 - Nathan majicvr.com
你可以在正常模式下输入 :marks 来查看位置,然后按 'd 跳转到标记 d。 - Nathan majicvr.com

2
你还可以使用 WB 来移动,它们会跳到下一个空格 :) G 可以移动到文档的末尾

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接