声明:因为linux中频繁使用vim工具,所以搜索了一下,找了一篇命令集比较详细的博客,原文复制过来作为备份,以供平时查阅参考,如果侵权请私信右侧微博,一定会进行删除。原博文网址:vim命令集博客原文
Vim 打开命令
vim FileName — 打开文件 FileName,并将光标置于第一行首
vim +n FileName — 打开文件 FileName,并将光标置于第 n 行首
vim + FileName — 打开文件 FileName,并将光标置于最后一行
vim + /pattern File — 打开文件 File,并将光标置于其中第一个于 pattern 匹配的字符
串处
vim –r FileName — 在上次正用 vi 编辑 FileName 发生系统崩溃后,恢复 FileName
vim File1 … Filen — 打开多个文件,依次对之进行编辑
vim -o File1 … Filen — 用水平分隔的方式打开多个文件然后进行编辑
vimdiff filename1 filename2 — 用垂直分割的方式打开两个文件 filename1,filename2
然后显示出两个文件的不同的比较
插入模式
vim 补全
<c-a> — 重复上次的编辑动作
<c-x><c-l> — 整行补全
<c-x><c-n> — 根据当前文件里关键字补全
<c-x><c-k> — 根据字典补全
<c-x><c-t> — 根据同义词字典补全
<c-x><c-i> — 根据头文件内关键字补全
<c-x><x-]> — 根据标签补全
<c-x><c-f> — 补全文件名
<c-x><c-d> — 补全宏定义
<c-x><c-v> — 补全 vim 命令
<c-x><c-u> — 用户自定义补全方式
<c-x><c-s> — 拼写建议
普通与命令行模式
移动
ctags 快捷键
[{ — 转到上一个位于第一列的”{”
}] — 转到下一个位于第一列的”{”
{ — 转到上一个空行
} — 转到下一个空行 ([ and ] 也分别是两个指令)
移动光标
h — 向右
j — 向下
k — 向上
l — 向左
0 — 这是数字 “0”:移动到这一行的最前面字符处
^ — 移动到这一行的最开始字符处
<c-p> — 光标上移一行
<c-n> — 光标下移一行
num+ — 光标下移到 n 行头,若没有 n 光标移到下行行头
num- — 光标上移到 n 行头,若没有 n 光标移到上行行头
num$ — 光标下移到 n 行尾,若没有 n 则移动到本行行尾
num<Enter> — 向下移动 n 行,无 n 移动一行
H — 光标移动到这个屏幕的最上方哪一行
M — 光标移动到这个屏幕的中央哪一行
L — 光标移动到这个屏幕的最下方哪一行
nG — n 为数字.移动到这个文件的第 n 行.若没有 n 则移动到最后一行
gg — 移动到这个文件的第一行,相当于 1G
屏幕滚动
<c-f> — 屏幕“向下”移动一页,相当于<Page Down>按键
<c-b> — 屏幕“向上”移动一页,相当于<Page Up>按键
<c-d> — 屏幕“向下”移动半页
<c-u> — 屏幕“向上”移动半页
<c-e> — 屏幕向下滚一行
<c-y> — 屏幕项上滚一行
nz — 将第 n 行滚至屏幕顶部。不指定 n 时将当前行滚至屏幕顶
:$ — 屏幕滚到文章最后一行
:0 — 屏幕滚到文章最开始一行
跳转
W / w — 光标右移一个字至字首.
B / b — 光标左移一个字至字首.
E / e — 光标右移一个字至字尾.
( — 光标移到上个句子句首.
) — 光标移到下个句子句首.
{ — 光标移到上个段落句首.
} — 光标移到下个段落句首.
f[char] — 光标跳转到本行下一个字符 char 处( char 指代任意字符 )
F[char] — 光标跳转到本行上一个字符 char 处( char 指代任意字符 )
t[char] — 光标跳转到本行下一个字符 char 的前一个字符处( char 指代任意字符 )
T[char] — 光标跳转到本行上一个字符 char 的后一个字符处( char 指代任意字符 )
/[word] — 光标跳转到下一个字符串 word 处,并把所有 word 单词高亮显示( word 指
代任意字符串,并且可以使用 正则表达式 )
?[word] — 光标跳转到上一个字符串 word 处,并把所有 word 单词高亮显示( word 指
代任意字符串,并且可以使用 正则表达式 )
# — 光标跳转到下个与光标所在处单词相同的单词,并把所有与光标所在处的相同的单
词高亮显示
* — 光标跳转到上个与光标所在处单词相同的单词,并把所有与光标所在处的相同的单
词高亮显示
gd — 将与光标所在处的单词相同的单词全部高亮显示,并跳转到上一个高亮显示的单词
gD — 将与光标所在处的单词相同的单词全部高亮显示,并跳转到最前面一个高亮显示
的单词
`. — 跳转至上次编辑位置
`c — 将光标转移到书签 c 处( c 为任意字符 )
n — 下一个匹配(如果是/搜索,则是向下的下一个,?搜索则是向上的下一个,但其实它只
会在高亮字符中切换)
N — 上一个匹配(同上)
操作
插入操作
行操作
I — 在光标所在行首插入文本
A — 在光标所在行尾添加文本
o — 在光标所在行下面添加一行
O — 在光标所在行上面添加一行
nS — 从当前行开始,删除向下 n 行并进入编辑模式,若无 n 删除当前所在行,
并进入编辑模式
字符操作
i — 在光标前插入文本
a — 在光标后插入文本
r — 替换光标所在处字符,结束替换
R — 替换多个字符,以按下 [Esc] 键标志替换结束
ns — 从当前光标位置处开始,删除 n 个字符并进入编辑模式,若无 n 删除一个
字符,并进入编辑模式
:r [filename | !cmd] — 在编辑数据中读入一个文件内容数据或一个命令的返回
结果,并把这些数据添加到光标所在行后面
复制与删除与粘贴
字符操作
nx — 向后删除 n 个字符,若没有 n 向后删除一个字符
nX — 向前删除 n 个字符,若没有 n 向前删除一个字符
d0 — 那个是数字的 0 ,删除游标所在处,到该行的最前面一个字符
d$ — 删除游标所在处,到该行的最后一个字符
y0 — 复制光标所在的那个字符到该行行首的所有数据
y$ — 复制光标所在的那个字符到该行行尾的所有数据
p — 将已复制的数据在光标下一列贴上
P — 将已复制的数据在光标上一列贴上
行操作
ndd — 删除光标所在的向下 n 列,若没有 n 删除游标所在的那一整列
dnG — 删除光标所在到第 n 行的所有数据,若没有 n 删除光标所在到最后一
行的所有数据
nyy — 复制光标所在的向下 n 行,若无 n 复制游标所在的那一行
ynG — 复制游标所在列到第 n 行的所有数据,若无 n 复制游标所在行到最后一
行的所有数据
J — 将光标所在列与下一列的数据结合成同一列
撤销与重做
. — 重复前一个操作
u — 复原前一个操作
<c-r> — 重做上一个操作
区块操作
进入标记文本模式
v — 进入标记文本模式,单字符模式
V — 进入标记文本模式,行模式
<c-v> — 进入标记文本模式,列模式,类似于 UE 的列模式
对标记文本模式中区域选择
aw — 选中一个单词,含单词后的空格
as — 选中一个句子,含句号后的空格
ap — 选中一个段落,含段落后的空格
ab — 选中()括号中的所有内容,含()
aB — 选中{}括号中的所有内容,含{}
iw — 选中一个单词,不含单词后的空格
is — 选中一个句子,不含句号后的空格
ip — 选中一个段落,不含段落后的空格
ib — 选中()括号中的内容,不含()
iB — 选中{}括号中的内容,不含{}
移动标记文本模式中光标位置
o — 光标在选择区域中的对角线之间的跳转
O — 光标在选择区域中的横纵之间的跳转
当在 V 与 <c-v> 模式中我们除了 o,O 来移动光标位置外,还可以通过移动光
标位置中一些方法来移动光标位置(不是所有而是其中一些)
对标记文本模式中数据操作
~ — 将选中块中的内容大小写翻转
u — 将选中块中的内容转成小写
U — 将选中块中的内容转成大写
y — 复制选中块中的内容
d/D/x/X — 删除选中块中的内容
行移动操作
>> — 将当前行右移一个单位
<< — 将当前行左移一个单位(一个 tab 符)
== — 自动缩进当前行
:n1,n2 co n3 — 将 n1 行到 n2 行之间的内容拷贝到第 n3 行下.若无『,n2』则复制
n1 到 n3 行下
:n1,n2 m m3 — 移动 n1 行到 n2 行之间的内容移至第 n3 行下.若无『,n2』则将
n1 内容移到 n3 行下
:n1,n2 d — 删除 n1 行到 n2 行之间的内容,『,n2』则将 n1 行删除
:n1,n2 y — 复制 n1 行到 n2 行之间的内容,『,n2』则将 n1 行复制
字符替换
:[range]s/{pattern}/{string}/[flag] [count]
窗口
打开窗口的命令以下几个
打开标签
:tabe 标签名
横向切割窗口
:new 窗口名 (保存后就是文件名)
:split 窗口名 (也可以简写为 :sp 窗口名)
纵向切割窗口名
:vsplit+窗口名(也可以简写为 :vsp+窗口名)
窗口切换
<c-w>[h | j | k | l | ←|↓|↑|→]
移动窗口
<c-w>t — 将光标移动到最上方的窗口
<c-w>b — 将光标移动到最下方的窗口
ctags
窗口大小调整
纵向调整
<c-w>+ — 纵向扩大(行数增加)
<c-w>- — 纵向缩小 (行数减少)
:res(ize) num — 例如: :res 5,显示行数调整为 5 行
:res(ize)+num — 把当前窗口高度增加 num 行
:res(ize)-num — 把当前窗口高度减少 num 行
横向调整
:vertical res(ize) num 指定当前窗口为 num 列
:vertical res(ize)+num 把当前窗口增加 num 列
:vertical res(ize)-num 把当前窗口减少 num 列
多窗口操作
:qa(ll) — 退出所有窗口,但是如果你有一个窗口发生改写但未保存 vim 是不会退出的
:wa(ll) — 保存所有修改过的窗口
:wqall — 保存所有修改过的窗口并关闭,然后退出 vim:qall! 强制退出所有窗口,然后退
出 vim
:argdo [命令] — 对所有待编辑的窗口都执行 argdo 后面跟的命令
:only — 了编辑以外的窗口,但是那些窗口中要是有文本被改写过并且没有保存那么操作
将失败
vim 多文本编辑
:n 编辑下个文件
:N 编辑上个文件
:files 列出目前这个 vim 的打开的所有文件
保存与退出
:q — 退出 vim 返回到 shell,若有修改未被保存,vi 在末行给出提示信息并不退出 vim
到 shell
:q! — 退出 vim 返回到 shell,放弃未保存的修改