首页 > 代码库 > vi 和vim的区别

vi 和vim的区别

vivim区别:
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   (120行,查找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      (需要保存)

 


本文出自 “11628205” 博客,请务必保留此出处http://11638205.blog.51cto.com/11628205/1863269

vi 和vim的区别