http://blog.sina.com.cn/s/blog_492101c70100o10c.html
最近整理的vi/vim常用命令,有需要的童鞋拿去用吧
(本来是在excel中的,但是没有地方上传,所以就直接贴过来了。)
正常模式 | 命令行模式(需回车确认) | 其他 | |||||||||
操作 | 功能 | 同义 | 示例/变种 | 操作 | 功能 | 同义 | 示例/变种 | 操作 | 功能 | ||
移动光标 | 文件操作 | 命令行 | |||||||||
w | 到下一个单词的第一个字符处,标点符号也算一个单词 | :q | 不保存并退出 | set -o editor | 按<Esc>后在命令行使用指定的编辑器模式,如set -o vi | ||||||
W | 到下一段单词的第一个字符处,标点符号不算单词 | :q! | 并保持并强制退出 | vi file | 打开文件,并定位于第一行 | ||||||
b | 到上一个单词的第一个字符处,标点符号也算一个单词 | :w | 保存修改 | vi +n file | 打开文件,并定位于第n行 | ||||||
B | 到上一段单词的第一个字符处,标点符号不算单词 | :w! | 保存修改;若有重名则覆盖 | vi + file | 打开文件,并定位于最后一行 | ||||||
e | 到下一个单词的最后一个字符处,标点符号也算一个单词 | :wq | 保存并退出 | ZZ :x | vi -R file | 以只读模式打开文件 | |||||
E | 到下一个单词的最后一个字符处,标点符号不算单词 | :m,nw file | 把m行到n行写入一个文件 | :1,10w tmp | vi -r file | 打开上次vi时系统崩溃的文件。 | |||||
h | 向左 | :e file | 读入文件;若不存在则创建 | vi *.txt | 打开多个文件(多文件编辑) | ||||||
l | 向右 | <SP> | :e! | 丢弃修改,并重新载入文件 | 多文件编辑 | ||||||
j | 向下 | 文本编辑 | :n | 打开下一个文件 | |||||||
k | 向上 | :%!xxd | 以十六进制查看 | :e# | 打开上一个文件 | ||||||
0 | 到行首 | :%!xxd -r | 从十六进制返回 | <C-S-6> | 打开上一个文件 | ||||||
^ | 到行内非空格的第一个字符 | :n1,n2 co n3 | 将n1行到n2行之间的内容拷贝到第n3 行下。 | :argdo %s/pat1/pat2/ge | update | 在所有打开的文件中把str1替换成str2 | ||||||
$ | 到行尾 | :n1,n2 m n3 | 将n1行到n2行之间的内容移动到第n3 行下。 | 列模式 | |||||||
+ | 到下一行的非空白处 | <CR> | :r! cmd | 将cmd的输出插入到当前行 | :r! date :r! cat tmp | <C-v> | 切换到列模式 | ||||
- | 到上一行的非空白处 | :nr | <Esc> | 退出列模式 | |||||||
) | 到下一句首 | :set cursorline | 高亮当前行 | nk,nl.. | |||||||
( | 到上一句首 | :set cursorcolumn | 高亮当前列 | c,I,a,d.. | |||||||
} | 到下一段首 | 替换 | 宏操作 | ||||||||
{ | 到上一段首 | :s/pat1/pat2 | 用pat2替换当前行中与pat1匹配的每个内容,需要确认 | 1.使用命令qa(其中的a为寄存器名,可自由指定),将结果保存至寄存器a中,其中a可为从a到z的任意字母 2. 输入需要执行的命令 3. 键入q,结束操作的录制 4. 输入@a,这里的a为第一步中指定的寄存器名,执行先前录制的操作,我们可以在@a前加数字,例如4@a等。 | |||||||
]] | 到下一个章节/函数 | :%s/pat1/pat2 | 用pat2替换整个文件中与pat1匹配的每个内容 | ||||||||
[[ | 到上一个章节/函数 | :s/pat1/pat2/g | 用pat2替换当前行中与pat1匹配的每个内容,不需要确认 | ||||||||
nG | 到第n行 | :n | 1G | :%s/pat1/pat2/g | 用pat2替换整个文件中与pat1匹配的每个内容,不需要确认 | ||||||
gg | 到第一行 | 1G :1 | :m,ns/pat1/pat2/g | 用pat2替换m行到n行中与pat1匹配的每个内容,不需要确认 | 其他 | ||||||
G | 到文档底部 | :m,ns/^/#/g | 在m行到n行的行首添加字符# | 功能 | 操作 | ||||||
<C-g> | 显示行号等信息 | :m,ns/^#//g | 删除m行到n行行首的字符# | 在行首插入行号 | g/^/exec"s/^/".strpart(line(".")."", 0, 4) | ||||||
mx | 用字符x标记当前位置 | mk | :g/^$/d | 删除所有空行 | 复制m到n行的内容到寄存器a | 1. 定位到第m行并按下mk 2. 定位到第n行并按下"ay'k | |||||
`x | 定位到字符x标记的位置 | :%s/<C-v><C-CR>//g | 删除^M | 运行TMS result script进行TMS update | :!tmsrun -S % | ||||||
'x | 定位到字符x标记的位置行首 | :ab str1 str2 | 在键入str1并按<Esc>后把str1替换成str2 | 列出当前文件中所有的DNSlog | :!grep ADNS % | ||||||
'' | 定位到上一个标记位置 | 系统 | 列出当前文件中所有的REGISTER | :!cgrep -R "\[REGISTER " % |less | |||||||
·. | 定位到上一次修改点 | :h cmd | 查看cmd的帮助 | ||||||||
‘. | 定位到上一次修改行 | :!cmd | 执行命令cmd | :!sort | |||||||
TAB | :sh | 打开shell并运行命令,exit返回 | |||||||||
<< | 当前行左移一个TAB | n<< | :n | 定位到第n行 | :1 | ||||||
>> | 当前行右移一个TAB | n>> | :reg | 查看所有寄存器 | |||||||
:m,n> | m行到n行右移一个TAB | :1,10> | :set all | 查看set所有子命令 | |||||||
屏幕操作 | :set nu | 显示行号 | |||||||||
H | 到屏幕的第一行 | :set nonu | 不显示行号 | ||||||||
M | 到屏幕的中间行 | :set ai | 自动缩进 | ||||||||
L | 到屏幕的最后一行 | :set ic | 忽略大小写 | ||||||||
z<CR> | 将光标所在的那一行移至屏幕顶部 | :set so=n | 总是保持上下n行 | :set so=4 | |||||||
z- | 将光标所在的那一行移至屏幕底部 | :nmap key1 key2 | 把key1映射成key2 | :nmap <F9><C-w>w | |||||||
z. | 将光标所在的那一行移至屏幕中部 | zn. | :his | 历史命令 | |||||||
/pat/z- | 将pattern行移至屏幕底部 | /ERROR/z- | 多窗口/文件操作 | ||||||||
<C-f> | 向下滚动一屏 | :sp file | 分割出一个横向窗口并打开文件 | ||||||||
<C-b> | 向上滚动一屏 | :vsp file | 分割出一个纵向窗口并打开文件 | ||||||||
<C-d> | 向下滚动半屏 | :S | 在另外一个窗口中打开当前文件 | ||||||||
<C-u> | 向上滚动半屏 | <C-w>w | 在所有窗口间切换 | ||||||||
<C-e> | 向下滚屏一行 | <C-w>p | 在最近两个窗口间切换 | ||||||||
<C-y> | 向上滚屏一行 | <C-w>h | 移到左面的窗口 | ||||||||
<C-R> | 刷新屏幕 | <C-w>l | 移到右面的窗口 | ||||||||
编辑文本-插入 | <C-w>j | 移到下面的窗口 | |||||||||
a | 从当前光标所在的位置的下一个字符开始输入 | <C-w>k | 移到上面的窗口 | ||||||||
A | 从当前行尾开始输入 | <C-w>+ | 扩大当前窗口 | ||||||||
i | 从当前光标所在的位置开始输入 | <C-w>- | 缩小当前窗口 | ||||||||
I | 从当前行首开始输入 | <C-w>= | 使窗口大小一致 | ||||||||
o | 在当前行的下一行增加一个新行,并定位到新行的行首 | <C-w><C-r> | 交换两个窗口位置 | ||||||||
O | 在当前行的上一行增加一个新行,并定位到新行的行首 | :ls | 列出vim当前打开的所有文件 | ||||||||
<C-h> | 插入模式下退格 | :b number | 在当前窗口打开ls出的指定文件 | ||||||||
<C-w> | 插入模式下删除最后一个单词 | :set diff | 比较用vsp打开的并列的文件 | ||||||||
<C-d> | 插入模式下将当前行向左缩进一个TAB | :q | 关闭当前窗口 | ||||||||
编辑文本-复制,粘贴 | |||||||||||
y | 复制当前字符 | :m,ny :m,y :,ny | |||||||||
yy | 复制当前行 | nyy | |||||||||
yw | 复制光标所在位置到整个单词结束的字符 | nyw | |||||||||
"ayy | 把当前行内容复制到a寄存器 | ||||||||||
"Ayy | 把当前行内容追加到a寄存器 | ||||||||||
p | 粘贴(复制或删除的内容) | ||||||||||
”ap | 粘贴a寄存器中的内容 | ||||||||||
编辑文本-删除/剪切 | |||||||||||
d | 删除 | nd d),d(,d},d{ | |||||||||
d← | 删除光标前的字符 | ||||||||||
d→ | 删除光标处的字符 | ||||||||||
d↑ | 删除当前行以及上一行 | ||||||||||
d↓ | 删除当前行以及下一行 | ||||||||||
d0 | 删除至行首 | ||||||||||
d$ | 删除至行尾 | D | |||||||||
D | 删除至行尾 | d$ | |||||||||
dG | 删除至文档尾 | ||||||||||
dd | 删除当前行 | ndd | |||||||||
ddp | 交换上下两行 | ||||||||||
dw | 删除至当前单词尾 | ndw | |||||||||
“add | 删除当前行,并把内容放到a寄存器 | ||||||||||
x | 删除光标所在位置的字符 | nx | |||||||||
xp | 交换前后两个字符 | ||||||||||
X | 删除光标所在位置的前一个字符 | d← | nX | ||||||||
编辑文本-替换 | |||||||||||
r | 更改当前字符,并保持在正常模式 | ||||||||||
R | 连续替换当前光标下的字符,按<Esc>结束 | ||||||||||
c | 替换 | ||||||||||
C | 替换当前行后面的部分 | Da | |||||||||
cc | 替换当前行 | S ddO | |||||||||
cw | 替换当前单词 | ||||||||||
s | 替换当前字符并进入插入模式,按<Esc>结束 | ||||||||||
S | 替换当前行 | cc | |||||||||
~ | 更改当前字符的大小写 | ||||||||||
guw | 单词小写 | ||||||||||
gUw | 单词大写 | ||||||||||
g~w | 单词大小写反转 | ||||||||||
guu | 把当前行小写 | ||||||||||
gUU | 把当前行大写 | ||||||||||
g~~ | 把当前行大小写反转 | ||||||||||
J | 将当前行和前一行连接起来,并删除因此而来的空行 | ||||||||||
编辑文本-查找 | |||||||||||
/pat | 向前查找pattern | /ERROR | |||||||||
/pat/+n | 定位到pattern后的第n行 | /ERROR/+3 | |||||||||
?pat | 向后查找pattern | ||||||||||
?pat?-n | 定位到pattern前的第n行 | ||||||||||
n | 继续向前查找 | ||||||||||
N | 继续向后查找 | ||||||||||
* | 向下查找当前的单词。与n/N搭配使用。 | ||||||||||
# | 向上查找当前的单词。与n/N搭配使用。 | ||||||||||
g* | 向下查找当前的单词,不完全匹配。与n/N搭配使用。 | ||||||||||
g# | 向上查找当前的单词,不完全匹配。与n/N搭配使用。 | ||||||||||
gd | 查找当前的单词,并定位在非注释段中第一次出现该单词的地方 | ||||||||||
fx | 向右定位到字符x | f0 | |||||||||
Fx | 向左定位到字符x | ||||||||||
tx | 向右定位到字符x前 | ||||||||||
Tx | 向左定位到字符x后 | ||||||||||
; | 继续向下找,与f/F结合使用 | ||||||||||
, | 继续向上找,与f/F结合使用 | ||||||||||
” | 定位到上一个标记处,与g/*结合使用 | ||||||||||
% | 定位到匹配的括号 | d% | |||||||||
编辑文本-还原 | |||||||||||
u | 还原上次操作 | ||||||||||
U | 还原当前行 | ||||||||||
<C-r> | 恢复被u撤销的操作 | ||||||||||
补齐 | |||||||||||
<C-n> | 插入模式下向下搜索补齐当前输入 | ||||||||||
<C-p> | 插入模式下向上搜索补齐当前输入 | ||||||||||
<C-x><C-l> | 补齐整行,在当前窗口中搜索 | ||||||||||
<C-x><C-f> | 自动补齐,在当前目录下的文件名中搜索 | ||||||||||
<C-x><C-k> | 使用字典文件进行自动补齐。 前提是在~/.vimrc中进行如下设置: set dictionary+=/usr/share/dict/words |