ChatGPT解决这个技术问题 Extra ChatGPT

如何在 Vim 中移动到行尾?

我知道通常如何在命令模式下移动,特别是跳转到行等。但是跳转到我当前所在行末尾的命令是什么?

不到 10 分钟就涵盖了基本的 vim 命令youtube.com/watch?v=71YTkxUNwmg

v
vgoff

只是 $(美元符号)键。您可以使用 A 移动到行尾并切换到编辑模式(追加)。要跳转最后一个非空白字符,可以按 g 然后 _ 键。

作为旁白,A 的反面是 I(在行首插入模式)。仅按 ^ 会将光标放在该行的第一个非空白字符处。


跳转到最后一个非空白 g_
在可视模式下工作时,_g 变体非常有用,因为它允许您使用末尾没有任何换行符的行。
虽然 Home 和 End 键可以在普通键盘上使用,但在使用笔记本电脑时需要 $ 和 ^ :)
您应该将 ^ 添加到列表中。
如果您的换行,您可以使用 g$ 到达当前换行的末尾。
S
SimTae

正如很多人所说:

$ 让你到达行尾

但是也:

^ 或 _ 将您带到该行中的第一个非空白字符,并且

0(零)将您带到行首,包括。空白


我知道 |将我们带到行首,但我不知道 0。所以 0 和 |做同样的事情,是吗?
@kami:虽然描述不同,但它们的行为确实相同。但是 pipe | 命令可以进行计数,例如 3|跳到第三列。
P
Paul Ruane

$ 移动到该行的最后一个字符。

g _ 转到最后一个非空白字符。

g $ 转到屏幕行的末尾(当缓冲行跨越多个屏幕行时)


我觉得 g_ 和 $b 是一样的
@DaveAaronSmith:b 转到前一个单词的开头,这根本不是一回事。它大致相当于 $ge
我使用 _g_ 进行视觉/拉动,因为 $ 还将复制/删除换行符 (LN) 字符。
对我来说, $ 转到当前屏幕行的末尾(包装时)。我还没弄清楚为什么。 g_ 是我发现到达行尾的唯一方法。
@ezuk $ 即使为我包装,也会走到行尾。我知道没有设置来调整其行为。也许它已被您的 .vimrc 重新映射到 g$
a
ap-osd

主要问题 - 行尾

转到行尾,保持在命令模式

走到行尾,切换到插入模式

相反 - 行首(技术上是第一个非空白字符)

^ 转到行首,保持在命令模式

I(大写 i)转到行首,切换到插入模式

进一步 - 行首(技术上第一列与空格无关)

0(零)转到行首,保持在命令模式

0i(零后跟小写 i)进入行首,切换到插入模式

对于那些开始学习 vi 的人,这里是 vi 的一个很好的介绍,通过并排列出 vi 命令到典型的 Windows GUI 编辑器光标移动和快捷键。

vi editor for Windows users


C
Commodore Jaeger

如果当前行环绕可见屏幕到下一行,则可以使用 g$ 到达屏幕行的末尾。


我刚刚发现使用 g 预先挂起 up 和 down 命令使 vim 基于屏幕移动光标,而不是基于行。即 gj 和 gk 允许您在一条长线上上下移动。真的很有用。
还发现键入 gw 和某些东西似乎会永久改变 j 和 k 的行为。不知道如何或为什么。谁能解释一下?
@Druckles:回复有点晚,但如果您仍然想知道,(或者如果其他人正在阅读这篇文章)gwgq 是重新格式化文本的命令。 (见 :h gw:h gq) 可能发生的情况是您做了 gw{motion} 并更改了一些文本,以便屏幕行与实际行相对应。
A
Alexander Yushko

我看不到在标准终端中使用 vim 的 macbook 热键。希望它会帮助某人。对于 macOS 用户(在 macbook pro 2018 上测试):

fn + ← - 移动到开始行 fn + → - 移动到结束行 fn + ↑ - 向上移动页面 fn + ↓ - 向下移动页面 fn + g - 将光标移动到文档的开头 fn + shift + g - 移动光标到文档末尾

对于最后两个命令,有时需要点击两次。


D
David Singer

美元符号:$


V
Vidura Mudalige

按 A 从行尾开始进入编辑模式。


D
Diastrophism

“结束”键的优点是它可以在正常和插入模式下工作。

'$' 仅适用于普通/命令模式,但它也适用于经典 vi 编辑器(很高兴知道 vim 何时不可用)。


你在插入模式附近做什么?!没有一个普通的正派公民在天亮后去那里。你知道里面会发生什么,不是吗?代码在那里消失了,你知道吗?它消失了,再也没有音讯。
k
kenorb

在许多情况下,当我们在一个字符串中时,我们用双引号括起来,或者在编写语句时,我们不想按转义键并使用箭头键转到该行的末尾并按分号(;)只是为了结束这一行。在 vimrc 文件中写入以下行:

imap <C-l> <Esc>$a

这条线说什么?它将 Ctrl+l 映射到一系列命令。这相当于你一次按 Esc(命令模式)、$(行尾)、a(追加)。


谢谢你。我一直想将 Ctrl-e 添加回我的 vim,就像在我的第一台机器上一样转到行尾,但不知道如何
正如公认的答案所说,您可以按 A 做同样的事情。
@trysis您误解了,这并没有脱离非常好的编辑模式。
你是对的。 vim 当然可以让您在更短的时间内完成更多的事情。 @razorxpress,一个小的调整将是 imap <C-l> <Esc>A,这使得 Ctrl+l 相当于按 Esc(退出插入模式),然后按 A(附加到行尾)。
我认为更惯用的映射方式是inoremap <C-l> <C-o>A
s
sudo bangbang

还要注意线(或者可能是物理线)和屏幕线之间的区别。行由行尾字符 ("\n") 终止。屏幕行是在终端或屏幕中显示为一行字符的任何内容。如果你的物理线长于屏幕宽度,这两者就会分开,这在写电子邮件等时很常见。

区别也显示在行尾命令中。

$ 和 0 分别移动到物理行或段落的末尾或开头:

g$ 和 g0 分别移动到屏幕行或段落的末尾或开头。

如果你总是喜欢后一种行为,你可以像这样重新映射键:

:noremap 0 g0
:noremap $ g$

如何到达该行的最后一个非空格? (无论是屏线还是物理线)
g_physical 行的最后一个非空格。屏线呢?
V
Vidura Mudalige

或者有一个显而易见的答案:使用 End 键转到行尾。


是的,mac 终端是我注意到的一种,它会劫持密钥并且不会将它们传递给终端内运行的东西。每当我使用 Mac 时,都会让我烦恼的事情之一。
使用 vim 的全部意义在于不必使用像“End”这样的键。永远不要离开本行。
在 Mac 上没有 End 键。
@kenorb 当我发表评论时……但苹果多年来喜欢删除功能。 netdna.webdesignerdepot.com/uploads/2009/01/… 这实际上是我一直以来最喜欢的键盘之一
@JonThoroddsen 当终端上的 Esc 没有放置那么远时,不离开主行要容易得多。
g
graywh

可能不相关,但如果你想在当前行之后开始新的一行,你可以在该行的任何地方使用 o。


s
sudo bangbang

最简单的选择是键入 $。如果您正在处理文本块,您可能会喜欢使用命令 { 和 } 来分别前后移动段落。


M
Marcus

我习惯于 Home/End 让我在插入模式下进入行的开头和结尾(在 Windows 中使用,我认为是 Linux),Mac 不支持。这特别烦人,因为当我在远程系统上使用 vim 时,我也不能轻易做到。经过一些痛苦的试验和错误后,我想出了这些 .vimrc 行,它们做同样的事情,但绑定到 Ctrl-A 用于行的开头和 Ctrl-D 用于行的结尾。 (出于某种原因,我猜 Ctrl-E 是保留的,或者至少我想不出一种绑定它的方法。)享受吧。

:imap <Char-1> <Char-15>:normal 0<Char-13>
:imap <Char-4> <Char-15>:normal $<Char-13>

这里有一个很好的 ASCII 控制字符代码图表供其他人使用:

http://www.physics.udel.edu/~watson/scen103/ascii.html

您也可以执行 Ctrl-V + Ctrl- ,但这并不能很好地粘贴到这样的地方。