ge
将光标移动到前一个单词的末尾。e
本来是移动到单词的末尾,而且符号算一个单词,E
则是将字母和符号都算作一个单词,ge
则是移动到前一个单词的末尾,b
是移动到前一个单词的开头,gE
则是移动到前一个单词的末尾,但不包括空白字符(空格、制表符、换行符)。有趣的是,gb
dap
删除段落及附近空行。不需要可视化后选择多行再删除啦。ctrl+u
向上翻滚半页,ctrl+d
向下翻滚半页,ctrl+f
向下翻滚一页,ctrl+b
向上翻滚一页$
表示当前行的结尾,^
表示当前行的开头,0
表示当前行的第一个非空字符,-
表示上一行,+
表示下一行,%
表示匹配括号,*
表示查找光标下的单词,#
表示查找光标下的单词的上一次出现位置ctrl+a
和ctrl+x
分别增加和减少数字,ctrl+u
和ctrl+d
分别增加和减少小数点前面的数字[[
(跳转到下一个段落的开头):read !ls
从外部命令读取内容并插入到当前缓冲区gcc
注释当前行,gcap
注释当前段落,gx
打开链接。>>
表示往右缩进,>G
表示增加从当前行到文件最后一行的所有行的缩进。
键盘映射
VSCode 中使用 vim 插件键盘映射方式,在 settings.json 文件中添加以下内容:
1 | { |
使用标签页(Tab Pages)
标签页(tab pages)可以让你像浏览器标签一样在多个文件之间切换,每个标签页都可以包含多个窗口(window)。
:tabnew [filename]
:打开一个新的标签页并加载指定的文件。如果不指定文件,会打开一个空的标签页。:bn
:切换到下一个标签页。:bp
:切换到上一个标签页。:tabedit [filename]
:与:tabnew
类似,打开指定文件到新标签页。gt
或gT
:分别跳转到下一个或上一个标签页。
使用窗口(Windows)
窗口(windows)是将 vim
编辑器分成多个视图,每个视图可以显示不同的文件或同一文件的不同部分。
:sp [filename]
:水平分割窗口并打开指定文件。:vsp [filename]
:垂直分割窗口并打开指定文件。:only
:关闭所有窗口,仅保留当前窗口。
使用缓冲区(buffers)
缓冲区(buffers)是 vim
中用于处理打开文件的内部表示。每个文件都在内存中作为缓冲区进行处理。而我主要还是使用的 VSCode 编辑器家 vim 插件,在 VSCode 中,缓冲区的切换可以通过ctrl+tab
来切换,更加符合 GUI 界面的操作习惯。
:e [filename]
:打开一个文件,创建新的缓冲区。:bn
:切换到下一个缓冲区,:bp
:切换到上一个缓冲区。:b [buffer number or name]
:切换到指定的缓冲区。:bd
:删除当前缓冲区。:bw
:关闭当前窗口并删除缓冲区(但不退出vim
)。
寄存器与宏
"
:默认寄存器,平时复制、删除的内容都放在里面。%
:当前文件名。.
:上一次插入的内容。:
:上一次执行的命令。:reg {register}
查看对应寄存器中的内容。"ayy
:将这一行复制到a寄存器中。"bdiw
:将单词删除,保存到b寄存器中。"cp
:将c寄存器中的内容粘贴出来。
寄存器字符大写表示添加(append)而非覆盖。
Ex 命令格式
- 格式:
:[range] {excommand} [args]
- 解读:
range
:作用范围,不指定则默认是当前行。excommand
:特殊命令,适用于 Command 模式。args
:后续参数,视命令而定。 :[range] d/y/p {register}
address
可以是:{lineno}
:行号,如3
代表第三行(0
代表第一行上面的虚拟行)。$
:最后一行。.
:光标所在行。/{pattern}/
:下一个pattern
所在的行。
%
:特殊的range
,代表当前文件的所有内容。'<'>
:可视模式中选中范围的开头和结尾(可视模式下直接按:
可以直接设置)。
normal 命令
- 格式:
:[range] normal {commands}
- 含义:对
range
中的所有行执行 Normal 模式下的命令commands
。 - 常用做法:先做一次修改操作,再用
normal
命令在指定的行上完成操作。 .
命令只能记录一次修改,用宏可以实现记录多个操作。:[range] normal @{register}
:先把想要的操作录制成宏,再用normal
命令在指定的行上重放宏。:1,4 normal I#
表示在第 1 到第 4 行前面插入#
。
global 命令
- 格式:
:[range] global/{pattern}/[cmd]
- 含义:对
range
中包含pattern
的所有行执行 Command 模式下的 E x 命令[cmd]
。 [cmd]
:Ex 命令,不指定则默认是打印(print
)。- 例子:
:% global /TODO/delete
:删除所有带TODO
的行。
替换命令
- 格式:
:[range]s/{pattern}/{string}/[flags]
flags
:g
:替换每一行的所有匹配,i
:忽视大小写,c
:替换前进行确认。:%s/^#/##/g
:所有标题加一级。还可以用&
表示匹配的原始内容。
参考内容
视频 这是一个比 missing-semester 更好的学习视频,全程无废话全干货,目前为止看到最好的 vim 教学视频