vi和vim区别:
vi :visual interface
vim:vi improved, vim
它们都是多模式编辑器,不同的是vim 是vi的升级版本,它不仅兼容vi的所有指令,而且还有一些新的特性在里面。
[root@localhost ~]# which vi
/bin/vi
[root@localhost ~]# which vim
/usr/bin/vim
模式化编辑器:
编辑模式(命令模式):x , dd
输入模式:x , dd
末行模式:q!
进入文件让光标处于指定的行:
Vim +# smb.conf
例子:
[root@localhost ~]# vim +10 smb.conf (光标在第10行)
[root@localhost ~]#
进入文件让光标处于末行:
Vim + smb.conf
例子:
[root@localhost ~]# vim + smb.conf (光标在末尾)
[root@localhost ~]#
模式转换:
编辑模式-----à输入模式:
i : 在当前光标所在前面插入。
a :在光标所在后面插入。
o :在光标所在新插入一行。
I :在当前光标所在行行首插入。
A :在当前光标所在行行尾插入。
O:在当前光标所在行的上方新增一行插入。
输入模式------编辑模式:
ESC键
编辑模式-------末行模式:
: (冒号)
退出vi:
:q (没改过的退出)
:q! (强行不保存退出)
:wq (保存退出)
:w (保存不退出)
:w! (强行保存不退出,只有root可以)
ZZ (大写ZZ,保存退出)
光标的跳转:
h :光标向左。 (5h:向左5个字符移动)
l :光标向右。 (8l:向右8个字符移动,小写L,不是I)
j :光标向下一行跳转。 (6j:移到下6行)
k :光标向上一行跳转。 (7k:向上移动7行)
在单词间跳转:
w :下一个单词的词首。
#w :一下跳几个单词。 (#代表数字, 3w :跳3个单词。)
e :跳到下一个单词的词尾。
b :跳到前一个单词的词首。
在行内跳到行尾,行首:
^ 行首(跳到这一行第一个字符行首。)
0 行首 (跳到绝对行首,空白也算行首。)
$ 行尾
在行间跳转:
gg :跳到文档的第一行。
#G (1 G,跳到文档第一行,5G:跳到第5行。)
G :跳到文档最后一行。
在末行模式下:
:# (如:10跳到文档第10行。)
翻屏操作:
Ctrl+f : 向后一屏。
Ctrl+b : 向前一屏。
Ctrl+d : 向后半屏。
Ctrl+u : 向前半屏。
删除字符:
x :删除光标所在字符。
#x : 3x删除光标所在处向后的3个字符。
X :删除光标所在前一个字符。
dd : 删除整行。
dw :删除当前光标所在的字符。 (3dw:删除光标所在处向后的3个字符。)
d$ : 删除当前光标到行尾的所有字符。 (包括光标所在字符。)
d0 : 删除当前光标到行首的所有字符。 (不包括光标所在字符。)
#dd : 3dd (删除3行)。
删除10行到第20行:(需要在末行模式下完成。 : )
:10,20d (冒号10逗号20d)
. :表示当前行。
$ :表示最后一行。
+# :表示向下的#行。
例如:
删除当前光标所在行到最后一行:
:.,$d (冒号 点 逗号 美元号 d)
:.,11d (删除当前光标所在行到第11行。)
:20+3d (删除20行之后加上3行,一共删除4行。)
粘贴:
p :粘贴,如果是删除或复制的是整行,在当前光标所在行下方粘贴。
如果是删除单词或行的部分,在当前光标所在处后方粘贴。
P : (大写P)如果是删除或复制的是整行,在当前光标所在行上方粘贴。
如果是删除单词或行的部分,在当前光标所在处前方粘贴。
复制:(用法和d删除命令一样)
yy : 复制整行。
yw : 复制当前光标所在的字符。 (3yw:复制光标所在处向后的3个字符。)
y$ : 复制当前光标到行尾的所有字符。 (包括光标所在字符。)
y0 : 复制当前光标到行首的所有字符。 (不包括光标所在字符。)
#yy : 3yy (复制3行)。
撤销编辑操作:
u : 撤销上一次编辑操作。
Ctrl+r : 撤销最后的撤销操作。(u撤销撤销撤多了,按ctrl+r还原最后一次撤销。)
可视化模式:
相当于word中用鼠标按住左键拖一大片删除或复制的方式:
v : 按字符选取,左右键选择到哪里,按d删除或按y复制。
V: 按行选取。
搜索:
/keyword :从上到下查找。
?keyword :从下到上查找。
n键:查到下一个。
N :往回查找。
查找并替换:同sed应用
在末行模式下使用s命令
:定界s/查找的内容/替换成的内容/gi
查找的内容:支持正则表达式。
替换成的内容:不支持正则表达式,但可使用前向引用。
例子:
:1,20s/uname/UNAME/gi (1到20行,查找uname并替换UNAME,gi全局)
:.,$-1s/5/999999/g (从当前行到最后一行减去1行中的5替换成999999全局替换)
:%s/zhang1/zhangdawei/g (替换每一行中zhang1成为zhangdawei ,:百分号s)
修饰符:
g :全局替换。
i :查找时忽略字符大小写
如何使用vi打开多个文件:
[root@localhost ~]# vi rc.sysinit inittab
此时默认打开第一个文件rc.sysinit,可以按yy复制一行。
如何把在rc.sysinit里面复制的内容粘贴到inittab中:在末行模式下输入 :next
可以打开多个文件:
[root@localhost ~]# vi rc.sysinit inittab abc
文件的切换说明:
在末行模式下输入 :next (表示切换下一个文件)
:prev (表示切换前一个文件)
:last (表示切换至最后一个文件)
:first (表示切换至第一个文件)
退出:
:qa (全部退出)
分屏显示一个文件:
按ctrl+w,松开后按s键 :水平拆分窗口,当前光标在上一屏。把光标移动到下屏按ctrl+w松开后按方向键下。ctrl+w松开方向键上回到上屏。
或:
水平切割:
:split
:split xxx(要打开的文件名)
:new(在新窗口创建文件)
按ctrl+w,松开后按v键 :垂直拆分窗口。
拆分后出去:
:qa (全部退出)
分窗口编辑多个文件:
-o :(小o,水平分割显示)
-O :(大o,垂直分割显示)
[root@en testold]# vim -o inittab grub.conf CentOS-Base.repo (会分三屏显示,上中下,ctrl+w 上下键操作)
如何将另外一个文件的内容填充在当前文件中:
:r 文件路径/文件名
[root@localhost ~]# vim aa (打开aa文件,把b1文件内容添加到aa文件中)
:r /root/testold/b1 (注意:添加aa文件中位置是光标所在行的下面行开始)
在vi模式下进行shell命令操作:
假如需要输入一个路径,但是忘了详细路径,不用退出vi,查看路径的方法:
:!执行命令 (末行模式冒号叹号输入命令)
[root@localhost ~]# vim aa
:!pwd
/root/testold
Press ENTER or type command to continue (按回车继续)
显示行号和关闭行号:(只在当前vi编辑有效)
显示行号:(只是显示行号,和文件内容无关)
:set nu
关闭显示行号:
:set nonu
设定自动缩进:
:set ai
:set noai (取消自动缩进)
[root@localhost ~]# vi aa
zhe shi shou hang. (末行模式:set ai,下面输入光标会自动缩进)
zhangdawei
dwzhang
zhang1
zhang2 (末行模式:set noai退出缩进)
zhe shi suo jin!
当用vim编辑文件时,用到搜索时,搜索到的字符串会有一片颜色高亮显示,如何取消颜色高亮显示:
[root@localhost ~]# vim aa
:set hlsearch (搜索到的颜色显示)
:set nohlsearch (取消搜索到的颜色显示)
用vim编辑脚本时,会有语法高亮,有的文件会有很多种颜色,如何关闭语法高亮?
末行模式下:
:syntax off (关闭语法高亮)
:syntax on (打开语法高亮)
用:set更改只是在本文件编辑时有效,关闭后再打开就无效,如何长期有效?需要在vim配置文件中更改:
vim配置文件有2个:(注意:是vim不是vi,需要用vim打开)
1. /etc/vimrc (全局配置文件,对所有用户有效)
[root@localhost ~]# ll /etc/vimrc
-rw-r--r--. 1 root root 1962 Feb 17 2012 /etc/vimrc
如何让文件打开就有行号:
[root@localhost ~]# vi /etc/vimrc (全局有效)
set nu (随便找个位置加入)
2. /root/.vimrc (用户家目录下vim配置文件,如没有可自己添加)
[root@localhost ~]# vim .vimrc (注意:一定在家目录下建立并且需要是隐藏文件)
set nu
[root@localhost ~]# (用vi打开无效)
vim学习文件,导师,如何学习vim说明文件:
[root@localhost ~]# vimtutor
vi错误问题:
当正编辑文件时,非法退出(断电或者没有:q末行模式正确退出),此时vi进程还在运行,下次打开该文件时会显示:
E325: ATTENTION
Found a swap file by the name ".CentOS-Base.repo.swp"
owned by: root dated: Fri Nov 14 09:51:03 2014
file name: ~root/testold/CentOS-Base.repo
modified: YES
user name: root host name: en.com
process ID: 3541
While opening file "CentOS-Base.repo"
dated: Fri Nov 14 08:54:56 2014
……………………………………………………….
…………………………………………………………
如果出现上述问题,就会在这个文件目录下有相对应的隐形文件.CentOS-Base.repo.swp存在:
[root@localhost ~]# ls –a
CentOS-Base.repo .CentOS-Base.repo.swp inittab .inittab.swp
只要有.swp这样的文件,就代表上次非法退出的,每次打开该文件就会有警告的。
除去打开文件警告信息:
删除.swp文件:(前提要确定文件内容)
[root@en testold]# rm -rf .inittab.swp
再去编辑就不会出现警告信息了!
注意:
此时打开的文件为编辑过没有保存的时期,如何恢复到编辑后非法退出的时期文件:用-r
[root@localhost ~]# vim -r aa
[root@localhost ~]#
如果误删除了文件aa,但是有.aa.swp隐藏文件在,如何恢复误删除的文件:
[root@localhost ~]# vim -r aa
:wq (需要保存)
本文转自信自己belive51CTO博客,原文链接: http://blog.51cto.com/11638205/1863269,如需转载请自行联系原作者