vim是一款功能强大、高度定制的文本工具。配置极为灵活的编辑器,且支持多种主流OS(linux、Unix、mac、windows),可用来各种编程预言的coding和文件编辑,用习惯了vim,你会体会到它是如此的高效和便捷。引用官网(www.vim.org)上vim的自我介绍说:
“Vim is a highly configurable text editor built to enable efficient text editing. It is an improved version of the vi editor distributed with most UNIX systems.Vim is often called a "programmer's editor," and so useful for programming that many consider it an entire IDE. It's not just for programmers, though. Vim is perfect for all kinds of text editing, from composing email to editing configuration files. Despite what the above comic suggests, Vim can be configured to work in a very simple (Notepad-like) way, called evim or Easy Vim.”
本文主要通过一些示例介绍下如何定制自己专属的基于vim的IDE编程环境(主要针对c/c++,其他语言亦可采用相同的思路)。下面我们就一步一步来介绍,一砖一瓦从零开始建造我们基于VIM的友好的IDE环境。
Vim安装
- Ubuntu
sudo apt-get install vim
- redHat/Fedora/CentOS
yum install vim (redHat/Fedora/CentOS)
vi和vim是什么关系?
- vi:可视化接口(visual interface),EX(行文本编辑器)的可视化接口
- vim:vi(VIM - Vi IMproved)的加强版本
- 增加了多级撤销
- 多窗口操作
- 提高了稳定性,减少了崩溃以及崩溃后也可以恢复
- 关键字自动补全以及上下文相关的补全
vim工作模式
- 普通模式:vim打开一个文件时的默认模式(命令模式)
- 插入模式:键盘上的
i
键盘即进入插入模式,o/a都可以进入插入模式
- 命令行模式:shift+
:
即可进入命令行模式 :set nulber # 显示行号
配置文件子/etc/vim/vimrc
或者~/.vimrc
- 可视化模式
键盘上的v进入可视化模式,上下左右移动光标选中文本,可以进行后续的粘贴、删除、复制等操作
- 替换模式
按R
就可以进入到替换模式
光标移动
- 单个字符移动
字符 | 移动方向 |
---|---|
h | 向左移动 |
l | 向右移动 |
j | 向下移动 |
k | 向上移动 |
10
>l
向左移动10
个字符
- 单词移动
单词 | 移动方向 |
---|---|
w | 将光标移动到下一个单词的开头 |
b | 将光标移动到前一个单词的开头 |
e | 将光标移动到下一个单词的词末 |
E | 移动到单词的结尾(忽略标点符号) |
ge | 将光标移动到上一个单词的词末 |
2w | 指定移动的次数 |
- 行移动
单词 | 移动方向 |
---|---|
$ | 将光标移动到当前行的行尾 |
0 | 将光标移动到当前行的行首 |
^ | 将光标移动到当前行的第一个非空字符 |
2| | 移到当前行的第2列 |
fx | 将光标移动到当前行的第一个字符x 上 |
3fx | 将光标移动到航前行的第3 个字符x 上 |
tx | 将光标移动到目标字符x 的前一个字符上 |
fx和tx | 可以通过; 和, 进行正向或反向重复移动 |
% | 用于符号间的移动,它会在一对() 、[] 、{} 之间跳跃 |
- 文本块移动
单词 | 移动方向 |
---|---|
( | 移到当前句子的开头 |
) | 移到下一个句子的开头 |
{ | 移到当前一段的开头 |
} | 移到下一段的开头 |
[[ | 移到当前这一节的开头 |
]] | 移到下一节的开头 |
- 在屏幕中移动
单词 | 移动方向 |
---|---|
xG\ | 跳转到指定的第x 行,G 移动到文件按末尾 |
`` | 2次单引号)返回到跳转前的位置 |
gg | 移动到文件开头 |
x% | 移动到文件中间,就使用50% |
H | 移动到当前屏幕的开头 |
M | 移动到当前屏幕中间 |
``L` | 移动当前屏幕的末尾 |
ctrl+G | 查看当前的位置状态 |
滚屏与跳转
- 半屏滚动
快捷键 | 方向 |
---|---|
ctrl+u | 向上滚动 |
ctrl+d | 向下滚动 |
- 全屏滚动
快捷键 | 方向 |
---|---|
ctrl+b | 向上滚动 |
ctrl+f | 向下滚动 |
- 定位光标的位置
定位 | 位置 |
---|---|
zz | 将光标置于屏幕的中间 |
zt | 将光标移动到屏幕的顶部 |
zb | 将光标移动到屏幕的底部 |
- 设置跳转标记
标记 | 跳转 |
---|---|
mx | 设置跳转位置 |
`x | 跳转到设置 |
文本插入操作
按键 | 描述 |
---|---|
i | 在当前光标的前面插入字符 |
a | 在当前光标的后面追加字符 |
o | 在当前光标的下一行行首插入字符 |
I | 在一行的开头添加文本 |
A | 在一行的结尾处添加文本 |
O | 在光标当前行的上一行插入文本 |
s | 删除当前光标处的字符并进入到插入模式 |
S | 删除光标所在处的行,并进入到插入模式 |
u | 撤销修改 |
文本删除
- 字符删除
按键 | 描述 |
---|---|
x | 删除当前光标所在处的字符 |
X | 删除当前光标左边的字符 |
- 单词删除
按键 | 描述 |
---|---|
dw | 删除一个单词(从光标处到空格) |
daw | 删除光标所在的整个单词(包括空白字符) |
diw | 删除整个单词文本,但是保留空格字符不删除 |
d2w | 删除从当前光标开始处的 2 个单词 |
d$ | 删除从光标到一行末尾的整个文本 |
d0 | 删除从光标到一行开头的所有单词 |
dl | 删除当前光标处的字符=x |
dh | 删除当前光标左边的字符=X |
- 行删除
按键 | 描述 |
---|---|
dd | 删除当前光标处的一整行=D |
5dd | 删除从光标开始处的5 行代码 |
dgg | 删除从光标到文本开头 |
dG | 删除从光标到文本结尾 |
- 行合并
按键 | 描述 |
---|---|
J | 删除一个分行符,将当前行与下一行合并 |
文本复制、剪切与粘贴
按键 | 描述 |
---|---|
y | 复制,p:粘贴 |
yw | 复制一个单词 |
y2w | 复制2 个单词 |
y$ | 复制从当前光标到行结尾的所有单词 |
y0 | 复制从当前光标到行首的所有单词 |
yy | 复制一整行 |
2yy | 复制从当前光标所在行开始的2 行 |
- 复制文本块
- 首先进入
visual
模式:v - 移动光标选择文本
- 复制与粘贴的操作
剪贴板交互(将vim的内容复制出来)
习惯了在windows环境各个应用程序之间如UltraEdit,记事本,eclipse之间ctrl+c,ctrl+v进行复制粘贴的你,如何在vim与别的windows应用程序之间拷贝粘贴呢?
当然你可以在vim里选择用鼠标,选中一块文字然后右键复制,再到应用程序里ctrl+v粘贴,只不过这样效率就差多了。
更好的做法是,在vim中使用 "*y 使用进行复制,然后在应用程序中用ctrl+v粘贴。
从应用程序到vim则在应用程序中使用ctrl+c复制,在vim中使用shift+insert粘贴。
如:
"*yy 复制一行 "*y2w 复制二个词 ……
实现的原理是:
" 表示使用寄存器 "* 表示使用当前选择区
推荐使用ctrl+insert复制,shift+insert粘贴。
vim有多个剪贴板,其中就包括了系统剪贴板。
使用命令:reg可以看到各个剪贴板的内容。其中“”表示当前使用的剪贴板,“0-9是历史剪贴板,“#就是系统剪贴板了(你可以在系统里拷贝一些东西,看是不是会出现在“#剪贴板里)。在vim中使用y可以把内容拷贝到“”号剪贴板,继续y会把新的东西放入“”,而原来“”的东西就会被压入“0-9的各个历史剪贴板中。X11系统下还有一个“*的剪贴板对应中键拷贝粘贴,windows不知道有没有。
解决第一个问题:
“+y 把选中内容拷贝到”+号剪贴板,即系统剪贴板 “+p 把系统剪贴板的内容粘贴到vim,这一个用shift+insert也可完成
解决第二个问题:
“0p 可以把已经被挤到”0剪贴板的内容A重新粘贴出来
嫌长的做一个map,映射到某个功能键或组合就方便了。
文本修改与替换
按键 | 描述 |
---|---|
cw | 删除从光标处到单词结尾的文本并进入到插入模式 |
cb | 删除从光标处到单词开头的文本并进入到插入模式 |
cc | 删除一整行并进入到插入模式 |
~ | 修改光标下字符的大小写 |
r | 替换当前光标下的字符 |
R | 进入到替换模式 |
xp | 交换光标和下一个字符 |
组合命令使用
更改 | 删除 | 复制 | 从光标位置到... |
---|---|---|---|
cH | dH | yH | 屏幕顶端 |
cL | dL | yL | 屏幕低端 |
c+ | d+ | y+ | 下一行 |
c5| | d5| | y5| | 本行的第五列 |
2c) | 2d) | 2y) | 往下第二个句子 |
c{ | d{ | y{ | 上一段 |
cG | dG | yG | 文件结尾 |
c13G | d13G | y13G | 第13行 |
文本查找与替换
- 字符串查找
表达式 | 描述 |
---|---|
/string | 正向查找 |
?string | 反向查找 |
- 设置高亮显示
:set hls
*
按键将当前光标处的单词高亮显示- 使用
n
浏览下一个查找高亮的结果
- 字符串替换
操作 | 描述 |
---|---|
:s/old/new | 将当前行的第一个字符串old 替换为new |
:s/old/new/g | 将当前行的所有字符串old 替换为new |
:90s/old/new/g | 将指定行的所有字符串old 替换为new |
:90,93s/old/new/g | 将90 到93 行的所有字符串old 替换为new |
:%s/old/new/g | 将文本中所有的字符串old 替换为new |
:%s/old/new/gc | 依次替换每个字符串关键字 |
:%s/^struct/int/g | 将所有以struct 开头的字符串替换为int |
修改的撤销、重做和保存
操作 | 描述 |
---|---|
u | 撤销上一步的操作 |
Ctrl+r | 将原来的插销重做一遍 |
U | 恢复一整行原来的面貌(文件打开时的文本状态) |
q | 若文件没有修改,直接退出 |
q! | 文件已经被修改,放弃修改退出 |
wq | 文件已经被修改,保存修改并退出 |
e! | 放弃修改,重新回到文件打开时的状态 |
编辑多个文件
- 文件和缓冲区的区别
- 文件是保存在磁盘上的,而打开的文件的文件是在内存中
- 在内存中有一个缓冲区,用来存放打开的文件
- vim 每次打开文件时都会创建一个缓冲区,vim 支持打开多个文件
操作 | 描述 |
---|---|
:buffers` | 查看缓冲区列表==ls |
:buffer N` | 根据缓冲区列表的编号跳转到指定缓冲区 |
:bnext/bprev` | 遍历缓冲区列表 |
:bfirst/blast` | 分别调到缓冲区列表的开头和结尾 |
:write` | 将缓冲区的修改保存到磁盘上 |
:edit! e!` | 放弃缓冲区的修改,恢复到文件打开时的状态 |
:edit file` | 编辑另一个文件 |
:wnext` | 保存当前缓冲区的修改并跳转到缓冲区列表中的下一个文件 |
:set autowrite
标签页与折叠栏
标签页的新建:tabedit file/tab split
标签页的切换: tabn/tabp 按键:gt/gT
标签页的关闭: tabclose 关闭当前的标签页,:tabonly
- 创建一个折叠
zf200G: 将光标和 200 行之间的代码折叠起来
- 折叠的打开与关闭
- za: 打开和关闭折叠
- zr/zm: 一层一层地打开和关闭折叠
- zR/zM: 分别打开和关闭所有的折叠
- 折叠键的光标移动
- zj: 跳转到下一个折叠处
- zk: 跳转到上一个折叠处
- 删除折叠
- zd: 删除光标下的折叠
- zD: 删除光标下的折叠以及嵌套的折叠
- zE: 删除所有的折叠标签
创建的折叠当退出 vim 之后就失效了。
多窗口操作
- 分割窗口
split/vsplit filename
- 窗口间跳转
ctrl+w hjkl ctrl+w w
- 移动窗口
ctrl+w HJKL
- 调整窗口尺寸
ctrl+w +/-
调整窗口的高度ctrl+w </>
调整窗口的宽度ctrl+w =
所有的窗口设置相同的尺寸:resize n
将当前窗口尺寸调整为 N 行
- 关闭窗口
close
: 关闭一个窗口qall
: 退出所有窗口qall!
: 放弃修改,退出所有窗口wqall:
保存并退出所有窗口wall:
保存所有窗口
http://www.savh.cn/thread-194.htm
转载请注明:Savh.Cn 发表