Linux中文本编辑器有很多,例如gedit、kwrite、OpenOffice、vi和vim等,但是文本模式下的编辑器只有vi和vime两种,其它都属于图形模式的编辑器。
vi是Linux操作系统中最经典的文本编辑器,它是最基本的文本编辑工具,它只能编辑字符,不支持对字体、段落进行排版。虽然vi的操作方式与其他常用的文本编辑器不相同,但是由于其运行字符界面,并可以用于所有Linux环境中,故被经常使用。
vim是从vi发展出来的升级版文本编辑器,它除了拥有vi文本编辑器的功能外(即vim操作方式与vi操作方式一样),还提供了关键字高亮显示,可主动以字体颜色辨别语法的正确性,为程序开发者提供了极大的便利。
vi/vim提供了命令模式、插入模式和可视模式三种模式。
1、命令模式(Command)
命令模式是启动vi后进入的工作模式,它可以可以转换为插入模式和最后行模式。在命令模式下,从键盘上输入的任何字符都被当作编辑命令来解释,而不会在屏幕上显示,如果输入的字符是合法的vi命令,则vi就会完成相应的动作。
按照使用用途不同,可以将命令模式分为以下命令。
1)移动光标
↓:将光标向下移动一行。
↑:将光标向上移动一行。
←:将光标向左移动一个字符。
→:将光标向右移动一个字符。
PgUp:将光标向上移动一屏。
PgDn:将光标向下移动一屏。
0:将光标移动到当前行首。
Shift + 4:即$,用于将光标移动到当前行尾。
Shift + g:即G,用于将光标移动到最后一行。
gg:用于将光标移动到第一行。
2)搜索与替换
/word:从光标开始,向下查询一个名为word的字符串。
:1,3s/word1/word2/g:在第1行与第3行之间寻找word1字符串,将将该字符串替换为word2。其中1,3为查找范围,1为起始行,3为结束行,范围可根据自己需求自定义,如图1所示。
1,$s/word1/word2/g:从第一行到最后一行寻找word1字符串,并将该字符串替换为word2。
1,$s/word1/word2/gc:从第一行到最后一行寻找word1字符串,并将该字符串替换为word2,在替换时提示用户是否需要替换。
图1 替换字符串
3)删除、复制、粘贴
x:向后删除一个字符,类似Delete键。
X:向前删除一个字符,类似Backspace键。
dd:删除光标所在的那一整行。
3dd:删除从光标开始,向下3行,其中数字3为需删除的行数,可根据具体要求改变行数。
yy:复制光标所在的那一行。
3yy:复制光标所在的向下3行,数字可根据具体要求改变行数。
p:小p,将已复制的数据粘贴到光标的下一行。
P:大P,将已复制的数据粘贴到光标的上一行。
u:复原前一个操作。
4)保存
:w:将编辑的数据写入硬盘。
:q:离开文本编辑器。
:q!:强制离开文本编辑器,不保存数据。
:wq:存储数据到硬盘后离开文本编辑器。
:wq!:强制存储数据到硬盘后离开文本编辑器。
2、插入模式(Insert)
插入模式又称为文本编辑模式,用于字符编辑。在命令模式下输入i(当前位置前插入)、a(当前位置后插入)等命令后进入文本编辑模式,此时输入的任何字符都被vi当作文件内容显示在屏幕上。按Esc键可以从文本编辑模式返回到命令模式。
a:在光标所在处最面插入文字。
i:在光板所在处前面插入文字。a与i的区别如图2所示。
图2 进入编辑状态
o:在当前光标所在处的下一行处插入新的一行。
O:在当前光标所在处的上一行处插入新的一行。
r:替换所在的那一个字符。
R:一直替换光标所有的字符,类似Insert键功能。
Esc:进入命令模式。
3、可视模式(Visual)
可视模式能让你选择文件的一部分内容,以便作删除、复制等工作。
1)进入可视模式
进入可视模式后,当光标移动时,就能看到一些文本被选中。进入可视模式有三种方式:
v方式,一个字符一个字符的选中。当按下v字符起,一直到光标所移动到的位置之间的内容都被选中,如图3所示:
图3 v方式
V方式,一行一行地选中。当按下V字符起,一直到光标所移动到的行之间的所有行都被选中,如图4所示。
图4 V方式
Ctrl+v方式,它选中屏幕上的一个矩形区域,以按下Ctrl+v的位置为一个角,光标所在位置为它的对角,如图5所示。
图5 Ctrl+v
2)离开可视模式
当按下相应命令后即可离开可视模式,当然相应命令也有它各自的功能。
d:只删除所选中的部分
D:删除所选中部分所在的行,即在同行中但未被选中也会被删除。
v:切换视图模式为v模式,即选中文本时一个字符一个字符的选中。
V:切换视图模式为V模式,即选中文本时一行一行的选中。
c:删除所选中的部分文本后,切换到输入模式。
C:删除选中的所在行后,切换到输入模式。
J:合并行。当选中的行想要合并在一行时,可以使用J合并行,下一行文本将自动的接入上一行文本后。
>:所选中的部分全部缩进一个Tab
<:所选中的部分全部缩进一个Shift + Tab