vim 确实是一把利器,值得程序员深入学习,打造个人的IDE,以发挥它的最大功率,此文做为记忆之用,常期更新
配置文件 $VIMRUTIME/vimrc_example.vim 用户配置:./vimrc
入门学习:vimtutor 命令 可进入基本操作的学习
用户手册::help user-manual
快速参照::h quickref
速查表:http://coolshell.cn/articles/150.html
按键表 C- = CTRL
C - c :退出 同<ESC>
C - ] :跳转标签
C - i :跳到较新的标签 同<Tab>一样
C - o :回跳标签
C - t :回跳标签,同C - o
C - d :下半页
C - u :上半页
C - e : 上一行
C - y :下一行
C - b :上页(backward)
C - f :下页(forward)
C - g :显示行号等信息
C - r :redo
a :append 插入 <数字a>
A :行尾插入
b :移到前一个单词,任何非字母的字符作为分隔符, <数字b>
B :以空格作为分隔符
cc :(change) 删除并进入插入模式, 和d 类似, 也有cw,ce,c$,cc
C :等于c$
dd :删除一行;d数字d或数字dd,删除多行;
dw :删除单词,在下一个单词前,<数字dw>、<d数字w>
de :删除单词,到空格
dG :删除到文件尾, dgg :删除到文件首
db , dB
d + h, j, k, l
D :等于d$
e :移到下个单词末尾,任何非字母的字符为分隔符
E :只以空格为分隔符
f字符 :在当前行(find)查找字符, <数字f字符>
F字符 :在当前行反向查找字符
ge :移到前一个单词末尾
gE :
gg :首行
G :尾行 <数字G> 第n行
h :向左移动光标
H :(Home)首行 同gg
i :插入
I :当行第一个非空字符插入
j :向下移动光标,<数字j>下移n行
J :删除换行符,联合两行
k :向上移动光标,
l :向右移动光标
L :(Last) 末行 同G
m +字母 :标记
M :(Middle)中间行
n :查找下一项
N :反向查找下一项
o :下行插入行
O :在上行插入行
p :(put)粘贴 <数字p>,xp交换前后两个字符
P :在光标前粘贴
r :替换字符 <数字r>替换n个字符
R :替换单词 <数字R>用n个单词分别替换
s : 等于cl,删除一个字符并进入插入模式
S :等于cc 修改一行
t 字符 :(to)查找字符,光标定位到前一个字符,像f
T字符 :反向查找字符
u :undo
U :撤销当前行的所有的改变
w :移动到下个单词, <数字w>
W :下一个非字母开头的单词
x :删除光标下的字符, <数字x>删除n个字符, 等于dl
X :删除光标左边的字符,等于dh
y :(yank)复制,yy,yw,ye,y$
Y :复制一行
zb :屏幕底部
zt :屏幕顶部
ZZ :保存并关闭文件
~:转换大小写
^: 行首非空格
0: 零,行首
$:行尾, <数字$>,后n年的行尾
% :匹配括号
数字% ;移到百分比行
:数字 :移到某行
* :查找光标下单词的下一项 <数字*>
# :查找光标下单词的上一项 <数字#>
'' :两个' 跳转
set命令:
:set showmode 查询模式,插入等
:set number 加上等号显示 :set nonumber nu
:set ruler 右下角显示光标位置 :set noruler ru
:set ignorecase 区分大小写查找 :set noignorecase 简写ic
:set hlsearch 高亮查找 hls
:set incsearch 边输入边查找
:set nowrapscan 文件结尾时停止搜索
:set backup 覆盖时生成一个~结尾的文件 :set nobackup
:set backupext=.bak
:set showcmd 显示未输入完整的命令
:set syntax=ON 使用高亮
缩进设置
:set autoindent (no)ai 启动新行时自动缩进
:set smartindent (no)si 比autoindent 更智能
:set cindent (no)ci 设置c语言对应的缩进方式
tab设置
:set tabstop=x ts tab占多少个空格
:set shiftwidth=x sw 每层缩进多少空格
:set expandtab (no)et tab以空格代替 ctrl-v-tab 则输入tab
:set softtabstop=x 开启et时,退格键删除x个空格
:set smarttab (no)sta 在行首tab输入sw个空格,非行首输入ts个空格
命令:
:q 退出
:q! 强制退出
:qall
:qall!
:r (:read) 加文件名表示加载文件
:e (:edit) 编辑,不加文件名表示重新打开当前文件
:e! 强制退出并编辑
:cn 下一项
:cN 上一项
:cprev 上一项
:cfirst 第一项
:clast 最后一项
:copen
:cclose
:options 设置各种选项如 :set showcmd
:scriptnames 列出所有配置文件
:syntax clear 临时关掉语法高亮
:syntax off 完全关掉色彩
:w (:write)
:wq
:wall
:wqall
:saveas 文件名 另存为
:file 文件名 修改文件名
:close 关闭窗口,但不会关闭最后一个窗口
:only 剩下当前窗口,其它关闭
/ 查找 模式: \<无字符 ^行头 $行尾 .任何字符
? 反向查找
. 重复上一个命令
功能点
1)使用标记
m+字母, 回跳'+字母,:marks 列出所有标记
2)可视模式
v
3)文本对象
daw 删除单词(包括空白),diw删除单词(不包括空白),cis 修改一个句子,cas修改一个句子(包括后面的空格)
4)文件列表 07.2
5)分割窗口 08
6)大范围的修改 10
7) 替换 12
:%s/word1/word2/g 全文搜索world1,并替换为world2
:'a,'bs/word1/word2/g 在第a行和第b行之间替换
8)ins - completion 自带的补全 需要ctags支持(tag补全时,其它补全可以不需要)
C - p :以上一个单词补全,在弹出菜单中选择
C - n :以下一个单词补全
C - y :选择选中项并退出补全弹出菜单
C - e :取消选择并退出补全弹出菜单
C - x - s :拼写检查
C - x C - n :当前文件内(当前buffer)匹配的关键字
C - x C - i :当前文件以及所包含的文件 include的关键字
C - x C - l :匹配的整行 line
C - x C - d :定义或宏 define 在当前文件或include的文件里
C - x C - f :补全文件名 file
C - x C - o :全能补全 omni 可自定义补全插件, OmniCppComplete 就是C/C++的插件,需要ctags支持
C - x C - ] :标签 在tags文件里搜索
C - x C - v :vim 命令行 vim
C - x C - k :字典文件内的单词
C - x C - t :同义词词典文件内的单词
C - x C - u :用户自定义补全
9)neocomplcache 补全插件
C - x C - f :打开补全弹出菜单,与自带的补全不同
C - n :和自带的一样
C - p :和自带的一样
10)折叠
折叠方式: manual(手动),indent(缩进), expr(表达式),syntax(语法), diff(对比), marker(标志),如
:set foldmethod=syntax 语法折叠和缩进折叠 适合于编程
:set foldlevel=3 打开文件时,大于3倍的折叠被关闭
zf :手动创建折叠, 如zfap创建段落折叠
zo :打开 zO :找开光标行内所有的折叠
zc :关闭 zC :关闭光标行内所有的折叠
zd :删除 zD :删除光标行内所有的折叠,与折叠方式有关,不能应用到于语法折叠
zr :减少 ZR :文件内所有的折叠打开
zm :更多 ZM :文件内所有的折叠关闭
zn :禁示所有的折叠,找开所有被折叠的 zN:恢复所有的折叠,原来折叠的重新折叠 zi :在zn和zN之间切换
11)ctag
ctags *.c shell里为所有.c文件创建tag文件(vim中则用:!ctags *.c)
ctags -R 当前目录下遍历子目录,创建tag文件
:set tags=./tags 把tags文件加进来
:tag startlist 跳转到startlist 定义处,:tag 不带名字,则是跳转到标签列表最上面的标签,等于<C - t>,可以在tag前面添加数字等于<数字C - t>。
;tag /name 以模式搜索引用
:stag name 类似:tag,但以分割窗口弹出,s表示分割,等于C - w - ]
:tags 列出所有引用
;tfirst 到第一个匹配
:[count]tprevious 到上一个匹配
:[count]tnext 到下一个匹配
:tlast 到最后一个匹配
:tselect name 列出所有引用,然后从其中选出一项
预览窗口的使用,就是打开一个窗口显示查找的定义,但光标并不会跳转到新窗口里
:ptag name 或 C - w - }
:pedit filename
:psearch name
:pclose 关闭窗口
12)cscope插件:和ctag一样,但比ctag强大,它需要ctag配合使用
cscope -Rbq 生成数据文件, -R表示所有的子目录, -b生成数据库后退出不启动自带界面, -q生成cscope.in.out和cscope.po.out加快索引速度
C - d 退出cscope
:cs add /../cscope.out 把cscope数据文件加进来
:cs f s name :s - syntax 变量或类型, 查找name的引用,f是find的缩写, cs 改为scs则为打开一个新窗口显示搜索结果, 快捷键 C - \ - s
;cs f g name :g - global 全局定义 C - \ - f
:cs f c name :c - call 函数被调用的地方, C - \ - f
:cs f d name :d - called 函数调用的函数,不知怎么用 C - \ - d
:cs f t name :t - text 文本 C - \ - t
:cs f e name :e - egrep 搜索 C - \ - e
:cs f f name :f - file 文件 C - \ - f
:cs f i name :i - include 包含此文件 C - \ - i
13)winmanager 和 taglist 插件
将目录窗口和taglist窗口管理到一起, 需要tags 文件。:Tlist 打开和关闭taglist窗口。:wm 打开和关闭winmanager窗口
14)quickfix插件,可配合make,cscope等一起使用
:cw 打开窗口
:cn (:cnext)移到下一项
:cp (:cprevious)上一项
:cfirst 第一项
:clast 最后一项
:cc 更多出错信息
:clist 出错列表,:clist! 更详细的列表
15)A插件: 在源文件和头文件间切换
:A 跳转到源文件或头文件 :AS 在横向分割窗口中打开源文件或头文件 :AV 纵向分割窗口 :AT tab标签页形式打开 :AN (next)下一项匹对项
:IH 光标下文件名字,如include :IHS :IHV :IHT :IHN
16)echofun插件:显示函数参数
ctags -R --fields=+lS 生成tag文件并导入。插入括号时,下方状态栏就会自动显示函数原型