1、为什么要学习vi

    总结了一下学习Vi的原因,就个人而言,最初的想法就是可以装b,简单粗暴;后来在一些小小的实践中发现这个文本编辑器很有意义,尤其在面对没有图形化界面的系统时,我们必须要掌握这项技术!(例如ssh远程操作...)

2、启动和停止vi

    想要启动vi,只要在命令行直接输入vi即可。

devil@devil-pc ~ $ vi

    如果运行无误,应该会出现类似如下界面

...VIM - Vi IMproved


    接下来要做的就是退出vi,命令也是很简单的,在命令行输入:q即可

:q

    如果在途中对文件有了一些操作,并且不想保存这些操作,那么就需要在q后面再加上!即可

:q!

3、编辑模式

    知道了如何启动和退出vi,下面就开始操作文本,再次启动vi,输入如下

devil@devil-pc ~ $ vi testVi.txt

    我们会打开一个名为testVi.txt的文件,如果存在的话;如果文件不存在,那么会创建文件(最后如果保存的话)。出现类似如下界面

~ 
~                                                                                                         
~                                                                               
"testVi.txt" [New File]                               0,0-1         All

    里面“~”表示当前行没有任何文本。

    是否现在就可以开始输入了呢,很明显是不可以的。我们还需要知道vi的三个模式:命令模式、编辑模式、底线命令模式(也许可以和命令模式划分在一起)。当我们用vi打开一个文本时,进入的就是命令模式,在这个模式下,是无法直接输入的,并且几乎每一个键都是一个命令,随便输入的话,就会超乎你想象!

(1)进入编辑模式

    进入插入模式的方法有三个:i命令、a命令、o命令。三个命令中,根据大小写不同,效果也是不同的


i
在当前字符前插入文本
I在当前行首插入文本
a在当前字符后插入文本
A在当前行末插入文本
o在当前行后面插入一行
O在当前行前面插入一行



    基本上,面对一个空的文本,我们直接按i插入就可以了,按下i后,我们可以看到如下所示效果

-- INSERT --

    我们可以添加一段话进去了,如下

I hava a dream!

    (关于a命令和o命令在这里就不进行测试了,读者可以自行测试)

(2)保存文本

    前面已经提到了如何退出vi,下面介绍如何保存文本。首先,我们需要进入命令模式,很简单,我们只需要按ESC键;然后,输入”:w 

:w

    按下回车,如果正常,那么应该会出现如下消息。

"testVi.txt" 1L, 16C written

4、命令模式

(1)移动光标

    在命令模式下,提供了很多的光标的移动方法,有了这些方法,我们就可以更加迅速的定位到我们想要去的文本的位置,无需借用鼠标。

l or 右键头
向右移动一个字符
h or 左箭头
向左移动一个字符
j or 下箭头
向下移动一行
k or 上键头
向上移动一行
0移动到当前行首
^移动到当前行的第一个非空字符
$移动到当前行的末尾
w移动到下一个单词或标点的开头
W移动到下一个单词的开头,忽略标点
b
移动到上一个单词或标点的开头
B移动到下一个单词的结尾,忽略标点
number+G
移动到第number行
G
移动到文件的末尾

(2)删除文本

    在vi中,删除文本要在命令模式下操作

x
删除当前字符
number+x
删除当前字符和后面的number-1个字符
dd删除当前行
number+dd删除当前行和后面的number-1行
dW
删除从光标开始位置到下一个单词的开头
d$
删除从光标开始位置到当前行的结尾
d0删除从光标开始位置到当前行的行首

    d命令后加上的移动命令,可以用来控制删除的范围。

(3)剪切、复制和粘贴

    剪切:剪切的命令其实就是d命令,删除的同时,会把文本放入一个粘贴缓冲区中

    复制:y命令,基本完全同d命令,可以连按两次复制当前行,也可以在后面加上移动命令,进行控制复制的范围

    粘贴:p命令把粘贴缓冲区中的文本粘贴到光标后面,P命令把文本粘贴到光标之前

(4)撤销操作

    在命令模式下,如果误删了什么或者做了什么错误操作,可以通过u命令进行撤销操作。

(5)合并行

    想要将两行的内容合并到一行,那么需要通过J命令来完成(大写,小写的是移动光标),例如有如下文本

I have a dream!

    我们想要将两行文本合并,只需要将光标放到第一行,然后按下J,就可以看到如下效果(命令模式下)

I have a dream!

(6)查找和替换

    单行查找:f + 所查找字符,即可将光标移动到当前行中的所查找的字符中

    查找整个文件:/ + 所查找文本,回车进行查找

    在查找时,可能有很多匹配项,直接查找到的是光标后的第一个匹配项,如果还需要继续查找,使用n命令来重复之前的操作

    替换:替换的语法为  :a,bs/old/new/参数(g,c)    这里的a,b是控制范围,从第a行到第b行,如果不写的话,那么就对当前行生效;s是必须要写的,表示替换操作;/old/new将old替换为new;最后的参数,如果不加,那么只替换每行文本的第一个匹配项,g选项是对所有的都替换,c选项是给出用户提示,当找到匹配项时是否要执行替换,举例如下,有当前文本

    no.1
    no.2
    no.3
    no.4

    现在将前三行的no执行替换,换成number,输入命令

    :1,3s/no/number/gc

    会出现如下提示

    replace with number (y/n/a/q/l/^E/^Y)?

    y:直接替换;

    n:跳过当前;

    a:对当匹配项后面的所有执行替换;

    q:退出

    l:执行这次替换并退出

    这里直接输入a即可,结果如下

    number.1
    number.2
    number.3
    no.4

5、同时编辑多个文件

    在vi中,还允许同时编辑多个文件,命令如下

    devil@devil-pc ~ $ vi testVi.txt testVi2.txt

    这样,我们就同时打开了两个文件,一个是testVi.txt另一个是testVi2.txt,可是界面上只显示了一个文件的,我们需要借助命令进行文件的切换,如下,当前显示的是testVi.txt

    Hello                                                                           ~                                                                               ~                                                                               "testVi.txt" 1L, 7C                                           1,1           All

    我们要进行切换,要借助到“:n ”和“:N ”,n是切换到下一个文件,N是切换到上一个文件,我们切换到下一个文件,那么需要这样

    :n

    会切换到下一个文件,显示如下

    Linux~                                                       ~                                                                   "testVi2.txt" 1L, 6C                                          1,1           All


    除了上述的切换方法外,我们还可以更好的切换,如果文件很多的情况,我们可以用“:buffers ”来显示所有的文件,并用buffer + num 切换到要编辑的文件,如下

    :buffers  
        1 #    "testVi.txt"                   line 1  
        2 %a   "testVi2.txt"                  line 1
    Press ENTER or type command to continue


六、小结

    本文总结了一些基本的vi操作,可能还有一些别的功能没有提及到,但是就目前这些只要可以完全掌握,熟练运用,想必也能处理我们日常的大部分问题了,最后附一张网络上的图,帮助大家更好的学会使用vi

vi 基本命令学习_linux