vi基本操作方法

vi基本操作方法


2023年12月7日发(作者:为什么第一辆车不建议买二手)

vi基本操作方法

错误!未指定书签。

错误!未指定书签。

目录

编定义书签。一vi的操作模式. (1)

二进入vi (1)

三指令模式 (1)

3.1 进入输入模式 (2)

3.2 光标移动 (2)

3.3 视窗移动 (3)

3.4 删除操作 (3)

3.5 拷贝和粘贴操作 (4)

3.6 修改操作 (4)

3.7 指令重复 (4)

3.8 取消前一动作 (5)

3.9 查找字符串 (5)

3.10 查看编辑状况 (5)

3.11 括号匹配 (5)

四保存与退出 (6)

五环境设置 (6)

六执行指令 (7)

七重复指令 (7)

八切换到shell状态 (8)

1

一vi的操作模式

vi提供两种操作模式:输入模式(insert mode)和指令模式(command mode)。在输入模式下,用户可输入文本资料。在指写说明......................................................................................................... 错误!未令模式下,可进行删除、修改等各种编辑动作。

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

在指令模式下,按输入指令(i、a、o等)进入输入模式。

二进入vi

$ vi filename [filename filename]

直接键入“vi + 所要编辑的文件名”,即可对指定的文件进行编辑。

如果指定的文件为新文件,则提示:“New file”,否则显示该文件的当前内容。

filename可以是文件名,也可以是表达式如:*.c,*haha.*

也可以不指定文件名,直接进入编辑界面,这种方法用于编辑一个新文件,但是暂时还没有确定文件应该叫什么名字时。

$ view filename

以只读方式打开文件filename

三指令模式

以下指令集中重要度为“***”的必须掌握的指令,否则无法正常使用vi,重要度为 的为建议掌握的指令,可以更方便地使用vi,其它属于技巧级指令,可以不掌握。

下面所列的所有命令,都必须在指令模式下才能执行,在输入模式下将把输入的字符作为文件内容添加到文件中(ESC除外,因为该命令将从输入模式切换到指令模式)。

3.1 进入输入模式

指令集功能

要度

*** a 在当前光标之后输入

A 在当前行之末输入

***i 在当前光标之前输入

I 在当前行之首输入

***o 在当前行之下新增一行,并在新增行输入 O 在当前行之上新增一行,并在新增行输入其他同样可以起到切换到输入模式的非正规方法:

指令集功能

要度

** s[0 $...] 替换字符串命令,切换到输入模式,输入的内容将替换指

定的内容,直到敲击ESC为止

** c[w 0 $...] 替换单词命令,切换到输入模式,输入的内容将替换指定

的内容,直到敲击ESC为止

以上命令在下面有详细介绍。

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

3.2 光标移动

指令集功能

要度

*** h 向左移动一个字节

*** l 向右移动一个字节

*** j 向下移动一个字节

*** k 向上移动一个字节

* b 左移一个单词,至词首

* w 右移一个单词,至词首

* e 右移一个单词,至词尾

* gg 移动到文档起始位置

* 0 移到当前行行首

* ^ 移动到本行行首第一个可见字符

* $ 移到当前行行尾

+ 移至下一行的行首

- 移至上一行的行首 H 移至视窗的第一行

M 移至视窗的中间一行

L 移至视窗的最后一行

G 移至该文件的最后一行

指令集功能

要度

nG 移至该文档的第n行

N+ 下移n行

n- 上移n行

{ 光标移动到上一个空行

} 光标移动到下一个空行

[[ 光标移动到下一个函数起始位置(’{‘字符所在位置)

]] 光标移动到上一个函数起始位置(’{‘字符所在位置)

(光标移动到上一段落起始位置,空行也被认为是段落(多个

连续空行被认为是一个段落)

)光标移动到下一段落起始位置,空行也被认为是段落(多个

连续空行被认为是一个段落)

以上命令从h到e,均可指定重复操作次数,如5h表示光标向前移动5个字节,10j表示向下移动10行。

3.3 视窗移动

指令集功能

要度

*** + f 视窗下卷一页

*** + b 视窗上卷一页

+ d 视窗下卷半页

+ u 视窗上卷半页

* + e 视窗下卷一行

* + y 视窗上卷一行 zz 将当前行设置为视窗中的中间位置。

3.4 删除操作

指令集功能

要度

*** x 删除光标所在字节

X 删除光标前一字节

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

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

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

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

*** dd 删除光标所在行

D 同d$

dG 删除从当前光标位置知道文档末尾的所有内容。

以上x,X,dw,db,dd可以指定字符/行数,如3x表示删除从当前光标所在位置起的3

个字符,3dd表示删除从当前光标所在行开始的3行。

3.5 拷贝和粘贴操作

指令集功能

要度

** [n]yy 拷贝一行或n行

** p 粘贴刚刚拷贝或者删除(d*命令操作的内容)到当前光标后面,

如果如果是单词则粘贴到当前行,其他内容则在当前光标所在行

后面添加新行进行粘贴

** P 粘贴刚刚拷贝或者删除(nx或者d*命令操作的内容)到当前光

标后面,如果如果是单词则粘贴到当前行,其他内容则在当前光标

所在行后面添加新行进行粘贴

3.6 修改操作

指令集功能 重

要度

*** s修改光标所在字节,修改完成后按Esc键结束

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

* r 替换当前光标所在字节

* R 进入替换状态,直至按Esc键结束

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

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

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

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

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

~ 光标所在字节大小写切换

s,r,cw,cb命令可以指定重复操作次数,如5s表示替换当前光标及其以后的5个字符,3cb表示替换当前光标及其之前的3个单词。

3.7 指令重复

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

指令集功能

要度

*** nx 删除n个字节

*** ndd 删除n行

*** ns 修改n个字节

3.8 取消前一动作

指令集功能

要度

*** u 撤消上一指令的结果

** U 撤销本行上的所有修改

一般vi只保存上一次的修改即本行的所有修改,因此执行u指令时,撤销上次修改,再执行u指令则撤销撤销操作。如果执行了U,则u就没用了。

但是有些机器可能安装了vim软件,改软件保存所有的修改,因此u可以一直进行撤销,想撤销撤销操作是不可能的事情。

3.9 查找字符串

指令集功能

要度

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

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

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

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

# 向上查找当前光标所在位置的单词,如果当前位置为空白,

则为其后的第一个单词

* 向下查找当前光标所在位置的单词,如果当前位置为空白,

则为其后的第一个单词

3.10 查看编辑状况

指令集功能

要度

*** + g 显示正在编辑的文件名、当前光标所在行数、文件总行数、

文件是否被修改

3.11 括号匹配

指令集功能

要度

* % 定位到匹配的“(”、“)”、“{”、“}”

括号匹配符可以用在各种指令中,如d%表示从但前光标位置删除到匹配的“(”“)”

“{”“}”的位置,c%表示替换从当前光标到配置的“(”“)”“{”“}”位置,y%表示拷贝从当前光标位置到其后匹配的“)”或“}”。

当光标不在“(”“)”“{”“}”上时,默认找其后最近的“(”,然后找“{”,如:if ( Dflag != TMD && ( rflag != READABLE ||

wflag != WRITEABLE ) ) {

}

光标在&处,此时若执行d%则效果为:

if ( Dflag != TMD ) {

}

四保存与退出

重要度

指令

功能

*** :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

注:vi环境设置的缺省值可在$HOME/.exrc文件中设置。

六执行指令

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

要度

指令集功能

* :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行

* :10,20y 拷贝第10行至第20行的内容

** :g/old/s//new 在全文档范围内查找每行第一次出现的old字符串并替换为

new字符串

** :g/old/s//new/

g

在全文档范围内查找所有old字符串并替换为new字符串** :g/old/d 删除文档中包含old字符串的行

*** :r filename 读入filename文件内容,并粘贴到当前光标下一行

* :e 重新载入当前文档的内容覆盖当前所有修改,其实就是将所 有自上次保存(或者打开)后的所有修改撤销。

* :$ 光标移动到文档末尾一行行首

* :[w]n[!]

[filename]

切换到下一个文件进行编辑。如果指定了filename则打开指定的filename文件进行编辑,如果filename不存在则默认为创建该新文件。如果没有指定文件名,则只能在vi已经打开多个文件且当前编辑的文件不是最后一个文件时使用该命令。n表示next,w 表示在切换到下一个文件前将当前文件的修改进行保存,!表示强制执行。

* :rew[!] rew即rewind,重新打开第一个文件进行编辑,但是如果当

前文件的修改没有保存的话将失败,如果使用了!,则将舍弃对当

前文档的最近修改(自上次存储或者文件打开以来),强行打开第

一个文件进行编辑。

* :la[!] la即last,打开最后一个文件进行编辑,类似rew,只不过一个

是打开第一个文件,一个是打开最后一个文件。

*** :help [key] 显示vi的帮助信息,如果指定了命令,则显示该命令的帮助

信息。用:exit或:q推出帮助界面。

七重复指令

要度

指令集功能

*** . 重复上一条指令

八切换到shell状态

指令集功能

要度 :sh 切换到shell状态,此时可以执行所有shell命令,知道执行

exit返回文档编辑状态。


发布者:admin,转转请注明出处:http://www.yc00.com/num/1701928432a1159964.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信