在linux系统中,常用的文本编译器有三种 ,vi,emacs和gedit。vi是应用最广的文本编译器。emacs和gedit都是图形化的文本编译工具,但是emacs的应用越来越少。不管是嵌入式系统还是在linux服务器系统中,不管是本地操作还是网络终端控制,vi都是最方便的编辑工具。
Vi是visual interface的简称。vi是一个功能强大的文本编辑工具,它可以执行输出、删除、查找、替换、块操作等众多文本操作,而且用户可以根据自己的需要对其进行定制。
如果要启动vi,直接使用"vi 文件名"即可,例如要打开hello.c文件,则输入下面的命令即可,
vi hello.c
如果hello.c不在当前目录下,就创建该文件 。启动vi时还有一个中看不中用的功能:如果输入 vi +2 hello.c ,则启动之后就自动跳转文件的第二行。这个其实没什么用,除非你对要操作的文件非常熟悉。但是还有一个不过的用法
vi +/int hello.c此时,vi打开文件之后将自动跳转到第一个出现int的位置。
如果要退出vi时,可以使用以下几种方法:
1.简单退出
在命令模式下,连按两次大写字母Z,或者在末行模式下输入命令:
:x
2.保存新文件退出
在末行模式下输入命令
:w
:w newfile
如果newfile是一个已经存在的文件,则上面会出现“文件已经存在”错误提示,此时可以使用下面的命令来覆盖newfile文件,或者更换新名称:
:w! newfile
如果文件没有编辑过,在末行模式下输入下面的命令就可以直接退出。
:q
:q!4.保存退出
在末行模式下输入下面的命令,则可以保存文件并退出
vi有三种模式,或者说三种状态,命令模式,文本输入模式和末行模式。其实给了这样三个名字更容易让人糊涂,下面举一个例子,
vi hello.c,此时打开了文件 hello.c文件,但此时确不能输入需要的文本信息;输入i,再输入经典的hello world 程序就能输入进去了,这就是文本输入模式,文件输入完毕后,按[ESC]键就退出编辑状态。如果想保存信息并退出,则输入:wq,你会发现输入的这几个字符跳到终端最后一行,然后敲击“enter”键就退出了,上述三种状态其实就分别对应了命令模式、文本输入模式和末行模式。
1.命令模式
在vi中,无论用户处于何种状态,按下[ESC]键就使vi进入了命令模式。shell环境下启动vi编辑器时,也处于命令模式下。
在命令模式下,用户可以根据输入各种合法的vi命令,管理自己的文档。此时从键盘上输入的任何字符都被当做编辑命令来解释。如果输入的字符是合法的字符,则vi在接收之后就完成相应的动作,例如,假如此时输入i则进入了文本输入模式,而如果输入:wq就将当前内容保存并退出了,如下图所示。
2.文本输入模式
文本输入模式就是接收用户输入的字符的意思。对于用惯了图形化文本编辑器的人而言,刚开始使用vi的确是一大痛苦。如果要掌握linux系统,这是必须要过的坎。
在命令模式下切换到文本输入模式的方法有三种:
(1)新增内容的命令(append)
按下字母a:从光标所在的位置后面开始新增内容,光标后的内容随着新增内容向后移动。
按下字母A:从光标所在行最后面的地方开始新增内容。
(2)插入内容的命令(insert)
按下字母i键,从光标所在位置前面开始插入内容 ,光标后的内容随着改变。
按下字母I键:从光标所在行的第一个非空白字前面开始插入内容。
(3)开始(打开)命令(open)
按下字母o键:在光标所在行的下方新增一行并进入文本输入模式。
按下字母O键:在光标所在行的上方新增一行并进入文本输入模式。
(4)删除文本
如果在输入过程中出现错误,想输入删除命令,则必须先按[Ecs]退到命令行模式,输入删除的命令,完成删除之后再进入文本输入模式操作,否则vi会变成不听话的狗。删除的命令有:
删除单个字符:
x:删除光标处的字符。若在x前加上一个数字n,则删除从光标所在位置开始向右的n个字符。
X:删除光标前面的那个字符,若在X之前加上一个数字n,则删除从光标前面那个字符开始向左的n个字符。
删除多个字符:
dd:删除光标所在的整行
D或d$:删除从光标所在处开始到行尾的内容。
(5)取消修改或删除
取消上一条命令是非常有用的命令,它可以取消上一次的误操作或者不合适的操作对文件造成的影响,使之恢复到之前的状态。命令模式下键入字符“u”或“U”,不同之处是U仅仅取消前一步的操作, 如果按了两次U,相当于什么都没做。而u则是把当前行恢复成被编辑前的状态,而不管此行被编辑了多少次。
除此之外,通过修改命令c,取代命令r,替换命令s都可以进入文本输入模式。在该模式下,用户输入的任何字符都被vi当做文件内容保存下来,并显示在屏幕上,如果要退出,直接按[ESC]键。
正是因为很多字母有其特殊的含义,如果打开文件之后就急着输入内容,可以看不到自己想要的结果,vi终端会和你急的。
3.末行模式(last line mode )
在命令模式下,用户按下“:”就进入了末行模式。此时vi会显示窗口的最后一行,通常也是在屏幕或者终端的最后一行。显示一个“:”作为末行的提示符,等待用户输入命令。多数文件管理命令都是在此模式下执行的。如上图所示
如果要从命令模式切换到文本输入模式,可以根据上面(2)中的说明键入相应的命令即可。如果要从文本模式提出,按[Esc]键。
另外还有三个非常有用的命令:
:set nu 显示行号
:set nonu 取消行号
:/待查找的字符串,可以自动定位到要查找的