在使用Linux的管理过程中有很多的工作就是要修改或设置某些重要软件的配置文件,这些配置文件都是以ASCLL的纯文本格式存在的,所以能够学好一个文本编辑器就至关重要了,vim作为高级版的vi编辑器不仅可以用不同的颜色来高亮显示某些重要关键字或字符还能进行如shell脚本的编写,c程序的编辑等功能。
vim编辑器和nano编辑器是一个全屏的编辑器。vim打开文件是以命令行形式来打开的
在vim编辑器中有三种模式:
编辑模式:这是vim打开文件进入的默认模式
末行模式:内建的命令行接口
输入模式:对文件进行编辑操作
打开文件:
vim [options] [file ..] +#:打开文件后,直接让光标处于第#行; +/PATTERN:打开文件后直接让光标处于第一个被PATTERN匹配到的行的行首;
关闭文件:
编辑模式下关闭文件:ZZ
末行模式下关闭文件:
:q 退出
:q! 强制退出,不保存此前的编辑
:wq 保存并退出
:x 保存并退出
:w /PATH/TO/SOMEFILE 保存文件的路径
模式之间的转换:
打开文件后就处于默认的编辑模式,当我们需要转到输入操作的时候
编辑模式 –》输入模式
i:在光标所在处输入;
a:在光标所在处后方输入;
o:在光标所在处的下方新开一行;
I:在光标所在行的行首输入;
A:在光标所在行的行尾输入;
O:在光标所在处的上方新开一行;
当我们输入完成后要返回编辑模式是使用ESC键;
在编辑模式下进入末行模式只用输出一个:即可
同样退出末行模式进入编辑模式则使用ESC键;
编辑模式下的光标跳转
字符之间的跳转
h:左 ;
j:右;
k:上;
l:下;
单词间跳转:
w:下一个单词的词首 注意:这里的单词是指一个连续的字符串
e:当前或者后一个单词的词尾;
b:当前或后一个单词的词首;
#CMMAND:跳转由#指定的单词个数;例:5w,77e,2b,…..
行首行尾跳转
^:跳转至行首的第一个非空白字符;
0:跳转至行尾;
$:跳转至行尾
行间跳转
#G:跳转至由#指定的行:
1G,gg:跳转至第一行
G:跳转最后一行
句间跳转
)
(
段间跳转
}
{
翻屏:
Ctrl+f:向文件尾翻一屏;
Ctrl+b:向文件首部翻一屏;
Ctrl+d:向文件尾部翻半屏;
Ctrl+u:向文件首部翻半屏;
Enter:按行向后翻;
vim的编辑命令
字符编辑:
x:删除光标所在的字符;
#x:删除所在处起始的#个字符;
xp:交换光标所在处的字符与其后面字符的位置;
替换命令:
r:替换光标所在处的字符;
删除命令:
d:删除命令,可结合光标跳转实现范围删除;
d$:从光标处删除至行尾;
d^:从光标处删除至行首的第一个非空白字符;
dw:
de:
db:
dd:删除光标所在处的行;#dd:删除光标所在处的起始行共#行
粘贴命令(p,put,paste)
p:缓冲区中的内容如果为整行,则粘贴在当前光标所在行的下方,否则,则招贴到当前光标所在处的后方
复制命令(yank,y)
y:复制,工作原理相似与d命令;
y$:
y^:
y0:
ye:
yw:
yb:
yy:复制一整行;#yy:复制#行;
改变命令(change,c)
实现删除操作并转入输入模式;
c$:
c^:
c0:
cb:
ce:
cw:
cc:删除光标所在的行,并转换为输入模式;#cc:删除光标所在处的#行并转换为输入模式;
可视化模式
可用鼠标选定
v:按字符选定;
V:按行选定;
撤销操作
u:撤销此前的操作;#u撤销此前的#个操作;
撤销此前的撤销:ctrl+r
重复前一个编辑操作
.
vim的末行模式
内建的命令行接口
1.地址定界:
#:特定的第#行;例如10即第10行;
.:当前行;
$:最后一行;
#,#:指定行的范围,左侧为起始行,右侧为结束行;
#,+#:指定行的范围,左侧为起始行的绝对编号,右侧为相对左侧行的偏移量;例如3,+7 从第3行起往后数7行;
%:全文;
/pattern/:从光标处起始到文件尾部,第一次被模式所匹配到的行;
/pat1/,/pat2/:从光标处起始,第一次被pat1匹配到的行开始,到第一次被pat2匹配到的行结束之间的所有行;
地址定界符可配合编辑命令一起使用,来实现编辑操作;d;y;c;
w /PATH/TO/SOMEFILE:将范围内的文本保存至指定的文件中;
r /PATH/FROM/SOMEFILE:将指定文件中的文本读取并插入指定的位置;
2.查找并替换
s:末行模式下的命令 使用格式:
s/要查找的内容/替换为的内容/修饰符
在这里查找的内容可以使用正则表达式,但是替换为的内容不能使用正则表达式,但是可以引用
如果“要查找的内容”部分在模式中使用分组符号:在“替换为的内容”中使用后向引用;直接引用查找模式匹配到的全部文本,要使用&符号;
修饰符:
i:忽略大小写;
g:全局替换,意味着一行中如果多次匹配则都替换
这里的分隔符我们可以把它换成其他非常用的字符如:s@@@;s###
vim的多文件功能
vim FILE1 FILE2 …..
在文件间切换:
:next 下一个
:prev 上一个
:fiest 第一个
:last 最后一个
退出所有文件:
:wqall 保存并退出
:wall 保存所有
:qall 退出所有
多窗口:
-o:水平分割窗口;
-O:垂直分割窗口;
在窗口间切换:Ctel+w
单个文件也可以切割成多个窗口查看;
Ctrl+w,s:水平分割窗口;
Ctel+w,v:垂直分割窗口;
定制vim的特性
这里的特性如在末行模式下设定的话只会对当前vim进程有效
永久有效:
全局:/etc/vimrc
个人用户:~/.vimrc
1.行号
显示:set number,简写为set nu
取消显示:set nomber简写为set nonu
2.括号匹配高亮
启用:set showmatch;简写为set sm
取消:set nosm
3.自动缩进
启用:set ai
禁用:set noai
4.高亮搜索
启用:set hlsearch
禁用:set nohlsearch
5.语法高亮
启用:syntax no
禁用:syntax off
6忽略字符大小写
启用:set ic
禁用:set noic
获取帮助:
:help
:help subject
练习:
1、复制/etc/grub2.cfg文件至/tmp目录中,用查找替换命令删除/tmp/grub2.cfg文件中以空白字符开头的行的行首的空白字符;
%s@^[[:space:]]\+@@
2、复制/etc/rc.d/init.d/functions文件至/tmp目录中,用查找替换命令为/tmp/functions文件的每个以空白字符开头的行的行首加上#;
%s@^[[:space:]]\+[^[:space:]]@#&@g
3、为/tmp/grub2.cfg文件的前三行的行首加上#号;
4、将/etc/yum.repos.d/CentOS-Base.repo文件中所有的enabled=0替换为enabled=1,所有gpgcheck=0替换为gpgcheck=1;
%s@\(enabled\|gpgcheck\)=0@\1=1@g
原创文章,作者:N24-执念,如若转载,请注明出处:http://www.178linux.com/64339