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