一、vim简介
1.vim是什么?
vim是Vi IMproved,是编辑器vi的一个加强版。
2.vim的配置文件
Windows系统的配置文件是vim安装目录下的vimrc文件。
Linux系统,RHEL和CentOS的配置文件是/etc/vimrc,Debian和Ubuntu的配置文是/usr/share/vim/vimrc,还可以在自己的家目录下创建属于自己的的配置,例如~.vimrc。
Mac OS X的配置文件是/usr/share/vim/vimrc。
3.vim的四种模式
- 命令模式(command-mode):用来操作文件,例如保存文件、替换文件内容等
- 插入模式(insert-mode):对文件进行编辑和修改
- 可视化模式(visual-mode):高亮对文件进行操作,有两种模式,分为可视化行和可视化块。
- 正常模式(mormal-mode):主要用来浏览文件内容,其它模式的相互跳转,需要在这做中转。

二、vim基本设置
(1)颜色设置
| syntax on | 开启代码高亮 |
| syntax off | 关闭代码高亮 |
| syntax enable | 开启代码高亮 |
(2)搜索设置
| set hlsearch | 开启搜索高亮 |
| set nohlsearch | 关闭搜索高亮 |
| set incsearch | 输入搜索字符串的同时进行搜索 |
| set ignorecase | 搜索时忽略大小写 |
(3)用户界面
| set showmode | 开启模式显示 |
| set ruler | 开启光标位置提示 |
| set number | 显示行号 |
| set nonu | 不显示行号 |
| set cursorline | 强调光标所在行 |
| set cmdheight=1 | 命令部分高度为1 |
(4)编辑辅助配置
| set autoindent | 自动缩进 |
| set noautoindent | 不自动缩进 |
| set smartindent | 只能缩进 |
| set autoread | 当文件在外部被改变时,vim自动更新载入 |
| set showmatch | 显示匹配的括号 |
三、常用状态切换操作
1.正常模式——》插入模式
| i | 在当前位置开始插入 |
| I | 在当前行的开始位置开始插入 |
| a | 在光标的下一个位置开始插入 |
| A | 在当前行的结束为止开始插入 |
| o | 在当前行的下方另起一行开始插入 |
| O | 在当前行的上方另起一行开始插入 |
| r | 替换光标位置的字符 |
| R | 才当前位置开始一直往后面进行替换,ESC结束 |
2.命令行模式——》退出vim模式
| :w | 保存文件 |
| :w! | 强制保存文件(有权限的前提下) |
| :q | 退出缓冲区(如果有修改则不能退出) |
| :q! | 退出缓冲区不保存修改 |
| :wq | 保存文件并退出缓冲区 |
| :x | 保存文件并且退出 |
| :wq! | 强制保存文件并退出缓冲区(有权限的前提下) |
| :w <filename> | 另存为名为filename |
| :n1,n2 w <filename> | 将n1行到n2行的数据另存为名为filename的文件 |
| :x | 如果文件有更改,则保存后退出,否则直接退出 |
注意:所有在vim中进行的操作,在没有进行提交操作之前只是在内存中做的修改,并没有写入的到磁盘文件,数据也并没有被真正的修改。
w是将内存中的文件写入到磁盘文件,q是退出vim的模式,如果没有进行提交,系统是不会允许你退出的,除非强制退出,这就意味着不保存。
x实际就是命令wq或wq!实现的功能,只不过更加的智能。
四、常用的光标移动的操作
1.光标字符操作(以字符为单位)
| j | 向下 |
| k | 向上 |
| h | 向左 |
| i | 向右 |
| $ | 光标移动到行尾 |
| 0 | 光标移动到行首 |
| ^ | 光标移动到行首的第一个非空白字符 |
2.光标词操作(以单词为单位)
| w | 光标移动到后一个词的词尾 |
| W | 光标移动到后一个词的词尾且忽略标点符号 |
| e/E | 光标移动到本单词的词尾 |
| b | 光标移动到前一个词的词首 |
| B | 光标移动到前一个词的词首且忽略标点符号 |
注意:在Linux文档中,标点符号也要算作是一个单词。
3.光标行的操作
| G | 光标移动到文档的最后一行的第一个非空白字符 |
| nG | 光标移动到文档的第n行 |
| gg | 光标移动到文档的第一行的第一个非空白字符 |
补充:在vim中还有光标段(使用{ }操作)、光标句(使用()操作),但是由于在linux中行、段、句的区分并不是很明确,所以很少使用。
4.光标页操作
| Ctrl+f | 向下翻页(Pagedown) |
| Ctrl+b | 向上翻页(Pageup) |
| Ctrl+d | 向下翻半页 |
| Ctrl+u | 向上翻半页 |
| H | 光标移动到目前页的第一行 |
| M | 光标移动到当前页的中间行 |
| L | 光标移动到当前页的最后一行 |
补充:Ctrl+o回到光标的上一个位置
五、编辑相关的常用操作
1.删除操作
| dd | 删除光标所在的行 |
| ndd | 删除从光标所在行开始向下的n行(包括光标行) |
| d1G | 删除从光标所在行开始到第一行的所有行(包括光标行) |
| dG | 删除从光标所在行开始到最后一行的所有行(包括光标行) |
| d$ | 删除从光标开始到行尾的所有字符(包括光标所在的字符) |
| d0 | 删除从光标开始到行首的所有字符(包括光标所在的字符) |
2.复制操作
| yy | 复制光标所在行 |
| nyy | 复制从光标所在行开始向下的n行 |
| y1G | 复制从光标所在行开始到第一行的所有行(包括当前行) |
| yG | 复制从光标所在行开始到最后一行的所有行(包括当前行) |
| y$ | 复制从光标所在字符开始到行尾的所有字符(包括当前字符) |
| y^ | 复制从光标所在字符开始到行首的所有字符(包括当前字符) |
3.粘贴操作
| p(小写) | 将粘剪贴板中的数据从光标所在行的下一行开始插入 |
| P(大写) | 将粘剪贴板中的数据从光标所在行的上一行开始插入 |
4.撤销与重做
| u | 撤销上一个操作 |
| Ctrl+r | 重复上一个操作 |
5.替换操作
| r | 替换当前字符 |
| R | 进入替换模式,一直往后面替换,直到ESC结束 |
| cc | 替换光标所在行 |
| cw | 替换光标所在的单词 |
6.排版操作
| :le<ft> | 光标所在行左对齐 |
| :ri<ght> | 光标所在行右对齐 |
| :ce<nter> | 光标所在行居中 |
六、多文件与多窗口操作
在linux中,可以使用vim一次打开多个文件,然后一个文件一个文件的进行操作;
当然,也可以使用同时打开多个vim的窗口,同时对多个文件进行操作。
打开一个vim的窗口一般称作为打开了一个缓冲区。
1.单一缓冲区打开多个文件
| :files | 目前打开了那些文件 |
| :n | 切换到下一个文件,如果文件做了更改必须保存或强制退出 |
| :N | 切换到上一个文件,如果文件做了更改必须保存或强制退出 |
| :2N | 切换到下下个文件,如果文件做了更改必须保存或强制退出 |
| :bn | 切换到下一个文件 |
| :bp | 切换到上一个文件 |
注意:bn/bp相对于n/N来说还是在一个缓冲区,n/N是关闭当前的缓冲区,打开另一个缓冲区,中间只是进行无缝操作。
2.同时打开多个vim窗口(多个缓冲区)
| :sp [filename] | 横向打开多个窗口(缓冲区) |
| :vsplit [filename] | 纵向打开多个窗口 |
| Ctrl+w n | 新建一个缓冲区 |
| Ctrl+w q | 退出光标所在的缓冲区 |
| Ctrl+w j | 光标移动到下一个缓冲区 |
| Ctrl+w k | 光标移动到上一个缓冲区 |
| Ctrl+w l | 光标移动到右一缓冲区 |
| Ctrl+w h | 光标移动到左一缓冲区 |
| Ctrl+w v | 左右切割窗口新建缓冲区 |
| Ctrl+w s | 上下切割窗口请见缓冲区 |
| Ctrl+w o | 使光标所在缓冲区最大化,其它缓冲区隐藏 |