如何在Vim中移至行尾?


1192

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


19
不到10分钟即可涵盖基本的vim命令youtube.com/watch?v=71YTkxUNwmg
eomeroff 2014年

14
花几分钟通过vimtutor运行有什么问题?这已经是您Vim安装的一部分,并向您展示了基础知识。
dash-tom-bang

@ dash-tom-bang好吧,他们在这里获得了很高的分数... :)但是,是的,你说得对vimtutor。大概他们不知道吗?
Pryftan

Answers:


2049

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

顺便说一句,AI(在行首插入模式)。只需按^将光标放置在该行的第一个非空白字符处。


81
跳转到最后一个非空白g_
SergioAraujo,2012年

2
有时,这种g_
体会

6
_g变体在可视模式下工作时非常有用,因为它允许您使用该行,而末尾没有任何换行符。
格雷格·罗宾斯

2
尽管Home键和End键可以在常规键盘上使用,但是在使用笔记本电脑时需要$和^ :)
Sridhar Sarnobat 2012年

您应该将^添加到列表中。
Tek

303

正如许多人所说:

  • $ 带您到行尾

但是也:

  • ^_将您带到该行的第一个非空白字符,并且
  • 0(零)可让您到达行首,包括。空格

我知道 使我们到达该行的开头,但我不知道0。所以0和| 做完全一样的事情,是吗?
Kamran Bigdely 2011年

8
@kami:虽然描述不同,但它们的表现似乎相同。但是,pipe |命令可以计数,例如3 |。跳到第三列。
Paul Ruane

136
  • $ 移动到该行的最后一个字符。
  • g _ 转到最后一个非空白字符。

  • g $ 转到屏幕行的末尾(当一条缓冲线包裹在多条屏幕行上时)


我觉得g_和$ b是同一回事
Dave Aaron Smith

3
@DaveAaronSmith:b转到上一个单词的开头,这根本不是一回事。大致等于$ge
Paul Ruane 2012年

9
我使用_g_进行视觉/粘贴,$也将复制/删除新行(LN)字符。
欧内斯特(Ernest)

对我来说,$转到当前屏幕行的末尾(换行时)。我还没有弄清楚为什么。g_这是我发现到达实际行尾的唯一方法。
ezuk 2015年

@ezuk $即使为我包裹也走到了行尾。我知道没有任何设置可以调整其行为。也许您的.vimrc已将其重新映射到g$
Paul Ruane 2015年

66

主要问题-行尾

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

A 转到行尾,切换到插入模式

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

^ 移至行首,仍处于命令模式

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

进一步-行的开始(技术上第一列,与空白无关

0 (零)转到行的开头,保持在命令模式下

0i (零后接小写字母i)开始行,切换到插入模式

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

Windows用户的vi编辑器


3
该模拟到I是不是0,但是^,因为两者I^转到第一个非空行的字符,但0趋于零柱(顾名思义)。
wchargin 2015年

@wchargin是真的,以为我似乎找不到类似的东西0?(转到该行的第一个字符(=列0)并进入插入模式)
franssu

@franssu:我唯一知道的是0i。:-)
wchargin

@wchargin-感谢技术上的正确性。我更新了帖子。
ap-osd

42

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


3
我刚刚发现在向上和向下命令前加上g使vim基于屏幕而不是基于行移动光标。即gjgk允许您沿长线上下移动。真的很有用。
Druckles

1
还发现键入gw和某些内容似乎会永久更改jk,使其表现如下。不知道如何或为什么。谁能解释一下?
Druckles

4
@Druckles:回复有点晚,但是如果您仍然想知道(或者是否有其他人正在阅读),gw并且gq它们是重新格式化文本的命令。(请参阅:h gw:h gq)发生的可能是您所做的gw{motion}并更改了一些文本,以使屏幕行与实际行相对应。
pandubear


13

在许多情况下,当我们在字符串中时,我们会用双引号将其括起来,或者在编写语句时,我们不想按Escape键并使用箭头键转到该行的末尾并按分号(;)即可结束线。在vimrc文件中写以下行:

imap <C-l> <Esc>$a

该行怎么说?它将Ctrl + l映射到一系列命令。等效于您同时按Esc(命令模式),$(行尾),a(附加)。


谢谢你的那一个。我一直想将Ctrl-e重新添加到我的vim中,就像在第一台机器上一样转到行尾,
却不

1
正如公认的答案所说,您可以按A来执行相同的操作。
trysis

4
@trysis,您误解了,这并没有脱离编辑模式,这是相当不错的。
马可尼2015年

2
你是对的。vim当然,您可以用更少的时间做更多的事情。@razorxpress,将稍作调整imap <C-l> <Esc>A,使Ctrl + l等效于按Esc(退出插入模式)然后按A(附加到行尾)。
trysis 2015年

3
我认为,映射这种情况的更惯用的方式是inoremap <C-l> <C-o>A
bennyty

12

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

'$'仅在普通/命令模式下有效,但在经典的vi编辑器中也有效(很高兴知道vim何时不可用)。


38
您在插入模式周围干什么?白天之后,没有普通的体面的公民去那里。你知道那里发生了什么,不是吗?代码在那里消失了,知道吗?它消失了,再也没有听到过。
Rook

3
谢谢您这样做,因为我想在进入输入模式后一直停留在插入模式。不幸的是我的笔记本电脑没有结束键。:(
ray

12

还要注意线(或物理线)和屏幕线之间的区别。行以行尾字符(“ \ n”)结尾。屏幕行是指在终端或屏幕上显示为一行字符的任何内容。如果您的物理线长于屏幕宽度,则两者会分开,这在编写电子邮件等时非常常见。

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

  • $并分别0移至物理行或段落的结尾或开头:
  • g$并分别g0移至屏幕行或段落的末尾。

如果您始终喜欢后一种行为,则可以像这样重新映射键:

:noremap 0 g0
:noremap $ g$

1
如何到达该行的最后一个非空白?(无论是屏蔽线还是物理线)
Kamran Bigdely 2011年

g_物理行的最后一个非空白。屏幕线怎么样?
trysis


9

还是有一个明显的答案:使用End键转到行尾。


1
是的,mac terminal是我注意到的劫持密钥,并且不会将其传递给在terminal内部运行的东西。每当我使用Mac时,烦恼我的事情之一。
2011年

使用vim的全部目的是不必使用'End'之类的键。永远不要离开家。
乔恩·索罗德森

7
在Mac上,没有结束键。
kenorb 2015年

1
@kenorb曾经有一次我发表评论...但是苹果多年来一直喜欢删除功能。netdna.webdesignerdepot.com/uploads/2009/01/…这实际上是我有史以来最喜欢的键盘之一
davr

9

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

fn+ -移至开始行

fn+ -移至终点线

fn+ -向上移动页面

fn+ -下移页面

fn+ g -将光标移动到文档的开头

fn+ shift + g -将光标移至文档末尾

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


6

可能不相关,但是如果要在当前行之后开始新行,则可以在行中的任何位置使用o。


3

最简单的选择是键入$。如果您正在处理文本块,则可能会喜欢该命令,{并且}为了分别将段落前后移动。


2

我习惯了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-,但这并不能很好地粘贴到这样的地方。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.