一、vim的三种模式
1、命令模式
一进入vim默认的就是命令模式。命令模式下,用户在键盘上按下任意一个键就会产生一个命令(前提是该字符是vim的命令,如若不是会响铃一下)。
2、插入模式
进入插入模式的后,可以输入文本。
3、末行模式
末行模式也是输入相关的命令,不过不像命令模式那样命令不能显示,且命令不能有空格,在末行模式下一个命令可由多个字符组成在末行显示出来,且中间还可以有空格。
三种模式间的转换:
命令模式<-------->插入模式
命令模式<-------->末行模式
所有的转换如上所示,不存在插入模式到末行模式的直接转换。
- 任意模式--->命令模式 : ESC键
- 命令模式--->插入模式 : i
- 命令模式--->末行模式 : 冒号:
以上只是简单的一个介绍,其实命令模式到插入模式有很多种方式,每种方式进入插入模式的插入方式也是不一样的,会在日后的使用过程中逐步完善。
二、vim简单使用
1、启动vim
在linux的shell命令行中输入vim fileName或vi fileName即可进入vim。如果当前目录下有fileName这个文件,则打开这个文件,否则新建一个fileName文件。刚进入vim为命令模式。
2、编辑文本
在命令模式下,按下键盘的i或I(i的大写)键,进入插入模式,在该模式下你可以像window下的文本编辑器一样编辑你的文本。
3、保存退出
当编辑好文本以后,可以按下ESC键返回命令模式,然后输出冒号:,进入末行模式,输入w保存文件,命令执行后又回到命令模式,再输入冒号和q退出vim。注意也可以连用wq,意思为保存并退出,若不想保存直接在末行模式输入命令q退出即可。
注意,如果你编辑的是只读文件的话,用w是写不了的,要用w!来强制写,当然如果你没有写该文件的权限还是写不了,必须在进入vim的时候加sudo获得权限。除此之外,如果你修改了文件没有保存直接q的话,也是退不出来,必须强制退出q!.
至此就可以使用vim编辑文本了,但这是vim最基础的功能,只使用这些功能只能确保能够编写文本,却不能高效的编写文本,如何能够高效的编写文本,可以在实践中慢慢的学习。
三、末行模式
vim只是一个文本编辑器,可以用于编写任何文本,但对程序员来讲主要的还是用来编辑程序。只用上面的模式编辑程序,会发现vim真的不好用,程序的缩进都要自己输入,还没有语法高亮显示,与其他的编辑器相差太远了。但vim是可以设置的,可以通过修改vimrc文件来修改vim的系统配置,也可以在末行模式下修改其配置。注意vimrc文件有两处,一处在/etc/vim中,一处在用户的home目录中,修改前者对所有用户都生效,修改后者只对当前用户生效。如果在末行模式下,相当于修改后者(但重启后配置失效)。末行模式主要有两种功能:
- 配置vim
- 操作文件
1、配置vim
- set nu 显示行号 set nonu 取消显示行号
- set cindent 设置C/C++语言的自动缩进方式
- set shiftwidth=4 设置缩进为4个空格
- set tapstop=4 设置制表符宽度
- set syntax on 设置语法高亮 set syntax off 取消语法高亮(如果在设置语法高亮的时候没有起作用,可以在/etc/profile文件中加入export TERM=xterm-color)
- 括号自动补全设置 inoremap < <><ESC>i 格式为: inoremap 左符号 完整符号对<ESC>i
至此就算搭建了一个简易版的C/C++程序的编辑器啦,相比原始的vim这个要好用很多。
如果还想进一步改善vim达到IDE的那种效果可以用ctag来辅助,具体见这里。
2、操作文件
除了前面所讲的写文件、退出等外,还有其他的一些操作。
- ?word 从光标之前开始查找 /word 从光标之后查找
- n 按照前面的搜索方式查找下一个 N 按照前面的方式反向查找
- num 光标跳转至num行
四、命令模式
- dd 删除光标所在的一整行
- yy 复制光标所在的一整行
- p/P p在光标下一行粘贴,P在光标上一行粘贴
- u 撤销
- x/X x从光标处向后删,X从光标处向前删(类似于backspace)
五、命令模式进入插入模式的方式
- i/I i在光标处插入,I在光标后第一个非空格字符处插入
- o/O o在光标下一行插入,O在光标上一行插入
以上只是vim的一些简单的使用,后续会在实践的基础上,根据需要继续完善。
参考:
1、vim教程: http://www.runoob.com/linux/linux-vim.html
2、vim语法高亮设置: http://www.cnblogs.com/zhanghaifeng/archive/2012/07/16/2592998.html
3、vim代码自动补全: http://blog.csdn.net/g_brightboy/article/details/14229139