我知道通常如何在命令模式下移动,特别是跳转到行等。但是跳转到我当前所在行末尾的命令是什么?
15 回答
只是$ (美元符号)键。您可以使用A移动到行尾并切换到编辑模式(追加)。要跳转最后一个非空白字符,可以按gthen_键。
与之相反的A是I(在行首插入模式),作为旁白。仅按^会将光标放在该行的第一个非空白字符处。
正如很多人所说:
- $让你走到最后
但是也:
- ^或_让您到达该行中的第一个非空白字符,并且
- 0(零)将您带到行首,包括。空白
- $移动到该行的最后一个字符。
g _转到最后一个非空白字符。
g $转到屏幕行的末尾(当缓冲行跨越多个屏幕行时)
主要问题 - 行尾
$到行尾,保持在命令模式
A走到行尾,切换到插入模式
相反 - 行首(技术上是第一个非空白字符)
^转到行首,保持在命令模式
I(大写 i)转到行首,切换到插入模式
进一步 - 行首(技术上第一列与空格无关)
0(零)转到行首,保持在命令模式
0i(零后跟小写 i)进入行首,切换到插入模式
对于那些开始学习 vi 的人,这里是 vi 的一个很好的介绍,通过并排列出 vi 命令到典型的 Windows GUI 编辑器光标移动和快捷键。
如果当前行环绕可见屏幕到下一行,则可以使用g$到达屏幕行的末尾。
我看不到在标准终端中使用 vim 的 macbook 热键。希望它会帮助某人。对于 macOS 用户(在 macbook pro 2018 上测试):
fn+ ← - 移动到开始行
fn+ → - 移动到结束行
fn+ ↑ - 向上移动页面
fn+ ↓ - 向下移动页面
fn+ g - 将光标移动到文档的开头
fn+ shift + g - 将光标移动到文档末尾
对于最后两个命令,有时需要点击两次。
按下A以从行尾开始进入编辑模式。
美元符号:$
“结束”键的优点是它可以在正常和插入模式下工作。
'$' 仅适用于普通/命令模式,但它也适用于经典 vi 编辑器(很高兴知道 vim 何时不可用)。
在许多情况下,当我们在一个字符串中时,我们用双引号括起来,或者在编写语句时,我们不想按转义键并使用箭头键转到该行的末尾并按分号(;
)只是为了结束线。在vimrc文件中写入以下行:
imap <C-l> <Esc>$a
这条线说什么?它将 Ctrl+l 映射到一系列命令。这相当于你一次按Esc(命令模式),$(行尾),a(追加)。
还要注意line(或者可能是物理线)和screen line之间的区别。行由行尾字符 ("\n") 终止。屏幕行是在终端或屏幕中显示为一行字符的任何内容。如果你的物理线长于屏幕宽度,这两者就会分开,这在写电子邮件等时很常见。
区别也显示在行尾命令中。
- $并0分别移动到物理行或段落的末尾或开头:
- g$并g0分别移动到屏幕行或段落的末尾或开头。
如果你总是喜欢后一种行为,你可以像这样重新映射键:
:noremap 0 g0
:noremap $ g$
或者有一个明显的答案:使用End键走到行尾。
可能不相关,但如果你想在当前行之后开始新的一行,你可以在该行的任何地方使用 o。
最简单的选择是键入$. 如果您正在处理文本块,您可能会喜欢该命令{,}以便分别前后移动段落。
我习惯于 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- ,但这并不能很好地粘贴到这样的地方。