使用vi很久了,回想起当时学习vi时的经历,觉得有必要记录下vi常用命令,希望对大家有用。
当时学习vi,主要是在书上或网上看使用命令,然后实践。很多书上都提到了vi的使用,但写的比较笼统,有些命令没有提到。不常用的命令提到了,常用的命令反而没提到,反而有点了混淆视听。而网上网友们提供的vi命令又太过于细了,不管常用不常用,提出来一堆命令,以至于学习没有重点。
基于此,我觉得有必要记录下vi常用命令,希望对大家有用。
(注:这里只记录我认为常用的命令)
vi有三种工作模式:指令模式、编辑模式和命令模式。
我们从打开vi说起,这样可以确定下学习环境,也方便学习者实践。
打开vi,当前模式即为指令模式,此时可以按a, i, 或o进入编辑模式,或按:(冒号)进入命令模式;进入编辑模式后,按Esc键则返回指令模式;命令模式只能由指令模式进入,命令模式下执行命令后,便自动返回指令模式。
1、指令模式:此时是不可编辑的,即此时只有按指令键,vi才有反应,否则,vi是不会有反应的。所以此模式下是不能编辑文件的。
a -- (指输入a,下同)进入编辑模式,在光标当前位置的后面进行输入 (注:中间的"--"是分隔栏,不是命令的一部分,下同)
i -- 进入编辑模式,在光标当前位置的前面进行输入
o -- (小写字母o)进入编辑模式,在光标当前行下面新插入一行,并将光标定位到新行的最前面
0 -- (数字0)仍然是指令模式,定位光标到当前行的最前面
$ -- (shift+4)仍然是指令模式,定位光标到当前行的最后面
j -- 仍然是指令模式,光标向下移动
k -- 仍然是指令模式,光标向上移动
h -- 仍然是指令模式,光标向左移动
l -- 仍然是指令模式,光标向右移动
G -- 仍然是指令模式,光标移动到文件的最后一行
nG -- (n是行数)仍然是指令模式,光标移动到文件的第n行
% -- 仍然是指令模式,如果光标当前位置的字符为大中小括号的一部分,则会自动定位到括号的另一部分,此命令用于代码的定位比较容易
x -- 仍然是指令模式,将光标当前位置的字符删除
ndd -- (n为行数)仍然是指令模式,将从光标当前行开始向后计算共n行,一起cut(剪切)。若n为1,则可不需输入,只需dd即可。
nyy -- (n为行数)仍然是指令模式,将从光标当前行开始向后计算共n行,一起copy(复制)。若n为1,则可不需输入,只需yy即可。
p -- 仍然是指令模式,粘贴内容到光标所在行的下面
2、编辑模式:
即为输入模式,就和运行windows平台的记事本一样。键入什么,则输入什么。
3、命令模式:
在指令模式,键入:(冒号)则进入命令模式,光标也会自动定位到vi程序的最下面一行,然后在:(冒号)后面相关命令,然后"回车"即可。命令执行后,会自动返回指令模式。
:x -- 保存并退出
:wq -- 同上
:q! -- 不保存,然后退出
:n -- (n为行数)光标跳转到第n行
:1,$s/aa/bb/g -- 从第1行到文件的最后一行(整个文件),将aa替换为bb,不提示且全部替换
:1,$s/aa/bb/gc -- 同上,只是每发现一个aa,则会提示是否替换
:set nu -- 设置显示行号
:set nonu -- 设置不显示行号
:set ts=n -- (n为数字)设置Table显示为n个字符的宽度,只是显示,而不是替换
/xxx --(xxx为查找的内容)向下查找(不需要冒号)
?xxx --(xxx为查找的内容)向上查找(不需要冒号)
# --(shift+3)向上查找光标当前所在位置的单词(不需要冒号)
' --(引号键)在当前行和上一次查找结果前切换,可多次使用(不需要冒号)