在所有的Linux distributions上都会有一套文本编辑器vi,此外,vim是高级版的vi,vim不但可以用不同颜色显示文字内容,还能够进行诸如shell脚本,C等程序编辑功能,你可以将vim视为一种程序编辑器。
一,学习vim的原因
(1)所有的UNIX Like系统都会内置vi文本编辑器,其他的文本编辑器则不一定存在;
(2)很多软件的编辑接口都会主动调用vi(例如crontab,visudo, edquota等命令);
(3)vim具有程序编辑能力,可以主动以字体颜色辨别语法的正确性,方便程序设计;
(4)程序简单,编辑速度相当快速。
简单来说,vi是老式的文字处理器,不过功能已经很齐全了,但是还是有可以进步的地方。vim则可以说是程序开发者的一项很好用的工具,就连vim的官方网站自己也说vim是一个“程序开发工具”。因为vim里面加入了很多额外的功能,例如支持正则表达式的查找架构、多文件编辑、块复制等。
二,vi的使用
基本上vi共分为3种模式,分别是一般模式、编辑模式与命令行模式:
- 一般模式:以vi打开一个文件就直接进入一般模式了。这个模式中,你可以使用上下左右按键来移动光标,可以删除字符或删除正行,也可以复制、粘贴你的文件数据。
- 编辑模式:在一般模式中可以进行删除、复制、粘贴等操作,但是无法编辑文件内容。要等你按下“i(insert,当前位置之前插入), I, o(换行插入), O, a(append,当前位置之后插入), A, r(replace,替换插入), R”等任何一个字母之后才会进入编辑模式。而如果要回到一般模式时,则按下Esc即可退出编译模式。
- 命令行模式:在一般模式中输入“ :, /, ? ”三个中的任何一个,就可以将光标移动到最下面一行。在这个模式中,可以进行查找数据的操作,如读取、保存(w)、大量替换字符、离开vi(q)、显示行号(set number)等。
vi按键说明
- 一般模式可用的按钮说明,光标移动(gg光标移到文本开头,G光标移到文本最后一行的行首)、复制粘贴(yy复制一行,y2y复制两行…,p粘贴)、查找(/word,?word)替换(s/word1/word2/g)等:
1.移动光标的方法
h或向左箭头键(←):光标向左移动一个字符
j或向下箭头键(↓):光标向下移动一个字符
k或向左箭头键(↑):光标向上移动一个字符
l或向左箭头键(→):光标向右移动一个字符
如果想移动多行,例如向下移动30行,使用“30j”或“30↓”的组合按键实现。
Ctrl + f:屏幕向下移动一页,相当于PageDown按键(常用)
Ctrl + b:屏幕向上移动一页,相当于PageUp按键(常用)
Ctrl + d:屏幕向下移动半页
Ctrl + u:屏幕向上移动半页
+:光标移动到非空格符的下一行
-:光标移动到非空格符的上一行
n<space>:光标移动到n个字符之后
^或0或功能键Home:移动到这一行的最前面字符处(常用)
$或功能键End:移动到这一行的最后面字符处(常用)
H:光标移动到这个屏幕的最上方那一行的第一个字符
M:光标移动到这个屏幕的中央那一行的第一个字符
L:光标移动到这个屏幕的最下方那一行的第一个字符
G:光标移动到这个文件的最后一行(常用)
nG:移动到这个文件的第n行
gg:移动到这个文件的第一行,相当于1G(常用)
n[Enter]:n为数字,光标向下移动n行(常用)
2.查找与替换
/word:向下查找一个名称为word的字符串(常用)
?word:向上查找一个名称为word的字符串
n:查找下一个
N:查找上一个
:n1,n2s/word1/word2/g:n1与n2为数字。在第n1与n2之间寻找word1字符串,并将该字符串替换为word2(常用),其中s是substitute缩写
:1,$s/word1/word2/g:从第一行到最后一行查找word1,并将其替换为word2(常用)
:1,$s/word1/word2/gc:从第一行到最后一行查找word1,将其替换为word2,且在替换前显示提示字符给用户确认是否需要替换(常用)
3.删除、复制与粘贴
x,X:在一行字当中,x为向后删除一个字符(相当于Del按键),X为向前删除一个字符(相当于Backspace)(常用)
nx:n为数字,连续向后删除n个字符
dd:删除光标所在的那一整行(常用)
ndd:n为数字,删除光标所在的向下n行(常用)
d1G:删除光标所在到第一行的所有数据
dG:删除从光标所在到最后一行的所有数据
d$:删除从光标所在处到该行的最后一个字符
d0:删除从光标所在处到该行的最前面一个字符
yy:复制光标所在的那一行(常用)
nyy:n为数字,复制光标所在的向下n行(常用)
y1G:复制光标所在行到第一行的所有数据
yG:复制光标所在行到最后一行的所有数据
y0:复制光标所在的那个字符到该行行首的所有数据
y$:赋值光标所在的那个字符到该行行尾的所有数据
p,P:p为将已复制的数据在光标下一行粘贴,P则为粘贴在光标的上一行。
J:将光标所在行以下一行的数据结合成同一行
c:重复删除多个数据,例如向下删除10行,10cj
u:复原前一个操作(常用)
Ctrl + r:重做上一个操作(常用)
- 一般模式切换到编辑模式的可用的按钮说明
进入插入或替换的编辑模式
i,I:进入插入模式(Insert mode):i为从目前光标所在处插入,I为在目前所在行的第一个非空格符处开始插入(常用)
a,A:进入插入模式:a为从目前光标所在的下一个字符处开始插入,A为从光标所在行的最后一个字符处开始插入(常用)
o,O:进入插入模式:o为在目前光标所在的下一行处插入新的一行,O为在目前光标所在处的上一行插入新的一行(常用)
r,R:进入替换模式(Replace mode):r只会替换光标所在的那一个字符一次,R会一直替换光标所在的文字,知道按下Esc键位置(常用)
Esc键:退出编辑模式,回到一般模式中(常用)
- 一般模式切换到命令行模式的可用的按钮说明
命令行的保存、离开等命令
:w:将编辑的数据写入硬盘文件中(常用)
:w!:若文件属性为“只读”时,强制写入该文件。不过,到底能不能写入,还是跟你对该文件的文件权限有关
:q:离开vi(常用)
:q!:若曾修改过文件,又不想存储,使用!为强制离开不保存文件
:wq:保存后离开,若为:wq!则为强制保存后离开(常用)
ZZ:大写的Z,若文件没有改动,则不保存离开,若文件已经改动过,则保存后离开
:w[filename]:将编辑的数据保存成另一个文件(类似于另存文件)
:r[filename]:在编辑的数据中,读入另一个文件的数据,即将“filename”这个文件内容加到光标所在行后面
:n1,n2 w[filename]:将n1到n2的内容保存成filename这个文件
:!command:暂时离开vi到命令行模式下执行command的显示结果,例如“:! ls/home”即可在vi当中查看/home下面以ls输出的文件信息
:set nu:显示行号,设置之后,会在每一行的前缀显示该行的行号
:set nonu:与set nu相反,取消行号
三,vim的功能
其实,目前大部分的distributions都以vim替代vi的功能了。
1.块选择(Visual Block)
前面我们提到的简单的vi操作过程中,几乎提到的都是以行为单位的操作。那么如果我们需要搞定的是一个块范围呢?
块选择的按键意义
v:字符选择,会将光标经过的地方反白选择
V:行选择,会将光标经过的行反白选择
Ctrl + v:块选择,可以用长方形的方式选择数据
y:将反白的地方复制起来
d:将反白的地方删除
2.多文件编辑
我们可以使用vim后面同时接好几个文件来同时打开
多文件编辑的按键
当我们打开多个文件时,比如$ vim test.txt test02.txt,可以使用下面命令进行切换:
:n:编辑下一个文件
:N:编辑上一个文件
:files:列出目前这个vim打开的所有文件
3.多窗口功能
多窗口情况下的按键功能
:sp [filename]:打开一个新窗口,如果有加filename,表示在新窗口打开一个新文件,否则表示两个窗口为同一个文件内容(同步显示)
ctrl +w+j(↓):光标可移动到下方的窗口
ctrl +w+k(↑):不过光标移动到上方的窗口
ctrl +w+q:其实就是:q结束离开
4.vim环境设置:~/.vimrc
vim的环境设置参数
整体vim的设置值一般是放置在/etc/vimrc这个文件中,不过,不建议你修改它,我们可以修改~/.vimrc这个文件(默认不存在,可自动创建),将你所希望的设置值写入。
参考:Linux私房菜第三版