和sed相比,sed为字处理器(行编辑器),将文本逐行放入到模式空间(也就是内存)中进行处理,并显示在屏幕上。而vim、vi以及nano都是全屏文本编辑器,而vim则是vi的加强版本,相对于vi,vim则拥有特殊字符着色的功能,也是最为常用的功能;
本节我们重点介绍vim编辑器的常见用法;
vim文本编辑器详解
*Linux系统的核心就是通过文本来存储所有的软件配置文件*,所以,能够熟练的掌握文本编辑器对于学习Linux系统而言是至关重要的。
vim编辑器作为vi编辑器的升级版,它将伴随我们学习Linux系统的整个过程!
vi:Visual interface可视化接口;
vim:VI iMproved vi的增强版;【vim编辑器实现是语法自动着色,方便我们判断自己缩写的语句是否正确】
vim的模式
vim编辑器分为三种模式(这点和vi编辑器相同),编辑模式(命令模式),输入模式,末行模式;
在我们通过vim进入文本的时候,默认处于编辑模式。
模式切换:
编辑模式 -> 输入模式
i 在当前光标所在字符的前面,进入输入模式;
a 在当前光标所在字符的后面,进入输入模式;
o 在当前光标所在行的下面重启一行,进入输入模式;
I 在当前光标所在行的行首,进入到输入模式(自动将光标移动到当前行行首);
A 在当前光标所在行的行尾,进入到输入模式(自动将光标移动到当前行行尾);
O 在光标所在字符的上一行,转换为输入模式(和 o 正好相反);
输入模式 -> 编辑模式
ESC键
编辑模式 ->末行模式
输入 “:” 即可
在输入模式下可以关联vim的相关命令对文本进行编辑,或者切换光标位置:
例如:5d #删除第5行
10,20d #删除第10行到20行,总共删除11行
set nu #显示行号
! ls /etc #在vim下关联shell命令
【以上操作都是我们比较常用的操作】
末行模式 -> 编辑模式
ESC键
【三种模式之间的切换要注意一点:输入模式不能和末行模式之间直接切换,必须通过编辑模式来进行切换!】
模式切换总结如下图:
vim下的常见操作
一、文本打开方式
首先 vim /path/FILE 可以直接打开文件;
特殊使用方式:
vim +数字 /path/FILE 可以打开文件,且直接将光标定义在数值指定的行;
vim + /path/FILE 打开文件,将光标处在文件的末尾;
vim +/string /path/FILE 打开文件,且将光标定义在string字符串处,类似于查找功能;
二、文本关闭方式
1、常见关闭文本都是在末行模式下进行
:q 表示退出文本,不保存;
:wq 保存并退出文本;
:q! 如果修改了文本,不想保存,则通过 :q! 来强制退出文本;
:w 只保存,不退出文本;
:w! 强制保存文本,这个权限只有管理员root才拥有;
2、在编辑模式(命令模式)下退出文本
ctrl+z 退出文本,但是不保存
ZZ 保存并退出文本
三、光标移动
注意:以下操作均处于编辑模式(命令模式)下运行;
1、逐字符的移动光标:
j 下
k 上
h 左
l 右
【这个“上下左右”要更加好于键盘的“上下左右”,它更加的方便】
结合数字来使用,既可以同时移动多行,例如:5j 向下移动5行;6l 向右移动6个字符;
2、按照单词为单位来移动光标
w 光标处于单词首部,以单词为单位向后移动
e 光标处于单词尾部,以单词为单位向后移动
b 光标处于单词首部,以单词为单位向前移动
同理,可以结合数字来使用:5e 向后移动5个单词位;10b 向前移动10个单词位;
3、行内跳转
0 表示跳转到行首(不包含制表符)
^ 表示跳转到绝对的行首
$ 表示跳转到行尾
4、行间跳转
数字G 指定跳转到那个固定行,例如:5G 表示跳转到第5行;
G 如果不加数字,则是直接跳转到最后一行;
【末行模式下,也可以进行行间跳转;例如: “:5” 表示跳转到第5行;】
四、翻屏
编辑模式下:
ctrl+f 向下翻一屏
ctrl+b 向上翻一屏
ctrl+d 向下翻半屏
ctrl+u 向上翻半屏
五、删除操作
删除单个字符
x 删除光标所处的单个字符;
数字x 和之前移动光标原理相同,可以删除“数字”个字符;例如:5x 删除5个字符;
删除命令--d
dw 删除光标所在的那个单词;
数字dw 删除“数字”个单词,从当前光标开始算起;
dd 删除当前行;
【在末行模式下,可以删除多行“:StartADD,EndADDd”删除startadd到endadd行;这里记住一个特殊符号:. (点,表示当前行),例如: :.,$-3d 这表示删除当前行到倒数第4行之间的所有内容;如果说要删除删除当前行到向下数十行的内容呢? :.,+10d 其中,+ 号表示向下多少行的意思,+多少,就是向下多少行】
【vim下删除内容的时候要注意:删除的内容不会被立刻清除,还可以恢复删除的内容,最近一次删除的内容可以复制或者剪切到其他的地方,通过p命令粘贴到别的地方】
六、复制--y
复制的用法基本与删除用法相同
其中 yy 复制当前行使用最为多;
数字y 表示复制从当前光标单词算起,复制多少个单词;5y 复制5个单词;
七、粘贴--p和P
P:如果删除或复制的内容为整行的内容,则粘贴至光标所在行的上方,如果复制或删除的内容为非整行内容,则粘贴在光标的前方;
p:如果删除或复制的内容为整行的内容,则粘贴至光标所在行的下方,如果复制或删除的内容为非整行内容,则粘贴在光标的后方;
八、修改--c
先删除掉内容,再转换为输入模式:
cc 删除当前行后,直接进入输入模式进行编辑;
c$ 删除当前光标到末行的内容,在直接转入到输入模式进行编辑;
【cc 和 c$ 是比较常见的两种用法】
九、替换--r
替换操作一般用于单个字符的操作:
r字符或数字 将光标所在字符替换为输入的字符或数字;
十、撤销--u
u 撤销前一次的操作,连续桥u命令,则是撤销此前的n次操作;默认情况下最多撤销前50次操作;
数字u 直接撤销前“数字”次操作;例如,5u 撤销前5次的操作;
【取消最近一次撤销的操作则为 ctrl+r】
十一、重复前一次的操作--.
. (点)这个符号就表示重复上一次的编辑操作
例如:dd 删除了当前行,此时一致敲 . 则表示重复 dd 的命令;
十二、可视化模式(标记内容)--v和V
进入可是化模式,通过移动光标来选择要编辑的内容;
v 表示按照字符来选取内容
V 表示按照行来选取内容
选择了对应的内容以后,再进行复制,删除等等操作;
十三、查找,以及查找并替换
查找:
这个内容则和less命令的类似,就不在多说
查找并替换:
查找到对应的内容后,可以进行替换操作,这里和sed名的格式有点类似:
ADDR1,ADDR2s@pattedn@string@gi #其中ADDR1,ADDR2表示要替换的范围,s可以理解为sed命令,pattern选择出要替换的字符串,替换为后面的string,最后g表示全局替换,而i则表示不区分大小写
例如: :.,$-1s@he@HE@g #从当前行到倒数第二行,中的he全部替换为HE
【1,$表示全文范围,也可以通过%来表示全文范围】
练习:将/etc/yum.repos.d/server.rpo文件中的ftp://instructor.example.com/pub替换为http://172.16.0.1/yum
vim /etc/yum.repos.d/server.rpo
:%s@ftp://inistructor\.example\.com/pub@http://172.16.0.1/yum@g
十四、同时编辑多个文件
vim是可以支持跨文件编辑的(例如,将file1中的内容复制粘贴到file2中去)
vim FILE1 FILE2 FIEL3 #在vim后面接上多个文件的时候,实际上是打开了FILE1,FILE2,FILE3三个文件,但是显示只显示了FILE1的内容。
在末行模式下:
:next 切换到FILE2或后者其他文件
:prev 切回到FILE1或则前面的文件
:last 切换到最后一个文件
:first 切换到第一个文件
:q 只能退出当前文件,如果想退出所有文件,则需要使用
:qa 退出所有文件
十五、分屏显示同一个文件--ctrl+w [s|v] 或者 -[o|O]
上面我们说到了同时打开多个文件,但是不在同一个屏幕上面显示,如何才能让屏幕同时显示多个文件呢?
ctrl+w松开后,再按s 水平分割窗口
vim -o FILE1 FILE2
ctrl+w松开后,再按v 垂直分割窗口
vim -O FILE1 FILE2
ctrl+w松开后,再按w或是小键盘上下左右 切换光标所在文件
十六、将当前文件中部分内容另存到另外一个文件中--w
在末行模式下进行操作:
例如: :.,+5w /path/somefile #保存当前文件光标所在行,到接下来5行的内容保存到另外一个/path/somefile文件中去;
十七、将另外一个文件的内容填充到当前文件中--r
在末行模式下进行操作:
例如: :r /etc/inittab #将/etc/inittab文件的内容填充到当前文件光标所在的地方;
十九、调用shell脚本程序(调用命令)--!
在末行模式下进行操作:
例如: :! ls /etc #这样就可以直接在vim编辑器中去运行ls /etc的命令;
二十、高级操作
1、显示或取消行号
:set number 也就是简写为 :set nu
:set nonu 取消行号
【默认情况下是没有行号的,我们所如果想默认进来就看到行号,就必须去修改vim的配置文件】
2、是否忽略大小写
:set ignorecase 也就是简写为 :set ic
:set noignorecase
3、设置自动缩进功能
默认情况下回车后是没有缩进的
:set autoindent 也就是简写为 :set ai
:set nohlsearch
4、查找到的文本的高亮显示与取消
语言着色功能,默认开启(也叫做高亮显示)
:set hlsearch
:set nohlsearch #关闭高亮显示
5、语法着色功能(vim默认开启)
:syntax on
:syntax off #关闭语法着色功能
二十一、vim的配置文件
/etc/vimrc #为所有shell下的主配置文件,修改这里的配置文件,则在所有bash程序下生效;
~/.vimrc #各个用户的家目录下去编辑这个文件(没有的可以自己创建),则只在本bash进程下,对vim的编辑才生效
vim导师(vim的帮助文件)
vimtutor #vim编辑器的教程,这里有心的朋友可以自己慢慢去看;
vim编辑文件时非法退出时遇到的问题
如果在你编辑文件的时候,突然关闭了该shell程序,并不是通过 :q 或者 ZZ 正常退出的文件,则会在当前被编辑文件的同一个目录下生成 .swp 的隐藏文件文件;
当你再次想编辑这个文件时候则提示如下:
这里提示您上次在 dated 时间的时候进行过编辑,您是否继续编辑;
O表示打开该文件,但是只读,E表示编辑这个文件,R表示覆盖这个文件重新编辑,D则是删除上次编辑的内容,重新再进行编辑,A则是表示退出并终止;
此时,我们只需要按E进去正常保存,这样我们之前编辑的内容就不会丢失,再删除掉 .swp 的隐藏文件即可;