VIM常用命令列表手册、速查助记、命令大全、速记手册

VIM功能相当强大,熟悉了常用命令,不用任何插件也完全可以方便高效地编辑。把自己常用的操作整理了一下,当速查和助记吧(主要参考VIM帮助手册,VIM版本7.3)。自从使用了它以后,其他的都是浮云。。。

【0】安装
在没有x的系统中安装:make -DWITHOUT_X11 install
支持把中文当letter操作:./configure –prefix=/usr/vim –enable-multibyte –with-features=huge
【1】移动
方向键,page down,page up等跟其它编辑器作用一样。
k 上移
h 左移     l 右移
j 下移
ctrl+f 前滚一页
ctrl+b 后滚一页
:n 将光标定位到第n行
0 光标定位到本行的行首
$ 光标定位到本行的行尾
G 光标定位到本文章的最后一行,与:$功能相同。
H 光标定位到屏幕的顶端
M 光标定位到屏幕的中间
L 光标定位到屏幕的底端
nw 后移动到第n个单词词首
b 与w相反
e 移动到单词词尾
ge 与e相反
W,E为w,e的以字符串为单位移动的方式
$,<End> 移到行尾
0,<Home> 移到行首
^  移到行首第一个非空字符
$可以用数字前缀,移到第n行后的行尾;0,^不行。
nfx,nFx 向后/前查找第n个x (find)
ntx,nTx 与f/F功能类似,但光标会放在前一个字符上 (to)
% 跳转到匹配的括号处
gg 移到行首,或1G
nG 移到第n行
G移到最后
H,M,L 移到home,middle,last
CTRL+U 上移半屏
CTRL+D 下移半屏
CTRL+E CTRL+Y 上、下滚一行
CTRL+F 下移一屏
CTRL+B 上移一屏
zz 光标所在行移到屏幕中央
zt 光标所在行移到屏幕顶部
zb 光标所在行移到屏幕底部
【2】查找
/patt 向下查找patt
?patt 向上查找patt
nn 跳到后面第n个匹配结果
nN 跳到前面第n个匹配结果
:set ignorecase, :set noignorecase 是否忽略搜索时的大小写
# 跳到光标所在词的上一个相同词
* 跳到光标所在词的下一个相同词
:set hlsearch, :set nohlsearch (长期)打开或关闭搜索时的高亮
:nohlsearch 去掉当前匹配的高亮显示
:set incsearch 在输入的过程中就显示匹配点
:set nowrapscan 查找到文件尾后不再从头查找
:scriptnames 显示VIM配置文件路径
:set history x 设置命令,查找历史记录个数
:set ruler 总是显示光标位置
:set showcmd 显示正在做的未完成的命令
:set incsearch 输入时显示匹配点
:set hlearch 高亮显示匹配字符串
:set showmatch 显示匹配的对应括号
:set matchtime=15 匹配括号高亮的时间(秒)
:3,$s/^/abc/g 在文件的第3行至最后一行的行首插入abc
:%s/$/abc/g  在每一行的行尾添加abc
:%s/abc/cde/g  在整个文件中将abc替换为cde
:10,20s/abc/cde/ 替换10到20行中的abc为cde
【3】跳转
” 跳转到上一次光标所在点
CTRL+0 跳转到前一个跳转点
CTRL+I 跳转到后一个跳转点
:jumps 显示所有跳转点
mx 保存当前位置跳转标记到x中
m 标记当前单词
:marks 显示跳转标记
‘ 跳转前的位置
“” 最后一次编辑的位置
[ 最后修改的开始位置
] 最后修改的结束位置
x% 跳到文件内容x%的地方
mx 在当前位置作标记,记为x
‘x 跳到x标记处
:marks [marklist] 显示标记位置
gd 转到当前光标所指的局部变量的定义
* 转到当前光标所指的单词下一次出现的地方
# 转到当前光标所指的单词上一次出现的地方
% 跳转到对应的括号匹配位置

【4】编辑
dnw 删除n个单词
dne 删除n个单词
c 修改,会将模式切换为插入模式,如cw
r 替换,输入后替换,不用切换模式
. 重复上一次修改
v 可视模式
CTRL+V 列块模式
np,nP 粘贴n个拷贝内容到光标后/前
yy,Y 拷贝一行
yw,ye 拷贝单词,包含/不包含词后空格
“*y 拷贝到剪贴板
text-objects
daw 删除一个单词
cis change inner sentence
x dl 删除光标所在词
X dh 删除光标前词
D d$ 删除从当前到行尾字符
dw 向后删除一个词
db 向前删除一个词
diw 删除一个词,不会删空格
daw 删除一个词,会删除空格
dG 删除当前到整个文档末尾的内容
dgg 删除当前到文档开始处的内容
~ 改变大小写
I 移到行首非空字符处,并启动插入模式
A 移到行尾并启动插入模式
替换:Xs/old/new/RANGE
X .为当前行,$为末尾行,%为所有行,1,2为1到2行,100为第100行
RANGE g全局,c确认,+n,-n,相对当前行偏移,x,y为x到y行
s默认只作用一行
:gCMD 针对全局执行命令
插入特殊字符:
CTRL+V 9.
CTRL+V 09.
CTRL+V 009.
CTRL+V o123 八进制
CTRL+V u1234
CTRL+V U12345678
set fileformat=unix,dos 设置文件格式
set fileformat? 查看当前文件格式
edit ++ff=unix file.txt 强制用某格式编辑
set display=uhex hex模式浏览
%!xxd 转换成16进制格式
== 当前行自动缩进对齐(又称自动格式化)
n== 当前行—n+当前行自动缩进对齐
gg=G 当前文件所有行自动缩进对齐
< 向前缩进
> 向后缩进
u        撤消最后一次修改
.        重复最后一次修改
i:  在当前位置的字符前面进入插入模式
I: 在当前行的开头进行插入
a: 在当前位置的字符后面进入插入模式
A: 在当前行的结尾进行插入
o:  在当前行下面打开一个新行进行插入
O:在当前行上面打开一个新行进行插入
v 进入可视模式
vaw 选则一个单词
vas 选择一个句子
vap 选择一个断落
CTRL+v 进入列块模式,选定块后shift+<向左移,shift+>向右移
在一段文字前,垂直插入字符串(如注释符号#,//)
(1)ctrl+v
(2)shirt+i 或 I
(3)输入字符串
(4)Esc
折叠:
用v做块选定要折叠的语句,用zf可以折叠这部分内容
zfxj:向下折叠x行
移到括号上用zf折叠两个括号之间的内容
zf/str, 折叠到下一个匹配str的地方
zj跳到下一个折叠(zk上一个)
zo展开折叠, zO展开所有折叠。对嵌套折叠, zr打开第一层的折叠,zR打开所有层的折叠;
zc关闭折叠,在zO之后用zc会关上所有打开的折叠。对嵌套折叠,zm关闭第一层折叠,zM关闭所有层折叠。
【5】窗口
vim -R file 或view file 只读模式启动,可强制写入 vim -M file 不能写入
:edit file 编辑某个文件
:saveas file 将文件存为file
:file file 改变当前文件名但不立即改变它
split 分割窗口,可加数字前缀代表行数大小,加文件名表示在新窗口中打开的文件
CTRL W +, CTRL W – 放大,缩小窗口
nCTRL+_ 设置大小为n
close 关闭窗口
only 关闭除当前窗口的其它窗口
vsplit 垂直分割窗口
CTRL+h,j,k,l,t,b 移动光标到窗口(左下上右顶底)
CTRL+H,J,K,L  移动窗口(最 左下右上)
tabedit file 标签页浏览文件
tab split 在新标签页中打开
ngt 在标签页间移动n个位置
【6】打开
:args 显示打开的文件列表
:next,previous,first,last 打开文件列表中的某个
:args a.txt,b.txt 打开文件
vim -o filelist 打开多个文件时垂直分割
set noscrollbind 取消滚动绑定
]c,[c跳转到下/上一个修改点
diffupdate 更新(颜色)
dp,do 使用左/右窗口的内容消除差异
:read file 读文件
:Oread file 以只读方式读文件
刷新屏幕 CTRL+L
vim -r file 恢复文件
vim -r 查看交换文件
:e! 刷新本文件(如本文件被其它地方修改)
:e dir 打开dir目录浏览以选择文件进行编辑
vimdiff file1 file2 对比文件差异
或者
:edit main.c
:vertical diffsplit main.c~
【7】功能
设置制表符宽度为4
set tabstop=4
set softtabstop=4
set shiftwidth=4 设置缩进的空格数为4
:syntax on/off 打开/关闭语法高亮
set fileencodings=utf-8,gbk 设置编码
set autoindent 设置自动缩进
filetype on 打开vi文件类型识别功能
使用外部命令 ![motion][!cmd],如!ls
CTRL+P 自动补全
CTRL+A 将上次插入的文字再插入一遍
CTRL+@ 完成CTRL+A的功能并退出编辑模式
CTRL+Y 插入光标上方字符
CTRL+E 插入光标下方字符
CTRL+R register 插入寄存器register中的内容
:iabbrev ad advertisement 缩写ad->advertisement,缩写命令的缩写iab
:abbreviate 列出所有缩写
unabbreviate 删除缩写
abclear 清除所有缩写
:set backup 备份文件
寄存器使用步骤:
(1)qx 开始使用x
(2)键入命令
(3)q 退出
(4)@x 使用x寄存器
qX 对寄存器x进行追加,q后跟大写字母表示追加到对应的小写寄存器
“xCMD 对寄存器x执行CMD操作
gCTRL+G 显示字节信息,字数统计等信息
K 打开当前光标所在词的man信息
:set showmode 查看当前模式
set number/nonumber 显示/不显示行号
CTRL+G 显示文件信息,文件名,当前行等
:set ruler 显示光标位置
【8】退出
:wq! 强制保存退出
:wq  保存退出
:x   和:wq 一样
ZZ  和:wq一样
:q  尝试退出
:q! 强制退出(不保存)