RHCE9学习指南 第5章 vim编辑器

在Linux中,很多时候需要使用编辑器来修改文件,使用最多的编辑器就是vim。用法如下。
vim /path/file
如果这个文件不存在,则会在内存中创建出来,如同在Windows下单击【开始】->【所有程序】->【记事本】的功能相同,只是在内存中打开,并没有存储在硬盘上。如果文件存在,则把此文件打开。
环境准备的命令如下。

[tom@server ~]$ head /etc/passwd > aa.txt
[tom@server ~]$

先创建出来一个测试文件aa.txt,这句话的意思是把/etc/passswd前十行的内容写入aa.txt中。
然后执行vim aa.txt打开此文件,界面如下图所示。
file
此时会发现这里按【Enter】键,不会产生空白行,按【Backspace】键也不会删除任何字符,即现在无法编辑。这里就涉及了vim的三种模式。

5.1 插入模式

用vim打开文件时,是在命令模式下,如果想修改文件内容,需要进入插入模式。从命令模式切换到插入模式,有6个常见的字符。
(1)i 从当前光标所在字符插入。
(2)a 从当前光标的后一个进入插入。
(3)o 在当前所在行的下一行产生一个空白行并进入插入模式。
(4)I 光标跳到本行的开头,并进入插入模式。
(5)A 光标跳到本行的结束,并进入插入模式。
(6)O 在当前行的上一行产生一个空白行并进入插入模式。
用上下左右键调整光标到合适的位置之后,例如,下图所示,把光标放在r的位置。
file
按i进入插入模式,如下图所示。
file
此时可以看到,光标仍然是在r上面的(这就叫作从当前光标所在字符插入),左下角显示为“插入”或“insert”, 此时就进入插入模式了。
然后可以通过上、下、左、右键调整位置对文件进行修改,例如,修改成下图所示的内容。
file
当修改完毕之后需要对文件进行保存,在插入模式下是没法保存的,必须要进入末行模式才可以。需要按键盘上的【Esc】键退回到命名模式,然后从命令模式进入末行模式,如下图所示。
file

5.2 末行模式

从命令模式进入模式有两种方式。

  1. /关键字
    这种一般用于在文件中查询所有的关键字,如果想忽略大小写可以用"/关键字\c"
    例如,像在passwd中查询所有的root,先按/,在后面输入“root”,如下图所示。
    file
    此刻会高亮所有的关键字root,不过可以看到ROOT和Root并没有显示出来,因为在Linux中大小写是严格区分的,如果想忽略大小写,可以写成/root\c,,如下图所示。
    file
    此时可以到大小写都能找到了。
    但是此时被高亮的关键字以后会一直被高亮,如果想去掉,可以随意输入一个字符串,如下图所示。
    file
    然后按【Enter】键,如下图所示。
    file
    这些高亮的印迹就没有了,下面“E486:找不到模式”的提示可以忽略,如果看着不舒服,可以按下/然后再按【Backspace】键,就可以取消。
  2. 在命令模式下按冒号
    在命令模式下按冒号,如下图所示。
    file
    这里可以执行各种操作,总结如下。
    (1)保存但不退出:w。
    (2)保存退出:wq。
    (3)保存退出:x(小写)。
    (4)另存为:w /path/new-name。
    (5)加载其他文件: r /path/text-file。
    (6)显示行号: set nu,如下图所示。
    file
    (7)去除行号:set nonu。
    (8)切换行:数字,这样光标可以快速切换到指定的行。
    (9)替换操作:语法如下。

    s/old/new/

    把当前光标所在行的old换成new,如果想忽略old的大小写可以写成old\c,这里/是分隔符。
    练习:请自行把光标调整到第1行,并修改成下图所示。
    file
    把root换成RHCE,如下图所示。
    file
    按【Enter】键查看内容,如下图所示。
    file
    可以发现,只是第一行(光标在第一行)发生了替换且只替换那行的第一个关键字。如果想把本行所有的关键字全部替换,需要写成 s/old/new/g,这里g的意思是本行全部关键字。
    此时按u执行撤销操作,然后把本行所有的、不管大小写的root全部替换成RHCE,如下图所示。
    file
    按【Enter】键后看第一行的内容,如图5-16所示。
    按u执行撤销操作。
    此时替换操作只是替换当前光标所在行,如果想替换指定的一些行,语法可以写成

    m,ns/old/new/g

    意思是从m行到n行中的old全部替换成new。假设现在想把第1行到第7行的不管大小写root全部替换成RHCE,做如下替换,如下图所示。
    file
    按【Enter】键后的效果如下图所示。
    file
    按u撤销。
    这里还可以用$表示最后一行,对应的$-1表示倒数第二行,以此类推。
    例如,想把从第2行到倒数第2行中所有的root(不管大小写)替换成RHCE,写法如下图所示。
    file
    按【Enter】键查看效果,然后按u撤销。
    如果想全文替换,可以写成:

    1,$s/old/new/g

    这里1,$是从第一行到最后一行 就是表示全文的意思了,还可以直接用%表示全文,即

    %s/old/new/g

    替换完成之后,请自行按u撤销。
    刚才替换时用的是/作为分隔符,但如果关键字中就含有/,则很容易出错,例如,把第一行的/root换成RHCE,如果写成:s//root/RHCE/g,则会报错,因为我们希望按照下面的规则替换。

    :s//root/RHCE/g

    但是它会把前面三个/作为分隔符,后面的字符是多余的。

    :s//root/RHCE/g

    所以,会报错,为了防止/root中的/当成分隔符,我们可以用转义符,如下所示。

    :s/\/root/RHCE/g

    这样就不会把/root的/当成分隔符了,但是这样写,看起来过于复杂。其实我们不一定非得用/作为分隔符,使用其他分隔符也是可以的如#,这样替换操作就可以写成如下所示的命令。

    :s#/root#RHCE#g

    5.3 命令模式

    要想从末行模式切换到命令模式只要按两次【Esc】键即可,如下图所示。
    file
    一开始在命令模式下无法做具体的操作(无法删除,按【Enter】键也没用),其实在命令模式下也可以做许多操作。
    复制行nyy (n是数字)表示从当前行开始,一共复制n行,如下图所示。
    file
    此时按3yy,就会把6,7,8三行复制下来,如下图所示。
    file
    调整光标到指定的行之后,按p执行粘贴,例如,这里在第10行即shutdown那行按p,如下图所示。
    file
    自行按u进行撤销。
    (1)剪切行。
    ndd (N是数字)表示从当前行开始,一共剪切N行,用法和yy类似。
    但是如果不按p粘贴,则这几行就是删除的意思了。
    如果想把从当前行开始到最后一行全部删除,方法按dG或随便按一个比较大的数字,然后按dd,如9999dd。
    (2)删除字符。
    在光标所在的字符位置,按x,就可以删除此字符。如果想删除当前光标往后虽有的字符,可以按一个比较大的数字,然后按x,如9999x
    (3)定位行。
    nG(此处n为数字)光标跳到第n行。
    如果想切换到最后一行,直接按G。
    如果想跳到第一行,直接按gg。
    (4)替换。
    如果想替换当前光标的字符,先按r,然后按所要替换的字符就可以了。
    例如,当前光标是在a上,如下图所示。
    file
    此时按一下r,再按一个9,这样就可以把a替换成了9,如下图所示。
    file
    按小写的r只是做一次替换,如果想再替换其他字符,还需要按r才行。如果想一直处于替换状态,则需要按大写字母R,这样当替换当前字符之后,光标会跳到下一个字符处于替换状态,我们可以通过调整光标来替换所要替换的字符,直到按【Esc】键结束。
    (5)撤销。
    如果编辑错了,可以按u进行撤销,类似于Word中撤销操作。
    (6)前进。
    前进符,按【Ctrl+R】组合键。

作业

  1. 如果想让所有用户在用vim编辑器打开文本文件时都显示行号,请问该编辑如下哪个文件?
    a. ~/.vimrc
    b. ~/etc/vimrc
    c. /etc/vimrc
    d. /etc/profile

  2. 在vim打开的某文件中,使用如下哪个命令可以把全文所有的old替换成new?
    a. :%s/old/new/g
    b. :%r/old/new/
    c. :s/old/new/g
    d. r:/old/new

  3. 使用vim打开文件myfile.txt,现在想把从当前行开始算,一共4行删除,在键盘上按什么键可以实现?
    a. 4dd
    b. 4xx
    c. 4esc
    d. 4del

  4. 如果想让所有用户在用vim编辑器打开文本文件时都显示行号,请问该编辑如下哪个文件?
    a. ~/.vimrc
    b. ~/etc/vimrc
    c. /etc/vimrc
    d. /etc/profile

相关新闻

                                                                                                                                    RHCE9学习指南连载,点击阅读