UNIX系统下VI编辑命令的整理

来源:互联网 发布:8080端口是什么 编辑:程序博客网 时间:2024/05/20 05:10

从网上搜集了多人资料整理而成的小文章!

 

vi提供两种操作模式:输入模式(insert mode)和指令模式(command mode)。

在输入模式下,按Esc切换到指令模式下。

在指令模式下,按输入指令(iao等)进入输入模式。

直接键入“vi + 所要编辑的文件名,即可对指定的文件进行编辑。如果指定的文件为新文件,则提示:“New file”,否则显示该文件的当前内容。

$ vi   filename

$ view filename            以只读方式打开文件filename

 

指令模式

3.1 进入输入模式

a     从光标所在位置後面开始新增资料,光标後的资料随新增资料向後移动。

    从光标所在列最後面的地方开始新增资料。

i      从光标所在位置前面开始插入资料,光标後的资料随新增资料向後移动。

I     从光标所在列的第一个非空白字元前面开始插入资料。

o     在当前行之下新增一行,并在新增行输入

O     在当前行之上新增一行,并在新增行输入

输入结束后,按Esc键退出输入模式。

3.2 游标移动

h     向左移动一个字元

l      向右移动一个字元

j      向下移动一个字元

k     向上移动一个字元

e     光标所在位置到该字的最後一个字母

b     左移一个单词,至词首

w    右移一个单词,至词尾

0     移到当前行行首

$     移到当前行行尾

+     移至下一行的行首

-      移至上一行的行首

H    移至视窗的第一行

M    移至视窗的中间一行

L     移至视窗的最后一行

G    移至该文件的最后一行

nG 移至该文档的第n

n+   下移n

n-    上移n

)      光标所在位置到下个句子的第一个字母

(      光标所在位置到该句子的第一个字母

}      光标所在位置到该段落的最後一个字母

{      光标所在位置到该段落的第一个字母

n(    前面加上数字可以指定往前移动 n 个句子

n)    前面加上数字可以指定往後移动 n 个句子

n{    前面加上数字可以指定往前移动 n 个段落

n}    前面加上数字可以指定往後移动 n 个段落

句子是以! . ? 三种符号来界定; 段落是以段落间的空白列界定

3.3 视窗移动

<Ctrl> + f              视窗下卷一页

<Ctrl> + b      视窗上卷一页

<Ctrl> + d      视窗下卷半页

<Ctrl> + u      视窗上卷半页

<Ctrl> + e      视窗下卷一行

<Ctrl> + y      视窗上卷一行

3.4 删除操作

x     删除游标所在字元

X    删除游标前一字元

dw 从游标当前位置开始向后删除一个单词

db   从游标当前位置开始向前删除一个单词

d0   从行首删除至当前游标位置

d$   从游标当前位置删除至行尾

dd   删除游标所在行

D    d$

3.5 修改操作

s     修改游标所在字元,修改完成后按Esc键结束

S    修改整行内容,修改完成后按Esc键结束

r      替换当前游标所在字元

R    进入取替换状态,新增文字会覆盖原先文字,直到按 [ESC] 回到指令模式下为止。

cw   修改一个单词(从游标位置至词尾)

cb   修改一个单词(从词首至游标位置)

cc   修改整行内容,完成后按Esc键结束,同S

c0   修改行首至游标位置的内容

c$   修改游标位置至行尾的内容

~     游标所在字元大小写切换

3.6 指令重复

在指令模式中可在指令前面加入一个数字n,则该指令会重复执行n次。常用的重复操作有:

nx   删除n个字元

ndd 删除n

ns    修改n个字元

3.7 取消前一动作(Undo

u     撤消上一指令的结果

3.8 查找字符串

/字符串   从当前游标向后查找该字符串

?字符串 从当前游标向前查找该字符串

n     从当前游标向后查找下一个字符串

N    从当前游标向前查找下一个字符串

fx    往右移动到 x 字元上

Fx   往左移动到 x 字元上

tx    往右移动到 x 字元前

Tx    往左移动到 x 字元前

;      配合 f&t 使用,重复一次

,      配合 f&t 使用,反方向重复一次

3.9 查看编辑状况

<Ctrl> + g      显示正在编辑的文件名、当前游标所在行数、文件总行数、文件是否被修改

保存与退出

:w   保存,但不退出

:wq        保存并退出

:x    :wq

:q    退出,如果当前文件没有保存,禁止退出

:q!   不保存退出

:w file1   将内容保存至文件file1中,注意:此时编辑的仍为原文件

:w! file1 将内容覆盖保存至文件file1中,如文件file1存在,:w file1将禁止执行

环境设置

:set        显示已设置的环境状况

:set all    显示所有的环境设置选项

:set nu    显示行号

:set nonu              不显示行号

:set ts = n      设置Tab键的长度为n

执行指令

以下用具体的数字为例进行介绍,数字表示行数,游标所在行可用“.”代替,文件最后一行可用“$”代替。

: 10 , 20d       删除第10行至第20行的内容

:10d              删除第10行的内容

:%d               删除全部内容

: 10 , 20co30         将第10行至第20行的内容复制到第30行之后

: 10 , 20mo30        将第10行至第20行的内容移动到第30行之后

: 1 , $ s/old/new    将第1行至最后一行中的old替换成new

: 1 , $ s/^/new       将第1行至最后一行的内容前面插入new

: 10               将游标移至第10

重复指令

.      重复上一条指令

切换到shell状态

:sh 切换到shell状态,exit返回

 

更多的编辑指令

这些编辑指令非常有弹性,基本上可以说是由指令与范围所构成。例如 dw 是由删除指令 d 与范围 w 所组成,代表删除一个字 d(elete) w(ord) 指令列表如下:

d     删除(delete)

y     复制(yank)

p     放置(put)

c     修改(change)

u     回复(undo)

说实在的,组合这些指令来编辑文件有一点点艺术气息。不管怎麽样,它们提供更多编辑文字的能力。值得注意的一点是删除与复制都会将指定范围的内容放到暂存区里,然後就可以用指令 p 贴到其它地方去,这是 vi 用来处理区段拷贝与搬移的办法。

某些 vi 版本,例如 Linux 所用的 elvis 可以大幅简化这一坨指令。如果稍微观察一下这些编辑指令就会发现问题其实是定范围的方式有点杂,实际上只有四个指令罢了。指令 v 非常好用,只要按下 v 键,光标所在的位置就会反白,然後就可以移动光标来设定范围,接著再直接下指令进行编辑即可。

对于整行操作, vi 另外提供了更方便的编辑指令。前面曾经提到过删除整行文字的指令 dd 就是其中一个;cc 可以修改整行文字;而 yy 则是复制整行文字;指令 D 则可以删除光标到该列结束为止所有的文字。

 

字符替换命令

:s/str1/str2/ 用字串 str2 替换行中首次出现的字串 str1

:s/str1/str2/g 用字串 str2 替换行中所有出现的字串 str1

:.,$ s/str1/str2/g 用字串str2替换正文当前行到末尾所有出现的字符串str1

:1,$ s/str1/str2/g 用字串str2替换正文中所有出现的字串str1

:g/str1/s//str2/g 功能同上.

由以上可知,g放在命令末尾,表示对搜索字串的每次出现进行替换;不加g,表示只对搜索字串的首次出现进行替换,g放在命令开头,表示对正文中所有包含搜索字串的行进行替换.

 

 

原创粉丝点击