在Linux中,很多时候需要使用编辑器来修改文件,使用最多的编辑器就是vim。用法如下。
vim /path/file
如果这个文件不存在,则会在内存中创建出来,如同在Windows下单击【开始】->【所有程序】->【记事本】的功能相同,只是在内存中打开,并没有存储在硬盘上。如果文件存在,则把此文件打开。
环境准备的命令如下。
[tom@server ~]$ head /etc/passwd > aa.txt
[tom@server ~]$
先创建出来一个测试文件aa.txt,这句话的意思是把/etc/passswd前十行的内容写入aa.txt中。
然后执行vim aa.txt打开此文件,界面如下图所示。
此时会发现这里按【Enter】键,不会产生空白行,按【Backspace】键也不会删除任何字符,即现在无法编辑。这里就涉及了vim的三种模式。
用vim打开文件时,是在命令模式下,如果想修改文件内容,需要进入插入模式。从命令模式切换到插入模式,有6个常见的字符。
(1)i 从当前光标所在字符插入。
(2)a 从当前光标的后一个进入插入。
(3)o 在当前所在行的下一行产生一个空白行并进入插入模式。
(4)I 光标跳到本行的开头,并进入插入模式。
(5)A 光标跳到本行的结束,并进入插入模式。
(6)O 在当前行的上一行产生一个空白行并进入插入模式。
用上下左右键调整光标到合适的位置之后,例如,下图所示,把光标放在r的位置。
按i进入插入模式,如下图所示。
此时可以看到,光标仍然是在r上面的(这就叫作从当前光标所在字符插入),左下角显示为“插入”或“insert”, 此时就进入插入模式了。
然后可以通过上、下、左、右键调整位置对文件进行修改,例如,修改成下图所示的内容。
当修改完毕之后需要对文件进行保存,在插入模式下是没法保存的,必须要进入末行模式才可以。需要按键盘上的【Esc】键退回到命名模式,然后从命令模式进入末行模式,如下图所示。
从命令模式进入模式有两种方式。
s/old/new/
把当前光标所在行的old换成new,如果想忽略old的大小写可以写成old\c,这里/是分隔符。
练习:请自行把光标调整到第1行,并修改成下图所示。
把root换成RHCE,如下图所示。
按【Enter】键查看内容,如下图所示。
可以发现,只是第一行(光标在第一行)发生了替换且只替换那行的第一个关键字。如果想把本行所有的关键字全部替换,需要写成 s/old/new/g,这里g的意思是本行全部关键字。
此时按u执行撤销操作,然后把本行所有的、不管大小写的root全部替换成RHCE,如下图所示。
按【Enter】键后看第一行的内容,如图5-16所示。
按u执行撤销操作。
此时替换操作只是替换当前光标所在行,如果想替换指定的一些行,语法可以写成
m,ns/old/new/g
意思是从m行到n行中的old全部替换成new。假设现在想把第1行到第7行的不管大小写root全部替换成RHCE,做如下替换,如下图所示。
按【Enter】键后的效果如下图所示。
按u撤销。
这里还可以用
表示最后一行,对应的
表示最后一行,对应的
表示最后一行,对应的-1表示倒数第二行,以此类推。
例如,想把从第2行到倒数第2行中所有的root(不管大小写)替换成RHCE,写法如下图所示。
按【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
要想从末行模式切换到命令模式只要按两次【Esc】键即可,如下图所示。
一开始在命令模式下无法做具体的操作(无法删除,按【Enter】键也没用),其实在命令模式下也可以做许多操作。
复制行nyy (n是数字)表示从当前行开始,一共复制n行,如下图所示。
此时按3yy,就会把6,7,8三行复制下来,如下图所示。
调整光标到指定的行之后,按p执行粘贴,例如,这里在第10行即shutdown那行按p,如下图所示。
自行按u进行撤销。
(1)剪切行。
ndd (N是数字)表示从当前行开始,一共剪切N行,用法和yy类似。
但是如果不按p粘贴,则这几行就是删除的意思了。
如果想把从当前行开始到最后一行全部删除,方法按dG或随便按一个比较大的数字,然后按dd,如9999dd。
(2)删除字符。
在光标所在的字符位置,按x,就可以删除此字符。如果想删除当前光标往后虽有的字符,可以按一个比较大的数字,然后按x,如9999x
(3)定位行。
nG(此处n为数字)光标跳到第n行。
如果想切换到最后一行,直接按G。
如果想跳到第一行,直接按gg。
(4)替换。
如果想替换当前光标的字符,先按r,然后按所要替换的字符就可以了。
例如,当前光标是在a上,如下图所示。
此时按一下r,再按一个9,这样就可以把a替换成了9,如下图所示。
按小写的r只是做一次替换,如果想再替换其他字符,还需要按r才行。如果想一直处于替换状态,则需要按大写字母R,这样当替换当前字符之后,光标会跳到下一个字符处于替换状态,我们可以通过调整光标来替换所要替换的字符,直到按【Esc】键结束。
(5)撤销。
如果编辑错了,可以按u进行撤销,类似于Word中撤销操作。
(6)前进。
前进符,按【Ctrl+R】组合键。
如果想让所有用户在用vim编辑器打开文本文件时都显示行号,请问该编辑如下哪个文件?
a. ~/.vimrc
b. ~/etc/vimrc
c. /etc/vimrc
d. /etc/profile
在vim打开的某文件中,使用如下哪个命令可以把全文所有的old替换成new?
a. :%s/old/new/g
b. :%r/old/new/
c. 😒/old/new/g
d. r:/old/new
使用vim打开文件myfile.txt,现在想把从当前行开始算,一共4行删除,在键盘上按什么键可以实现?
a. 4dd
b. 4xx
c. 4esc
d. 4del
如果想让所有用户在用vim编辑器打开文本文件时都显示行号,请问该编辑如下哪个文件?
a. ~/.vimrc
b. ~/etc/vimrc
c. /etc/vimrc
d. /etc/profile