1. Vim介绍
Vim是Vi增强版(Vi IMproved),是一款文本编辑器,配合插件使用,非常强大,绝不逊于IDE。

(1)使用Vim必要性
提升效率:用命令代替鼠标操作,手不用离开键盘,极大提升效率。很多软件(谷歌浏览器、Sublime)可以安装Vim插件
远程登录服务器,服务器几乎不会装图形化界面
开拓视野,集成开发环境真的是最适合代码编辑器吗
2. Vim基本使用
Vim功能非常强大,如果配置得好,功能不会逊色于IDE。
Vim键盘图:

(1)进入与退出
进入Vim:
vim filename,按回车退出vim
:w当前的内容保存:wq保存退出vi:q!放弃存盘退出zz仅把修改过的内容存盘:n1[,n2] w filename把第n1行到n2行写入文件
(2)两种模式切换
Vim有两种模式:命令模式和编辑模式。
- 命令模式 --> 编辑模式,i, I, a, A, o, O
- 编辑模式 --> 命令模式,按
Esc退出编辑模式
(3)移动光标
向左、下、上、右移动光标,有两种:
h j k l
→↓↑←

尽管用方向键也能移动光标,但建议还是使用hjkl,因为手不用离开主键盘,提升效率。
更多移动光标方法:
gg到第一行G到最后一行 (:$ ){段首}段尾w下一个单词(W)e词尾(E)Ctrl + f向下滚动一屏Ctrl + b向上滚动一屏:n光标移动到第n行
(4)插入文本
插入(insert)
i在当前位置插入I在当前行前插入
添加(append)
a在当前光标后增加A在当前行后增加
Oo
o在当前光标所在行后增加一行O在当前光标所在行前增加一行插入
(5)删除
x删除光标处一个字符X删除当前字符的前一个字符D删除光标后该行的所有字符 (d$)[n]dd从光标所在行开始,删除n行s删除光标所在字符,进入输入模式S删除光标所在行,进入输入模式
混合命令
dh删除前一个字符dl删除当前字符, dl=xdj删除上一行dk删除下一行
(6)替换文本
r替换字符,只替换单个字符R替换模式,替换光标后面的字符cc替代行中的所有字符C替代行中剩余的所有字符
(7)复制、粘贴
[n]yy复制n行P在光标后插入临时缓冲区的内容
(8)撤消和恢复
u撤消undoctrl+r恢复redo
(9)查找与替换
查找/string 或?string
n下一个N上一个
替换
:%s/old-string/new-string/gc(g全局,c询问)- 支持正则表达式
(10)其他常用操作
gg=G, 格式化代码:set nu,显示行数 (number):set nonu,取消显示行数J,将下一行的内容接到当前行的末尾
3. 代码相关操作
3.1 代码缩进折叠
(1)拷贝代码
:set paste进入粘贴模式,这样就会关闭自动缩进。:set nopaste退出粘贴模式。
(2)代码缩进
- Shift+,代码往前缩进一个TAB
- Shift+<kbd><<kbd><,代码回缩进一个TAB
将一大段代码回缩一个TAB,按v进入Visual模式,选中要回缩的代码,按Shift+<kbd><<kbd><。
(3)代码折叠
折叠
- zm,进一步折叠(fold more)
- zM,折叠所有
- zc,折叠光标所在的代码(close one fold under the cursor)
- zC,Close all folds under the cursor recursively
展开折叠
- zr,reduce folding
- zR,展开所有折叠(open all folds)
- zo,展开当前光标所在的折叠(open one fold)
- zO,Open all folds under the cursor recursively
删除整个折叠的内容
- zd,删除当前折叠
- zE,删除所有折叠
在折叠中移动:
- zj,移动至下一个折叠
- zk,移动至上一个折叠
3.2 编译与调试
用命令:copen打开Quickfix窗口,再用:wincmd J让Quickfix窗口显示在下方。
:cc see the current error
:cn next error
:cp previous error
:clist list all errors
用命令:AsyncRun shell command(如:AsyncRun gcc process_synchronization_pv.c)编译文件。

4. 其他插件
4.1 NERD Tree
NERD Tree是树状文件系统管理器。
(1)NERDTree窗口和编辑窗口切换
记住Ctrl+w+w就行了,光标在左右窗口切换。
- Ctrl+w+w 左右窗口切换
- Ctrl+h 切换到左侧窗口
- Ctrl+l 切换到右侧窗口
- Ctrl+w+r NERDTree窗口移动左侧/右侧切换
(2)打开关闭NERDTree
- 关闭NERDTree,切换到树状窗口管理器(用Ctrl+w+w,或用Ctrl+h 、Ctrl+l ),按q退出NERDTree
- 打开NERDTree,
:NERDTree
(3)常用操作
- o,打开文件,并跳转到编辑窗口;展开/折叠文件夹
更多操作,参考:NERDTree 快捷键辑录。
4.2 TagList+Cscope
(1)TagList
产生标签。进入到源码目录,运行如下命令:
ctags -R * # generate tags for all file under current directory recursively
常用操作:
- 打开/关闭Taglist,
:Tlist F5,重新生成tag文件,并更新taglist(
:TlistUpdate)Ctrl+],跳转到函数定义的位置
- Ctrl+t,返回
(2)Cscope
生成cscope.out文件,
$ cscope -Rbkq
添加索引文件(已在my_configs.vim添加了),
:cs add file|dir [pre-path] [flags]
" cscope
if filereadable("cscope.out")
cs add cscope.out
endif
Cscope操作,
find : Query for a pattern (Usage: find a|c|d|e|f|g|i|s|t name)
a: Find assignments to this symbol
c: Find functions calling this function
d: Find functions called by this function
e: Find this egrep pattern
f: Find this file
g: Find this definition
i: Find files #including this file
s: Find this C symbol
t: Find this text string