vi编辑器的常用命令

VI最常用的命令:

一般模式

光标移动

h向左方向键

光标向左移动一个字符

j向下方向键

光标向下移动一个字符

k向上方向键

光标向上移动一个字符

l向右方向键

光标向右移动一个字符

扫描二维码关注公众号,回复: 270753 查看本文章

Ctrl+f

屏幕向前翻一页(常用)

Ctrl+b

屏幕向后翻一页(常用)

0

(是数字0)动到这一行的第一个字符处(常用)

$

移动到这一行的最后一个字符处(常用)

H

光标移动到这个屏幕最上方的那一行

M

光标移动到这个屏幕中央的那一行

L

光标移动到这个屏幕最下方的那一行

G

光标移动到这个屏幕最后一行

nG

移动到这个文件的第n行。例如 20G,则会移动到这个文件的第20行(可配合:set nu

n<Enter>

光标向下移动n(常用)

一般模式

查找与替换

/word

在光标之后查找一个名为word的字符串(常用)

?word

在光标之前查找一个名为word的字符串

:n1,n2s/word1/word2/g

在第n1n2行之间查找word1这个字符串,并将该字符串替换为word2(常用)

:1,$s/ word1/word2/g

在第一行与最后一行之间查找word1这个字符串,并将该字符串替换为word2(常用)

:1,$s/ word1/word2/gc

在第一行与最后一行之间查找word1这个字符串,并将该字符串替换为word2,且在替换前显示提示符让用户确认(conform)(常用)

一般模式

删除、复制与粘贴

x,X

x为向后删除一个字符,X为向前删除一个字符(常用)

nx

向后删除n个字符

dd

删除光标所在的那一整行(常用)

ndd

删除光标所在列的向下n列,例如,20dd则事删除20列(常用)

yy

复制光标所在行(常用)

nyy

复制光标所在列的向下n列,例如,20yy则是复制20列(常用)

p,P

p为复制的数据粘贴在光标下一列,P则为粘贴在光标上一列(常用)

u

恢复前一个动作(常用)

编辑模式

i,I

插入:在当前光标所在处插入输入的文字,已存在

a,A

添加:由当前光标所在处的下一个字符开始输入,已存在的字符会向后退(常用)

o,O

插入新的一行:从光标所在行的下一行行首开始输入字符(常用)

r,R

替换:r会替换光标所指的那一个字符;R会一直替换光标所指的文字,直到按下Esc为止(常用)

Esc

退出编辑模式,回到一般模式(常用)

命令行模式

:w

将编辑的数据写入硬盘文件中(常用)

:w!

若文件属性为只读,强制写入该文件

:q

退出vi(常用)

:q!

若曾修改过文件,又不想保存,使用为强制退出不保存文件

:wq

保存后退出,若为:wq!,则为强制保存后退出(常用)

:w[filename]

将编辑数据保存为另一个文件(类似另存新文档)

:r[filename]

在编辑的数据中,读入另一个文件的数据。即将filename这个文件内容加到光标所在行的后面

:set nu

显示行号,设定之后,会在每一行的前面显示该行的行号

:set nonu

ser nu相反,为取消行号

n1,n2 w[filename]

n1n2的内容保存为filename这个文件

(一)、进入vi 
      在系统提示字符(如$、#)下敲入vi <档案名称>,vi 可以自动帮你载入所要编辑的文件或是开启一个新文件(如果该文件不存在或缺少文件名)。进入 vi 后萤幕左方会出现波浪符

号,凡是列首有该符号就代表此列目前是空的。


 

下面是vi命令使用的一些选项及含义: 
-c sub-command 在对指定的文件编辑前,先执行指定的命令 sub-command . 
-r filename 恢复指定的文件filename . 
-R 将指定的文件以只读的方式放入编辑器中,这样不会保存对文件的任何修 改。 
-y number 将编辑窗口的大小设为number行。
(二)、两种模式
       如上所述,vi存在两种模式:指令模式和输入模式。在指令模式下输入的按键将做为指令来处理:如输入 a,vi即认为是在当前位置插入字符。而在输入模式下,vi则把输入的按键当

作插入的字符来处理。指令模式切换到输入模式只需键入相应的输入命令即可(如a,A),而要从输入模式切换到指令模式,则需在输入模式下键入ESC键,如果不晓得现在是处於什麽模式,

可以多按几次 [ESC],系统如发出哔哔声就表示已处于指令模式下了。
付:在指令模式进入输入模式的指令:
新增 (append) 
a :从光标所在位置後面开始新增资料,光标後的资料随新增资料向後移动。
A:从光标所在列最後面的地方开始新增资料。

插入 (insert) 
i:从光标所在位置前面开始插入资料,光标後的资料随新增资料向後移动。
I :从光标所在列的第一个非空白字元前面开始插入资料。

开始 (open) 
o :在光标所在列下新增一列并进入输入模式。
O: 在光标所在列上方新增一列并进入输入模式。

(三)、退出vi
      在指令模式下键入:q,:q!,:wq或:x(注意:号),就会退出vi。其中:wq和:x是存盘退出,而:q是直接退出,如果文件已有新的变化,vi会提示你保存文件而:q命令也会失效,这时你可以

用:w命令保存文件后再用:q 退出,或用:wq或:x命令退出,如果你不想保存改变后的文件,你就需要用:q!命令,这个命令将不保存文件而直接退出vi。

 

(四)、基本编辑
删除与修改文件的命令:
x:删除光标所在字符。
dd :删除光标所在的列。
r :修改光标所在字元,r 後接著要修正的字符。
R:进入取替换状态,新增文字会覆盖原先文字,直到按 [ESC] 回到指令模式下为止。
s:删除光标所在字元,并进入输入模式。
S:删除光标所在的列,并进入输入模式。

 

 

vi详细指令表

进入vi的命令 
vi filename: 打开或新建文件,并将光标置于第一行首 
vi +n filename: 打开文件,并将光标置于第n行首 
vi + filename: 打开文件,并将光标置于最后一行首 
vi +/pattern filename: 打开文件,并将光标置于第一个与pattern匹配的串处 例如,命令vi +/Jason friends 从第1个含有字符串Jason的行开始编辑文件
vi -r filename: 在上次正用vi编辑时发生系统崩溃,恢复filename

vi file1 file2 file3 shell传递3个参数给vi,vi将它们解释为要打开的文件。可以使用:w命令保存文件,使用:n命令访问下一个文件

移动光标类命令
h: 光标左移一个字符 
l: 光标右移一个字符 
space: 光标右移一个字符 
Backspace: 光标左移一个字符 
k或Ctrl+p: 光标上移一行 
j或Ctrl+n: 光标下移一行 
Enter: 光标下移一行 
w或W : 光标右移一个字至字首 
b或B : 光标左移一个字至字首 
e或E : 光标右移一个字至字尾 
): 光标移至句尾 
 (: 光标移至句首 
}: 光标移至段落开头 
{: 光标移至段落结尾 
nG: 光标移至第n行首 
n+: 光标下移n行 
n-: 光标上移n行 
n$: 光标移至第n行尾 
H: 光标移至屏幕顶行 
M: 光标移至屏幕中间行 
L: 光标移至屏幕最后行 
0: 光标移至当前行首 
$: 光标移至当前行尾  
G 将光标移到文件的最后一行
^(脱字符) 同0一样将光标移到当前行的行首
- 将光标定位到上一行的行首 
+ 将光标定位到下一行的行首 
12| 将光标定位到当前行的第12列 
” 两个单引号将光标移到它的先前的位置


光标定位命令(上下文的) 
fb 将光标向前移到当前行上的下一个字母b(或者其他的任意指定的字符) 
Fb 将光标向后移到当前行上的上一个字母b(或指定的字符) 
fc 把光标移到同一行的下一个c字符处。 
Fc 把光标移到同一行的前一个c字符处。 
tc 把光标移到同一行的下一个字符c的前一格。 
Tc 把光标移到同一行的前一个字符c的后一格。
/word 将光标向前移到单词word的下一个实例 
?word 将光标向后移到单词word的上一个实例 
n 将光标移到前面命令/word或?word中指定模式的下一个实例

屏幕翻滚类命令
Ctrl + f向后滚一页。 
Ctrl + d向后滚半页。 
Ctrl + b向前滚一页。 
Ctrl + u向前滚半页。 
Ctrl + e屏幕向下滚一行。 
Ctrl + y屏幕项上滚一行。
nz: 将第n行滚至屏幕顶部,不指定n时将当前行滚至屏幕顶部。

插入文本类命令
i: 在光标前 
I: 在当前行首 
a: 光标后 
A: 在当前行尾 
o: 在当前行之下新开一行 
O: 在当前行之上新开一行 
r: 替换当前字符 
R: 替换当前字符及其后的字符,直至按ESC键 
s: 从当前光标位置处开始,以输入的文本替代指定数目的字符 
S: 删除指定数目的行,并以所输入文本代替之 
ncw或nCW: 修改指定数目的字 
nCC: 修改指定数目的行  
:#r filename 例如,:8r report.old读取文件report.old,并将它的内容放到当前文件的第8行之后

删除命令 
ndw或ndW: 删除光标处开始及其后的n-1个字 
do: 删至行首 
d$: 删至行尾 
ndd: 删除当前行及其后n-1行 
x或X: 删除一个字符,x删除光标后的,而X删除光标前的  
dd 删除当前光标所有的文本行 
#dd 删除#行文本 
dw 从文本中删除一个单词 
#dw 从文本中删除#个单词 
x 删除光标所在的一个字符 
#x 从文本中删除#个字符 
D 删除当前行上光标后面的部分 
:#,#d 例如,:12,37d 将删除第12~37行之间的所有文本,包括第12和37行 
Ctrl+u: 删除输入方式下所输入的文本 


撤销命令 
u 撤销。恢复最近一次的文本修改操作,即使已经移动了光标。在Linux系统中,再次使用撤销命令将恢复更前一次的文本修改操作。在BSD的vi中,第2次撤销操作将撤销第一次撤销操作,恢

复第1次撤销前修改的文本 
:redo 在Linux系统中,取消撤销操作恢复文本修改。在标准的UNIX系统中,第2个u命令取消第1个u命令,结果就是一个“redo” 
U 如果在修改后还没有将光标移出当前行,则可以撤销对当前行进行的所有的文本修改

搜索及替换命令 
n 在上次指定的方向上,再次执行上次定义的查找。 
N 在上次指定的方向的相反方向上,再次执行上次定义的查找。 
/pattern/+number 将光标停在包含pattern的行后面第number行上。 
/pattern/-number 将光标停在包含pattern的行前面第number行上。 
% 移到匹配的“()”或“{}”上。 
/pattern: 从光标开始处向文件尾搜索pattern
?pattern: 从光标开始处向文件首搜索pattern
:s/p1/p2/g: 将当前行中所有p1均用p2替代
:n1,n2s/p1/p2/g: 将第n1至n2行中所有p1均用p2替代
:g/p1/s//p2/g: 将文件中所有p1均用p2替换


选项设置 
设置显示选项 
:set number 将行号作为屏幕显示的一部分,但是行号并不是文件的一部分。它的缩写形式为:set nu 
:set nonumber 清除屏幕上的行号。也可以使用缩写形式:set nonu 
:set showmode 在屏幕的右下角显示追加模式信息 
:set list 在每行的行末显示美元符号,并用Ctrl+I表示制表符 
:set showmatch 在输入)或]时,将光标移到与之匹配的(或[ 
:set window=value 定义屏幕上显示的文本行的行数 
:set autoindent 自动缩进。也可以使用缩写形式:set ai 
:set tabstop=value 设置显示制表符的空格字符个数。也可以使用缩写形式ts=value 
:set wrapmargin=value 设置显示器的右页边。当输入进入所设置的页边时,编辑器自动回车换行 
:set ignorecase 指示编辑器搜索字符串,并忽略目标中字母的大小写 
:set 显示设置的所有选项 
:set all 显示所有可以设置的选项
all:列出所有选项设置情况
term:设置终端类型
ignorance:在搜索中忽略大小写
list:显示制表位(ctrl+i)和行尾标志($)
number:显示行号
report:显示由面向行的命令修改过的数目
terse:显示简短的警告信息
warn:在转到别的文件时若没保存当前文件则显示no write信息
nomagic:允许在搜索模式中,使用前面不带“\”的特殊字符
nowrapscan:禁止vi在搜索到达文件两端时,又从另一端开始
mesg:允许vi显示其他用户用write写到自己终端上的信息

最后行方式命令
:n1,n2 co n3:将n1行到n2行之间的内容拷贝到第n3行下
:n1,n2 m n3:将n1行到n2行之间的内容移至到第n3行下
:n1,n2 d :将n1行到n2行之间的内容删除
:w :保存当前文件
:e filename:打开文件filename进行编辑
:x:保存当前文件并退出
:q:退出vi
:q!:不保存文件并退出vi
:!command:执行shell命令command
:n1,n2 w!command:将文件中n1行至n2行的内容作为command的输入并执行之,若不指定n1,n2,则表示将整个文件内容作为command的输入
:r!command:将命令command的输出结果放到当前行


改变文本
cc或S 修改一整行。 
C 改变一行光标位置以后的部分。 
cw 改变光标所在单词。 
dd删除当前行。 
D 删除光标所在行光标后面的内容。 
dw删除光标所在的单词。 . 
r 用输入的下一个字符替代当前光标处的字符,并自动返回到命令模式 
R 将编辑器放到覆盖模式,用输入的字符来逐个替换光标处的字符 
ct# 修改行上从光标到前向第1个目标字符之间的文本。例如ctY将删除当前行上从光标到向前第1个字符Y之间的所有文本,并进入追加模式以在删除文本的位置添加文本 
cf# 修改行上从光标到前向第1个目标字符之间的文本(包括目标字符)。例如cfY将删除当前行上从光标到向前第1个字符Y之间(包括Y)的所有文本,并进入追加模式以在删除文本的位置添

加文本 
cT# 修改行上从光标到后向第1个目标字符之间的文本。例如cTY将删除当前行上从光标到向后第1个字符Y之间的所有文本,并进入追加模式以在删除文本的位置添加文本 
cF# 修改行上从光标到后向第1个目标字符之间的文本(包括目标字符)。例如cFY将删除当前行上从光标到向后第1个字符Y之间(包括Y)的所有文本,并进入追加模式以在删除文本的位置添

加文本


拷贝命令
yy 将当前行复制或接出到内在缓冲区。20yy将当前行和它后面的19行(共20行)文本复制到内存。目标行仍然保留在文件中,可以使用p命令将这些内存中的文本粘贴到文件中
dd 删除当前行,并将它放到与yy命令使用的相同的内存缓冲区。目标行从文件中删除,但是可以使用p命令将它粘贴到文件中的其他地方 
yw 将当前光标所在的单词接出或复制到内在缓冲区。6yw命令将把当前单词和它后面的5个(共6个)单词复制到内存 
dw 删除当前的单词,并将它放到与yw命令使用的相同的内存缓冲区。可以使用p命令将单词粘贴到文件的其他地方 
yt# 接出从光标到向前一个字符(不包括该字符)之间的文本。例如,ytB命令将从光标到字符B的下一实例(不包括字符B)之间的文本接出或复制到内存
yf# 接出从光标到向前一个字符(包括该字符)之间的文本。例如,yf:命令将从光标到字符:的下一个实例(包括字符:)之间的文本接出或复制到内存 
yT# 后向接出(不包括目标字符)。例如,yTN命令将从光标到字符N的后向第1个实例之
间的文本(不包括字符N)接出或复制到内存 
yF# 后向接出(包括目标字符)。例如,yFJ命令将把从光标到字符N的向后第1个实例之间的文本(包括字符N)接出或复制到内存 
p 将内存中的文本行粘贴到文件中光标所在行的下面,或将内存中的单词粘贴到文件中光标的右侧 
P(大写) 将接出或删除的文本行粘贴到文件中光标所在行的上面。或将接出或删除的单词粘贴到文件中光标的左侧 
u恢复上一次的修改。 
x删除光标所在的字符。 
~ 改变光标所在出字符的大小写。 
. 重复上一个*作。 
>把当前行移到右边。 
p 将缓冲区内容取到光标所在行的下面一行。 
P 将缓冲区内容取到光标所在行的上面一行。 
“bd 将文本删除至有名缓冲区b . 
“bp 张贴有名缓冲区b中内容。 
yy把当前行放入缓冲区。 
Y 把当前行放入缓冲区。 
Yw把光标所在的单词放入缓冲区。


文件移动命令 
J 将下行文本同当前行合并成一行 
:#,# move # 将指定的行移到目标位置。:12,35 move 58命令将第12~35行之间的所有文本移到第58行的后面。缩写为mo 
:1,26 co 82 将第1~26行之间的所有文本复制到第82行的后面(可以选择行号)

保存文件的子命令: 
:w 回写修改后的文件。 
:w filename 当filename不存在时,把修改后的文件存为文件filename ,当文件filename存在时,报错。 
!w filename 如果文件filename存在时,把修改后的文件保存为文件filename . 
下面列出了在vi编辑的多个文件之间切换所用的子命令: 
:n开始编辑vi激活的文件列表中的下一个文件。 
:n filenames 指定将被编辑的新的文件列表。 
下面列出了用于在当前文件和另外一个文件间切换的子命令: 
:e filename 使用filename激活vi (在vi中装入另一个文件filename)。 
e!重新装入当前文件,若当前文件有改动,则丢弃以前的改动。 
:e+filename 使用filename激活vi ,并从文件尾部开始编辑。 
:e+number filename 使用filename激活vi ,并在第number行开始编辑。 
:e# 开始编辑另外一个文件。
 
下面是在本文件中加入其他文件代码所使用的子命令: 
:r filename读取filename文件,并将其内容加到当前文件后。 
:r ! command执行command文件,并将其输出加到当前文件后。
 
vi中其他的子命令: 
ctrl+g 取得正在编辑文件的有关信息。 
:sh启动sh ,从sh中返回可用exit或ctrl+d . 
:! Command 执行命令command . 
!!重新执行上次的:! Command子命令。 
:q退出vi ,若用户对编辑的文件有所修改,系统不会让用户使用q命令退出。 
:q!退出vi而不管是否对文件有改动。 
ZZ或:wq 保存对文件的修改并退出vi .


使用可视化编辑器进行全局编辑 
:s /target/replacement/ 查找当前行上目标字符串的第1个实例并删除,然后用字符串replacement替换。只修改当前行上的第1个目标实例 
:g /target/s//replacement/ 查找所有行上目标字符串的第1个实例并删除,然后用字符串replacement替换。修改所有行上目标的第1个实例
:#,# s/target/replacement/ 在指定的行上进行替换。例如,:7,37 s/march/walk/将查找第7~37行之间的所有文本行,并用字符串walk替换每行中的第1个目标字符串march。所有指定行上

的第1个目标字符串修改 
:#,# s/target/replacement/g 在指定的行上进行全局替换。例如,:1,$ s/fun/joyful/g 将在第1行到文件最后一行之间查找目标字符串fun的所有实例并删除,然后用字符串joyful替换。

指定行上的目标字符串的所有实例都被修改 
:g /target/s/replacement 查找所有行上目标字符串的第1个实例并删除,然后用字符串replacement替换。所有行上的第1个目标都被修改 
:#,# target/s/replacement/ 在指定的行上进行替换,例如,:7,37 march/s/walk命令在第7~37行之间每个文本行上查找目标字符串的第1个实例并删除,然后用字符串walk替换。所有指定

行上的第1个目标字符串都被修改 
:#,# target/s/replacement/g 在指定的行上进行全局替换。例如,:1,$ fun/s/joyful/g将在第1行到文件最后一行之间查找目标字符串fun的所有实例并删除,然后用字符串joyful替换。指

定行上的所有目标字符串都被修改 
编辑工具:映射,缩写和标记 
m# 用字母标记当前行。例如,ma命令表示用a标记当前行。即使移动了标记行,它仍然标记为a,可以用a来定位该行 
'# 定位标记行。例如,命令'a将光标移到标记a的行。命令'a,$d将删除从标记行到文件末尾之间的所有行 
:map # command string 在命令模式中输入#时,将其作为一个命令串。例如,:map #o#!/bin/ksh产生一个新的命令模式指令,您输入#时,它被解释为:o打开个新行,并添加文本

#!/bin/ksh到文件中。为了在命令中包含回车和其他控制字符,可以在它们的前面用Ctrl+V命令 
:ab abbreviation char-string 设置追加模式缩写。例如,在命令模式中输入:ab mv Milky Way Galaxy,则建立缩写。如果在追加模式中输入字符串mw,然后按Esc键,mw将被Milky Way

Galaxy替代 
在vi编辑器中向shell发出命令 
:!ls 启动一个shell,并让shell运行ls程序。在运行完指定的程序后,必须按回车键以返回到编辑器中 
:!ksh 启动一个shell,它允许运行多个命令。退出shell可以回到编译器中 
:Or!speel% 对当前文件(%)进行拼写检查,并将spell的输出诗篇到当前文件中,从第1行(0行后面)开始放置这些输出 
:31r!command% 运行UNIX命令(如cal或date)并将它的输出读入到当前文件,从第31行开始放置这些输出 
Ctrl+Z 用于挂起当前编辑会话进程的csh和ksh命令,它允许您向父shell发出命令 
fg 重新激活挂起的编辑进程的csh和ksh命令 
读、写和退出编辑器 
:wq 保存编辑会话期间对文件所做的修改,退出编辑器返回到shell 
:q 如果没有对文件进行修改或添加文件,可以用q退出对一个文件的编辑 
:q! 退出对文件的编辑返回到shell模式,但是不保存在编辑会话期间对文件所做的修改 
:w filename v将文件的缓冲区副本(修改版本)保存到一个新文件 
[color=#DC143C][b]:#,# w newtest 例如,:1,6 w newtext命令创建一个名为newtext的文件,并将当前文件的第1~6行文本复制到文件newtext中
:1,6 w >> oldfile 将当前文件的第1~6行文本的一个副本追加到已有文件oldfile的末尾 
:1,6 w! oldfile 用当前文件的第1~6行文本覆盖文件oldfile

猜你喜欢

转载自294460620.iteye.com/blog/2312085