

第三章 vim编辑器
3.1 vi编辑器简介
Vim是从 vi 发展出来的一个文本编辑器。代码补完、编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用。
简单的来说, vi 是老式的字处理器,不过功能已经很齐全了,但是还是有可以进步的地方。vim 则可以说是程序开发者的一项很好用的工具。
连 vim 的官方网站 (http://www.vim.org) 自己也说 vim 是一个程序开发工具而不是文字处理软件。可以利用别名让输入vi命令的时候,实际上执行vim编辑器,例如:
[root@localhost ~]# alias vi='vim'
3.2 vim基本使用
3.2.1 vim的工作模式
基本上 vi/vim 共分为三种模式,分别是命令模式(Command mode),输入模式(Insert mode)和编辑模式(Last line mode)。这三种模式的作用分别是:

「命令模式」:是主要使用快捷键的模式,命令模式想要进入输入模式,可以使用以下的方式:
| 命令 | 作用 |
|---|---|
| a | 在光标所在字符后插入 |
| A | 在光标所在行尾插入 |
| i | 在光标所在字符前插入 |
| I | 在光标所在行首插入 |
| o | 在光标下插入新行 |
| O | 在光标上插入新行 |
「输入模式」:主要用于文本编辑,和记事本类似,输入数据。
「编辑模式」:
| 操作 | 作用 |
|---|---|
| :w | 保存不退出 |
| :w [新文件名] | 把文件另存为新文件 |
| :q | 不保存退出 |
| :wq | 保存退出 |
| :! | 强制 |
| :q! | 强制不保存退出,用于修改文件之后,不保存数据退出。 |
| :wq! | 强制保存退出,当文件的所有者或者root用户,对文件没有写权限的时候,强制写入数据使用 |
3.2.2 命令操作模式
移动光标
上下左右移动光标
上下左右方向键
H、j、k、l
把光标移动到文件头或尾
gg 移动到文件头
G 移动到文件尾
移动到行首或行尾
^ 移动到行首
$ 移动到行尾
移动到指定行
:n 移动到第几行,这里的n是数字,表示移动到第几行。
删除或剪切
删除字母
x 删除单个字母
nx 删除n个字母,n是数字,如果打算从光标位置删除连学的10个字母,可以使用"10x"即可。删除 字母并不符合使用习惯,所以更习惯在编辑模式中,用“Backsapce”键删除字母。
删除整行或剪切
dd 删除单行
ndd 删除多行
:n1,n2d 删除指定范围的行
粘贴的操作
p 粘贴到光标后
P(大写) 粘贴到光标前
从光标所在行删除到文件尾
dG 从光标所在行删除到文件尾
复制
yy 复制单行
nyy 复制多行
撤销
u 撤销
ctrl+r 复制多行
替换
r 替换光标所在处的字符
R 从光标所在处开始替换字符,按ESC结束
vim配置文件
这次末行模式参数设置,多数需要在vim中才能生效。
| 设置参数 | 含义 |
|---|---|
| :set nu :set nonu | 显示与取消行号 |
| :syntax on :syntax off | 是否依据语法显示相关的颜色帮助。在Vim中修改相关的配置文件或Shell脚本文件时(如前面示例的脚本/etc/init. d/sshd),默认会显示相应的颜色,用来帮助排错。如果觉得颜色产生了干扰,则可以取消此设置 |
| :set hlsearch :set nohlsearch | 设置是否将查找的字符串高亮显示。默认是set hlsearch 高亮显示。 |
| :set ruler :set noruler | 设置是否显示右下角的状态栏。默认是setruler显示 |
| :set showmode :set noshowmode | 设置是否在左下角显示如“一INSERT--”之类的状态栏。默认是set showmode显示 |
| :set list :set nolist | 设置是否显示隐藏字符(Tab键用“^I”表示,回车符用“$”表示)。默认是nolist显示。如果使用set list显示隐藏字符,类似“cat -A文件名” |
vim支持更多的参数设置,可以使用命令:set all 进行查看,一般的参数设置都是临时生效,永久生效需要设置"~/.vimrc"。
查找
/查找内容 从光标所在行向下查找
?查找内容 从光标所在行向上搜索
n 下一个
N 上一个
替换
:1,10s/old/new/g 替换1到10行的所有old为new
:%s/old/new/g 替换整个文件的old为new
替换字符串,我举几个例子:在shell中“#”开头是注释,那我是否可以注释文件的前10行呢?手工一个一个注释很麻烦,那么批量替换吧:
:1, 10s/ /#/g 注释1到10行
:1, 10s/ #//g 取消注释
而在C语言,PHP 语言等大多数语言中,是使用“//”开头作为注释的,我们当然可以用vim来写这些程序语言脚本,那么批量加入“//”注释吧:
:1, 10s/ /\/\//g 1到10行,行首加入//
:1, 10s/^\/\///g 取消1到10行行首的//
3.2.3 vim使用技巧
在vim中导入其他文件内容或者命令结果
在vim中导入其他文件内容或命令结果
:r 文件名 把文件内容导入光标位置
可以把其他文件内容导入到光标所在位置
在vim中执行系统命令
:!命令 在vim中执行系统命令
这里只是在vim中执行系统命令,但并不把系统命令的结果写入到文件中。主要在于在文件编辑中,查看系统信息,如时间。
导入系统结果
:r !命令 vim中执行执行系统命令,并把命令结果导入光标所在行
设定快捷键
:map 快捷键 快捷键执行的命令 自定义快捷键
vim允许自定义快捷键,常用的自定义快捷键如下:
: map ^P I#<ESC> 按“ctr1+p"时,在行首加入注释
:map ^B^x 按“ctr1+b"时,删除行首第一个字母(删除注释)
注意:^P快捷键不能手工输入,需要执行ctrl+V+P来定义,或ctrl+V,然后ctrl+P。 ^B快捷键也是一样。
字符替换
:ab 源字符 替换为字符 字符替换
在vim编辑中,有时候需要频繁输入某一个长字符串(比如邮箱),这是使用字符串替换,能增加输入效率,例如;
:ab mymail helloworld@163.com 当碰到mymail时,转变为邮箱
注意:“源字符”不应设置为太短,否则可能影响输入。
多文件打开
在vim中可以同时打开两个文件,只要执行如下命令:
[root@localhost hqs]# vim -o mabaoguo.txt englishText.txt
[root@localhost hqs]# vim -O mabaoguo.txt englishText.txt
如图所示:







