注:本文为过去的 "vim 使用笔记"。
跳转命令
跳转命令
#:向前查找光标当前所在单词,并跳转到该单词的上一个出现位置。*:向后查找光标当前所在单词,并跳转到该单词的下一个出现位置。
行内跳转
0:跳转到当前行的行首。 [Home]$:跳转到当前行的行尾。 [End]^:跳转到当前行的第一个非空字符处。g_:跳转到行尾最后一个非空白字符。|n:跳转到当前行的第 n 列(例如:|10跳转到第 10 列)。
文件内跳转
gg:跳转到文件第一行的行首。G:跳转到文件最后一行的行首。G$:跳转到文件最后一行的行尾。 [Ctrl + End]:line-number或:n:跳转到指定行号的行(例如::100跳转到第 100 行)。nG:跳转到文件的第 n 行(例如:20G跳转到文件的第 20 行)。/{pattern}:跳转到第一个与{pattern}匹配的位置。
屏幕跳转
H:跳转到屏幕的最上方一行的第一个字符。M:跳转到屏幕的中央那一行的第一个字符。L:跳转到屏幕的最下方一行的第一个字符。Ctrl + b:向上滚动一屏。Ctrl + f:向下滚动一屏。
单词跳转
b:跳转到前 1 个单词的开头(例如:5b向前跳转到第 5 个单词的开头)。e:跳转到当前单词的末尾。w:跳转到下 1 个单词的开头(例如:5w向后跳转到第 5 个单词的开头)。ge:向前跳转到当前单词的结尾(例如:3ge向前跳转到第 3 个单词的结尾)。
字符跳转
f{char}:跳转到当前行下一个字符{char}的位置(例如:fa跳转到下一个字母 a)。F{char}:跳转到当前行上一个字符{char}的位置。h或←:向左跳转一个字符(例如:10h向后跳转 10 个字符)。l或→:向右跳转一个字符(例如:10l向前跳转 10 个字符)。
行间跳转
j或↓:向下跳转一行(例如:5j向下跳转 5 行)。k或↑:向上跳转一行(例如:5k向上跳转 5 行)。n<Enter>:光标向下跳转 n 行
删除命令
字符删除
x:删除当前光标所在位置的字符,并将光标自动向后跳转一个字符(例如:3x删除光标后的三个字符,3X删除光标前的三个字符)。dl:同x,删除光标所在位置的字符(例如:5dl删除光标后的 5 个字符)。dh:删除光标所在位置的前一个字符。
行删除
dd:删除当前行(例如:5dd向下删除 5 行,共 6 行)。D:删除从光标当前位置一直到该行的末尾(包括光标所在的字符)。d$:删除至行尾。d0:删除至行首。
单词删除
dw:删除光标所在位置到下 1 个单词开头之间的内容(不保留空格,例如:5dw删除连续的 5 个单词)。de:删除从光标位置到当前单词末尾的内容(不会删除空格)。dex:删除从光标所在位置到当前单词末尾之间的所有字符,包括当前单词末尾的空格。db:删除光标所在单词及其前面的空格。daw:删除光标所在的单词及其后面的空格。diw:删除光标所在的单词,并保留其前后的空格。bdw:删除光标所在位置到前 1 个单词开头之间的内容,并且不保留空格。
范围删除
:3,5d:删除从第 3 行到第 5 行。d1G:删除从当前行到第一行之间的文本。dG:删除到文件尾,也就是删除整个文档的后半部分(包括光标所在的字符)。dgg:删除到文件首。dj:删除当前行和下一行(例如:5dj删除当前行及其下面的 5 行,即向下删除 6 行)。dk:删除当前行和上一行(例如:5dk删除当前行及其上面的 5 行,即向上删除 6 行)。d2w:删除光标后面的两个单词。dX:删除当前单词前面的空格,但不包括当前单词本身wde:删除从光标位置到下 1 个单词开头的内容,并且保留空格。其中数字可以指定要删除的单词数
其他
d{motion}:motion可以是任何移动光标的命令,例如dw,d2w,d$等.
注意: d 删除的字符存放到 Vim 的剪贴板中,可以使用 p 命令将其粘贴到另一个位置。
复制和粘贴
复制
y:复制(默认是复制到"寄存器)。"+y:复制到系统剪贴板(也就是 vim 的 + 寄存器)。yw:复制 1 个单词(例如:y3w复制 3 个单词)。yy:复制游标所在的那一行(常用)。nyy:n 为数字,复制光标所在的向下 n 行(例如:20yy则是复制 20 行)。y1G:复制游标所在行到第一行的所有数据。yG:复制游标所在行到最后一行的所有数据。y0:复制光标所在字符到该行行首的所有数据。y$:复制光标所在字符到该行行尾的所有数据。5bgyw:复制光标所在单词向前 5 个单词5egyw:复制光标所在单词向后 5 个单词5b5egyw:复制光标所在单词向前向后 3 个单词
粘贴
p:粘贴(默认从"寄存器取出内容粘贴,在光标后)。P:粘贴到光标前。"+p:从系统剪贴板粘贴。5p:粘贴五份。
插入新行
o:在当前行下面插入 1 个新行,并将光标放置到新行的起始位置。O:在当前行上面插入 1 个新行,并将光标放置到新行的起始位置。
插入模式
i:在当前光标位置处插入文本。I:在当前行的开头插入文本。a:在当前光标位置后插入文本。A:在当前行的结尾插入文本。o:在当前行的下一行插入文本。O:在当前行的上一行插入文本。
撤销和重做
u:撤销,或输入:undo命令。Ctrl + r:重做或输入:redo命令。
替换和搜索
:%s/old/new/g:快速替换文本中所有的匹配项。:%s/old/new/gi:快速替换文本中所有的匹配项,忽略大小写。:%s/[\\u4e00-\\u9fa5]//g:替换所有中文字符。:g/^$/d:删除所有空行。:%s/\\s\\+/ /g:将连续空格替换为单个空格。:g/^\\s*$/d:删除包含空格的空行。:%s/^\\s*\\n//:删除文档中的连续空格,只保留单个空格,并且删除包含空格的空行。
代码块操作
代码块缩进
<:代码块左移(减少缩进)。>:代码块右移(增加缩进)。<<:减少选中行的缩进,块状可视模式下使用。>>:增加选中行的缩进,块状可视模式下使用。
代码块排序
:sort:按字典顺序排序选中的行。:sort!:按逆字典顺序排序选中的行。:sort n:按数字顺序排序选中的行。
代码块注释
I:在当前行的开头插入注释(需要配合可视块模式)。A:在当前行的末尾添加注释(需要配合可视块模式)。:%s/^/# /:在每一行的行首插入 "#" 作为注释符号。
代码块格式化
=:重新格式化选中的代码块(自动缩进)。
其他命令
nohl:取消高亮。:set whichwrap+=<,>:允许光标在行首和行尾跳转到下一行或上一行。:set nofixeol:禁用文件末尾自动添加新行。:set mouse=a:启用鼠标支持。:set mousemodel=extend:设置鼠标滚动时光标的移动方式为扩展模式:set number或者:set nu:显示行号:set nonumber或者:set nonu:不显示行号
文件操作
保存并退出
:wq:保存文件并退出编辑器。:x:保存文件并退出编辑器,仅当文件自上次保存以来有修改时。:xit:保存文件并退出编辑器,无论文件是否被修改。:ZZ:保存文件并退出编辑器
仅保存
:w:保存更改但不退出 Vim。:w!:强制保存更改,忽略某些文件类型插件的警告。
保存到其他文件
:w <filename>:将更改保存到指定的文件名中,不退出 Vim。:w! <filename>:强制将更改保存到指定的文件名中,忽略警告。
保存所有打开的文件
:wqa:保存所有打开的文件并退出 Vim。
撤销保存
:undo:撤销最近的一次保存操作。
设置自动保存
:set autowrite:自动保存更改,每次执行命令时自动写入文件。:set noautowrite:取消自动保存。
保存并退出所有打开的标签页
:wqa:在有多个标签页的情况下,保存所有更改并退出 Vim。
保存并关闭当前窗口
:close:关闭当前窗口:winc:保存当前窗口的更改并关闭窗口,不退出 Vim。
保存并关闭所有窗口
:wqa:保存所有更改并关闭所有窗口,退出 Vim。
自定义快捷键
:map <C-f> <PageDown>:将 Ctrl+f 映射为 PageDown(向下滚动一页)。:map <C-b> <PageUp>:将 Ctrl+b 映射为 PageUp(向上滚动一页)。:map <C-s> :w<CR>: 将 Ctrl + s 映射为保存。
正则表达式和替换命令
插入特定字符
:%s/^/#/:在整个文件中的每一行的行首插入 "#" 字符:1,5s/^/# /:在第 1 行到第 5 行之间的每一行的行首插入 "#" 字符
删除特定字符
:%s/^#//:删除整个文件中的每一行的行首的 "#" 字符:1,5s/^# //:删除第 1 行到第 5 行之间的每一行的行首插入的 "#" 字符
插入行首和行尾字符
:%s/^/\\/\\/:在每一行的行首插入 "//":1,5s/^/# /:在第 1 行到第 5 行的行首插入 "# "
删除行首和行尾字符
:%s/^\\s\\+//:删除每行行首的空格:%s/\\s\\+$//:删除每行行尾的空格
替换文本
:%s/old/new/g:将文件中所有的 "old" 替换为 "new":%s/old/new/gi:将文件中所有的 "old" 替换为 "new",忽略大小写:%s/\\n//g:删除所有的换行符:%s/\\r//g:删除所有的回车符:%s/\\t//g:删除所有的制表符
特定范围替换
:<起始行号>,<结束行号>s/^/<插入的字符>/:在特定范围的行上执行插入操作:<起始行号>,<结束行号>s/^<要删除的字符>//:在特定范围的行上执行删除操作
未完待续......