vi 是”Visual Interface” 的简称,它在Linux 上的地位就仿佛Edit 程序在DOS上同样。它能够执行输出、删除、查找、替换、块操做等众多文本操做,并且用户能够根据本身的须要对其进行定制,这是其余编辑程序所没有的。linux
vi 不是一个排版程序,它不象Word 或WPS 那样能够对字体、格式、段落等其余属性进行编排,它只是一个文本编辑程序。shell
vi 没有菜单,只有命令,且命令繁多。限于篇幅,本文只介绍经常使用的命令。windows
Vi 有三种基本工做模式:命令行模式,文本输入模式和末行模式。centos
命令行模式:app
任什么时候候,无论用户处于何种模式,只要按一下“ESC” 键,便可使vi 进入命令行模式;当在shell 环境下输入vi 命令启动vi 编辑器时,也是处于该模式下。编辑器
在该模式下 ,用户能够输入各类合法的vi 命令,用于管理本身的文档。此时从键盘上输入的任何字符都被看成编辑命令来解释,若输入的字符是合法的vi 命令,则vi 在接受用户命令以后完成相应的动做(但需注意的是,所输入的命令并不在屏幕上显示出来)。若输入的字符不是vi 的合法命令,vi 会响铃报警。字体
文本输入模式:命令行
在命令模式下输入插入命令 i、 附加命令a 、打开命令 o、 修改命令c 、取代命令r 或替换命令s 均可以进入文本输入模式。在该模式下,用户输入的任何字符都被vi 当作文件内容保存起来,并将其显示在屏幕上。在文本输入过程当中,若想回到命令模式下,按“ESC” 键便可。文档
末行模式:get
在命令模式下用户按“:” 键便可进入末行模式下,此时Vi 会在显示窗口的最后一行(一般也是屏幕的最后一行)显示一个“:” 做为末行模式的提示符,等待用户输入命令。多数文件管理命令都是在此模式下执行的(如把编辑缓冲区的内容写到文件中等)末行命令执行完后,vi 自动回到命令模式。
若在末行模式下输入命令过程当中改变了主意, 可按“ESC” 键或用退格键将输入的命令所有删除以后,再按一下退格键,便可使vi 回到命令模式下。
在 shell 模式下,键入vi 及须要编辑的文件名,便可进入vi. 例如:
vi example.txt
便可编辑 example.txt 文件.若是该文件存在,则编辑界面中会显示该文件的内容,并将光标定位在文件的第一行;若是文件不存在,则编辑界面中无任何内容。若是须要在进入vi 编辑界面后,将光标置于文件的第n 行,则在vi命令后面加上“+n” 参数便可。例如须要从example.txt 文件的第5 行开始显示,则使用以下命令:
vi +5 example.txt
退出 vi 时,须要在末行模式中输入退出命令“q”。 若是在文本输入模式下,首先按“ESC” 键进入命令模式,而后输入“:” 进入末行模式在末行模式下,可以使用以下退出命令:
:q 直接退出。 若是在文本输入模式下修改了文档内容,则不能退出。
:wq 保存后退出。
:x 同“ wq”。
:q! – 不保存内容, 强制退出。
在末行模式下,输入以下命令。
set number
可以使 vi 在编辑界面中显示行号。
此外 ,在末行模式下,可以使用以下“nu” 命令(number 的简写)来显示光标所在行的行号及该行的内容。
全屏幕文本编辑器中, 光标的移动操做无疑是最常用的操做了。用户只有熟练地使用移动光标的这些命令,才能迅速准确地到达所指望的位置处进行编辑。
vi 中的光标移动既能够在命令模式下,也能够在文本输入模式下,但操做的方法不尽相同。
在文本输入模式下, 可直接使用键盘上的四个方向键移动光标;在命令模式下,有不少移动光标的方法。不但可使用四个方向键来移动光标,还能够用h 、j、 k、 l 这四个键代替四个方向键来移动光标,这样能够避免因为不一样机器上的不一样键盘定义所带来的矛盾,并且使用熟练后能够手不离开字母键盘位置就能完成全部操做,从而提升工做效率。
如下命令均在命令行模式下完成光标移动:
h 光标左移, 若是在按h 命令前输入数字n ,则光标左移n 个字符;
l 光标右移 ,若是在按l 命令前输入数字n, 则光标右移n 个字符;
j 光标上移, 若是在按j 命令前输入数字n, 则光标上移n 个字符;
k 光标下移, 若是在按k 命令前输入数字n ,则光标xia 移n 个字符;
0 (零) 光标移到行首;
$ 光标移到行尾;
H 光标移到屏幕上显示的第一行 (并不必定是文件头);
L 光标移到屏幕上显示的最后一行 (并不必定是文件尾);
M 光标移到屏幕的中间一行;
nG 光标移到第 n 行;
w或W 将光标右移至下一个单词的词首;
e 或E 若是光标起始位置处于单词内(即非单词尾处),则该命令将把光标移到本单词词尾;若是光标起始位置处于单词尾,则该命令将把光标移动到下一个单词的词尾。
b 或B 若是光标处于所在单词内(即非单词首),则该命令将把光标移至本单词词首;若是光标处于所在单词的词首,则该命令将把光标移到上一个单词的词首;
Ctrl+G 状态命令, 显示当前编辑文档的状态。包括正在编辑的文件名、是否修改过、当前行号、文件的行数以及光标以前的行占整个文件的百分比。
此外 ,也能够经过如下末行模式下的命令完成光标在整个文件中的移动操做:
:n 光标移到文件的第n 行;
:$ 光标移到文件的最后一行;
在命令模式下 ,用户输入的任何字符都被vi 看成命令加以解释执行,若是用户要将输入的字符看成是文本内容时,则首先应将vi 的工做模式从命令模式切换到文本输入模式。切换的方式是使用下面的命令:
1. 插入(Insert) 命令
vi 提供了两个插入命令:i 和I。
(1) . i 命令插入文本从光标所在位置前开始, 而且插入过程当中可使用键删除错误的输入。此时vi 处于插入状态,屏幕最下行显示“–INSERT–” 插入字样。
(2) . I 命令 该命令是将光标移到当前行的行首, 而后在其前插入文本。
2. 附加(append) 命令
vi 提供了两个附加插入命令:a 和A。
(1) . a 命令该命令用于在光标当前所在位置以后追加新文本, 新输入的文本放在光标以后,在光标后的原文本将相应地向后移动,光标可在一行的任何位置。
(2) . A 命令 该命令与 a 命令不一样的是,A 命令将把光标挪到所在行的行尾,从那里开始插入新文本,当输入A 命令后光,标自动移到该行的行尾。
a 和A 命令是把文本插入到行尾的惟一方法。
3. 打开open 命令
不管是 Insert 命令也好,仍是append 命令也好,所插入的内容都是从当前行中的某个位置开始的。若咱们但愿在某行以前或某行以后插入一些新行,则应使用open 命令。
vi 提供了两个打开命令:o 和O。
(1) . o 命令该命令将在光标所在行的下面新开一行, 并将光标置于该行的行首,等待输入文本。要注意当使用删除字符时只能删除从插入模式开始的位置之后的字符,对于之前的字符不起做用。
(2) . O 命令和 o 命令相反,O 命令是在光标所在行的上面插入一行,并将光标置于该行的行首,等待输入文本。
在命令模式下可使用 vi 提供的各类有关命令对文本进行修改,包括对文本内容的删除、复制、取代和替换等。
1. 文本删除/移动
在编辑文本时 ,常常须要删除一些不须要的文本,咱们能够用键将输错或不须要的文本删除,但此时有一个限制就是当删到行头以后,再想删上面那行的内容是不可能的。
在命令模式下, vi 提供了许多删除命令这些命令。大可能是以d 开头的。经常使用的有:
(1) . 删除单个字符
x 删除光标处的字符。 若在x 以前加上一个数字n ,则删除从光标所在位置开始向右的n 个字符。
X 删除光标前面的那个字符,若在X以前加上一个数字n, 则删除从光标前面那个字符开始向左的n 个字符。
显然这两个命令是删除少许字符的快捷方法。
(2) . 删除多个字符
dd 删除光标所在的整行。 在dd 前可加上一个数字n ,表示删除当前行及其后n-1 行的内容。
D 或d$ 两命令功能同样, 都是删除从光标所在处开始到行尾的内容。
d0 删除从光标前一个字符开始到行首的内容。
dw 删除一个单词 。若光标处在某个词的中间,则从光标所在位置开始删至词尾。同dd 命令同样,可在dw以前加一个数字n 。表示删除n 个指定的单词。
若是用户不当心进行了误删除操做,也没关系vi ,提供了恢复误操做的命令,而且能够将恢复的内容移动,放在文本的任何地方。恢复命令用“np”, 其中n 为须要恢复的次数。例如使用dd 命令删除了一行内容,而后使用“2p”命令,则被删除的内容会被从新插入两遍。
经过 dd 命令及p 命令的结合使用,能够很方便的实现文本行的移动操做。
2. 文本复制命令
yy 复制光标所在的整行。 在yy 前可加上一个数字n ,表示复制当前行及其后n-1 行的内容。
文本行复制后, 经过使用上面介绍的“p” 命令,能够将文本行粘贴到任何地方。
dd、 yy 及p 命令在vi 中的做用,相似于Windows 中图形编辑程序的“剪切”、“复制”及“粘贴”命令。
3. 取消上一命令(Undo)
取消上一命令 (Undo), 也称复原命令,是很是有用的命令,它能够取消前一次的误操做或不合适的操做对文件形成的影响,使之回复到这种误操做或不合适操做被执行以前的状态。
取消上一命令有两种形式, 在命令模式下键入字符u 和U 它们的功能都是取消刚才输入的命令,恢复到原来的状况。小写u 和大写U 在具体细节上有所不一样,两者的区别在于,大写U命令的功能是恢复到误操做命令前的状况,即若是插入命令后使用U 命令,就删除刚刚插入的内容;若是删除命令后使用U 命令,就至关于在光标处又插入刚刚删除的内容。这里把全部修改文本的命令都视为插入命令,也就是说U 命令只能取消前一步操做,若是用U命令撤消了前一步操做,当再按U 键时,并非撤消再前一步的操做,而是撤消了刚才U命令执行的操做,也就是又恢复到第一次使用U 命令以前的状态,结果是什么都没作。而小写u 命令的功能是把当前行恢复成被编辑前的状态,而无论此行被编辑了多少次。
4. 重复命令(Redo)
重复命令也是一个很是经常使用的命令。 在文本编辑中常常会碰到须要机械地重复一些操做,这时就须要用到重复命令。它可让用户方便地再执行一次前面刚完成的某个复杂的命令。
重复命令只能在命令模式下工做, 在该模式下按“.” 键既可。执行一个重复命令时,其结果是依赖于光标当前位置的。
在进行文本编辑的时候,,您能够须要搜索或定位特定的单词或单词的一部分。vi 编辑器有向前或向后搜索指定模式的功能。
“/” 是vi 编辑器的模式搜索命令。键入“/” 后,屏幕的底部会出现一行,同时一个斜扛会出如今底行的行首上,且光标被放置在斜扛以后。此时,您能够在光标位置键入你须要搜索的模式。输入完成并按下ENTER键后,编辑器将开始从光标所在的位置起向文件尾部搜索你键入的模式。若是输入的模式被找到,光标将停留在找到的模式上。在找到一个匹配的模式后,若是您还须要搜索下一个匹配的模式,使用命令“n” 便可;若是须要找到上一个匹配的模式,则使用“N” 命令便可。
此外,“ ?” 命令也是模式搜索命令。与“/” 的区别在于/ 是从光标当
前所在位置向文件尾部搜索,而“?” 命令则是由光标当前所在位置向文件头部搜索。
文本替换操做须要使用末行模式进行操做 即全部文本替换操做命令均以“:”开头。
文本替换命令的格式为:
:s/text1/text2 用于将光标所在段落搜索到的第一个 “text1” 替换为“text2”;
:s/text1/text2/g 用于将光标所在段落的全部 “text1 ”替换为“text2”;
:m,ns/text1/text2/g 用于将从 m行开始至n 行结束的全部搜索到的“text1”替换为text2。 其中可使用$表示末行,即“1,$” 表示替换文档中的全部符合条件的字符。