2024年1月14日发(作者:)

vi介绍编

(1) vi快速入门

◎前言

我是pico的使用者,在我是redhat linux使用者的时候,

当时我觉得pico给我的感觉很亲切,功能也很强大.

了FreeBSD之後,突然发现竟然没有pico,需要额外安装

pine才能够取得.但这也无妨,反正安装很快...

直到有一天,当我要做取代的动作..这时....pico就....

於是我投向了vi ...去了解他的规则表示式,

一个简单的小动作 让繁琐的工作瞬间解决.

不但如此..vi 是所有unix-like都有的编辑器...不用额外安装

让您在不同系统上也能够很快的进入状况.

◎FAST STARTUP

若您之前不曾使用过全萤幕的编辑器,那麽您可能连一些简单的编辑都有问题.

如此您可能要找一个已经稍微了解vi使用的人来带领您.

vi是一个萤幕编辑器,这表示了vi几乎用去了萤幕上的

每一行空间来展示档案的内容,除了萤幕上的最後一行.

这一行是用来让您发号命令给vi及vi给你一些相关档案资讯时用的.

其他您必须了解的是vi是一个模式型编辑器.举例来说:

你能输入文字或者是执行命令,但是你必须在正确的模式才能够执行.

您一刚开始编辑一个档案时,您处在命令模式(command mode).

有一些命令能够让您切换到输入模式(input mode).

然而,只有一个键能够让您离开输入模式,那就是键盘左上的

若您不了解您目前处於何种模式,您可以持续的按,直到vi发出声音警告您,

如此您已经回到命令模式.当您尝试做了一些vi所不允许的事情,

正常来说vi会发出"哔"声(本机操作时)

要开始编辑一个档案您可以这样做:

$ vi file_name <按enter键>

然後输入 :set verbose mode

然後vi会提醒您:

:set the mode option may never be turn on

:虽说如此 但对初学者来说 有多些讯息提示总比没有好

放心 离开vi後就会恢复原先的noverbose mode

如此可以让vi当你产生错误时给予你多一些的讯息并当您猛按键时

,会在萤幕的最下端显示如下的讯息,提醒您已在命令模式.

Already in comman mode

:命令皆需要在命令模式下实行.

△简易移动命令

h 将标往左移动一个字元.

j 将标往下移动一行.

k 将标往上移动一行.

l 将标往右移动一个字元.

<方向键> 上下左右键也应该可以发挥作用.

:若纯粹使用windows 内建的telent方向键无法使用..

所以知道hjkl的用处也不错啦..

△简易搜寻命令

/text 搜寻text字串

若今天我要搜寻panda则是 /panda , / 为搜寻命令.

△模式切换

a 在标後可以新增开始新增

i 在标前可以开始新增文字

o 在标的下方新增一行,并可以开始输入文字.

O 在标的上方新增一行,并可以开始输入文字.

当你今天用a,i,o,O进入输入模式,可以用键回到命令模式.

:经个人使用发现 模式切换只要记住几个就好 依照一般输入习惯,

建议初学者记住a,O就好 (虽然到最後您会在不知不觉中全部记下)

尤其是O看似没有o好用,但是今天若您想要在最上方新增一行时,

记得O这个指令真是方便阿..

△文字处理命令

:

yy 标所在行.

p 在标所在的下一行贴上所的资料.

删除:

dd 将标所在行删除.

x 将标所在的那个字元删除.

储档:

:w 以原档案名称储存档案.

:w file_name 另存新档,档名为file_name

离开:

:q 离开编辑及vi,若您已经编辑过档案vi会拒绝您离开.

:q! 强制离开vi 不论情况

: 所谓的一行 有可能在萤幕上是很多行(因为萤幕的一行摆放不下)

只要没有换行符号产生 那就称之为一行,用标移动您就会明.

◎小结:以上这些只是基础的vi功能,熟悉了这些,您已经会了简单的文书处理,

已经可以逐渐摆脱pico之类的编辑器,投向vi的怀抱.

过一阵子,当您渐渐了解vi的强大,ㄏㄏ...

◎参考资料: man vi

(2) 参数简介

◎ex, vi, view - text editors

◎SYNOPSIS

vi [-eFGlRrSv] [-c cmd] [-t tag] [-w size] [file ...]

ex [-eFGRrSsv] [-c cmd] [-t tag] [-w size] [file ...]

◎DESCRIPTION

ex和vi是相同程式但不同介面,ex是一行处理的(line-oriented),

vi是以全萤幕为基准的(screen oriented).二者能相互切换.

View相当於vi使用-R(唯读)参数

◎OPTIONS

-e 以ex模式开始编辑,如同用ex编辑一般。

vi -e filename 等同於 ex filename

-F 当第一次编辑时,不要让vi整个档案。

(预设是整个档案,以避免当您在编辑时,他人更改这个档案。)

-R 以唯读模式开启,如同以vipw开启档案,或在命令列中设定readonly参数。

-r 重新取得某个特定档案,若没有指定档案,档案表列会被重新取得。

若没有该指定档案,档案会被视为没有-r参数编辑。

-S 以安全编辑模式启动,不允许所有的外部程式存取。

-s 进入batch模式,只能应用在ex编辑。batch模式在执行ex scripts非常有用。

一些及时资讯及其他使用者导向的讯息被忽略(不显示),

没有开始档案或环境变数被读取。

-w 设定基本的视窗大小,用以定义显示的行数。

-v 以vi模式开始编辑,如同vi 或view命令。

ex/vi从标准输入读取讯息,在vi介面, 若标准输入不是一个终端机,会产生错误。

在ex介面,若标准输入不是终端机,无论如何ex会试着从他读取命令。

然而,此时会以batch模式进行,如同-s参数被指定。

◎参考资料: man vi

(3) vi命令

◎VI COMMANDS

以下命令皆在vi命令模式下执行。

为避免ex:符号与ex命令混淆 所有要输入的指令皆用蓝色表示

不显示ex:(举例说明的英文缩写)

: 表示先按住ctrl键再按A

有些命令小写也可以用

移动命令:

往下移动到这个字下次一出现的地方。

标向上移动一个萤幕。

标往下移动数行(约12行)。

将萤幕往上一行,但标位置不变。

标往下移动一个萤幕。

+ 标往下移动到下一行第一个非空白字元。

标往上移动数行(约12行)。

将萤幕往上动,但标位置不变.

CTRL+Y 每移动一次 Y就按一次

(当然您的标须位在至少能够向上动的位置)

$ 将标移动到该行尾.

( 标往上移动到下一句子.

) 标往下移动到下一句子.

- 标移动到上一行第一个非空白字元.

0(数字) 移动标到该行的第一个字元(包含空白).

< 移动该行向左移动一个tab键距离,按第二次後开始动作.

> 移动该行向右移动一个tab键距离,按第二次後开始动作.

B 往上移动标到下一个字的开始.

E 标往後移动到下一个字的最後一个字元.

nG 移动到某行,n为行数,若没有指定则为档案的最後一行.

H 移动标到档案第一行行首.

L 将标移动到萤幕的最下一行.

M 将标移动到萤幕的中间行.

W 往下移动标到下一个字的开始.

^ 移到该行第一个非空白字元.

e 移动到该字的最後一字母.

f<字元> 行中向後搜寻该字母并移动标到该位置.

移动到a字母的位置fa

t<字元> 行中向後搜寻该字母并移动标到该字元前一个位置.

{ 往上移动到前一段落.

} 往下移动到後一段落.

档案命令:

显示档案的资讯。

显示出目前档案是否更改,所在行的位置.

file_name: unmodified : line 1 of 380 [0%]

重画萤幕。

重画萤幕。

暂停编辑 回到shell,可用fg回到编辑画面

切换到最近编辑的档案.

vi file_name file_name2

用此命命可以在两个档案中切换.

ZZ 将文件存档并离开vi

编辑命令:

输入:

I 移动标道行首的第一个字元并开始接受输入.

R 以取代模式进入输入模式.

:

Y 该行到暂存区

删除:

D 从标目前位置道行尾的所有字元删除..

S 将该行清除并进入输入模式.

X 删除标之前的一个字元

取代:

!shell命令 !後接shell comd ,并以shell cmd 执行结果取代标该行.

!panda

用以下讯息取代原有行的内容

bash: panda: command not found

r 按r後接着按某字元,以取代标所在的该字元.

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

重:

& 在该行重之前的规则表示式.

前提是需要之前有执行过规则表示式.

用panda取代a :s/a/panda/

若之前没有任何表示式 则系统会显示如下讯息

No previous regular expression

. 重上一个更改文件内容的vi命令.

n 搜寻之前所搜寻过的字串

若先执行 /BSD

再执行 n 等同於执行 /BSD

若先前没有搜寻任何东西 会有如下讯息

No previous search pattern.

复原:

U 恢复状态到标起初接触此行的状态

u 复原前一个动作产生的效果(也就是回复)

其他:

: 执行ex 命令

J 将下一行与此行合.

Q 离开vi模式并切换到ex模式.

(3) ex命令

◎EX COMMANDS

以下的命令属於ex编辑器所用.也就是说要在vi执行时需要先换成ex mode (:)

vi/ex mode切换 於ex mode输入vi 即可.

! shell command 执行shell命令

" 解

# 数字 显示选择的行数,每行前面标示出行号.

* buffer_name 执行该buffer

[行数]a! 在该行的下一行,产生输入的文字. 行数从 0 开始.

:1a! (在第二(1+1=2)行产生输入文字)

接着会出现如下的讯息

Entering ex input mode

接着您就可以输入文字 按 ctrl+c 结束

[行数]c! 该行用输入的文字取代. 行数从1开始.

:1c! (在第一行产生取代文字) 接着会出现如下的讯息

Entering ex input mode

接着您就可以输入文字取代 按 ctrl+c 结束

[行数围]d 将处於该行数围内的文章删除.

1,3d (表示从第1行到第3行删除; ,表示到的意思)

[Ee]dit! file_name

[Ee]x! file_name 编辑不同的档案,此为编辑file_name,[]表示其中之一。

也可以用 :e file_name 或 :edit file_name 编辑不同档案

exu[sage] [ex命令] 显示该ex命令的使用方式。

显示edit的使用方式 :exu edit 显示结果如下

+-+-+-+-+-+-+-+-+-+

command begin editing another file

Usage:[Ee][dit][!] [+cmd] [file]

Press any key to continue [: to enter more ex commands]:

分别显示出 简易叙述 使用语法 结束或继续

f[ile] [file_name] 显示档案讯息 ( 与vi命令中的ctrl+g类似 )

[range] g[lobal] /样式/ [ex命令] 将符合条件的样式加以用ex命令处理

可以设定围,若没有围设定表示全部。

若不加命令只会显示符合样式的内容。

如 :g/BSD/ (显示有BSD的行列)

[range] v[lobal] /样式/ [ex命令] 将不符合条件的样式加以用ex命令处理

可以设定围,若没有围设定表示全部。

若不加命令只会显示不符合样式的内容。

如 :g/BSD/ (显示没有BSD的行列)

he[lp] 显示求助讯息

[行数]i[nsert]! 将所输入的文字内容,插入自订的行数.原行数顺延

[行数]j[oin]! 将该指定行与下一行合。

[行数]l[ist] 显示该指定行(围)。

[围]m[ove] line 将某围的内容搬移到某自订行之後。

若将3-5行搬移到第6行之後,指令为:3,5m6

mk[exrc][!] file_name 将缩写、编辑参数及map写到file_name

[Nn][ext][!] [file ...] 继续编辑某一档案。

pre[serve] 以ex -r 能够恢复的形式储存档案。

[Pp]rev[ious][!] 编辑先前的档案。

[围] p[rint] 显示围内容

[行数] pu[t] 将buffer中的内容在特定行贴上。

q[uit][!] 强制离开

rec[over] file 回复先前用pre储存的档案,等同於vi -r filename

:档案放在/var/tmp/r资料夹下

se[t] 设定环境变数,後接想要设定的变数(值)

se[t] [all] 显示全部环境变数

sh[ell] 跳脱编辑,回到shell下,可执行其他动作。

用exit离开shell。

so[urce] file 从档案中读取命令

[range] s[ubstitute] [/被取代的样式/取代样式/]

在某围内将符合的样式用取代样式取代。

su[spend][!] 暂停程式进行,回到shell,用fg回复

st[op][!] 同su!

ve[rsion] 显示vi编辑器的版本。

vi[sual] 进入vi (ex mode用)

viu[sage] [command] 显示vi command的语法,若没有特别指定,则显示全部。

[围] w[rite][!] [>>] [file_name] 将围内容附加到档案file_name。

[围] w[rite][!] [file_name] 将围内容另存新档file_name。

[围] wq[!] [>>] [file_name] 将围的内容附加到档案file_name并离开。

x[!] 强制存档