Linux 入门 | vi基本操作

本文介绍了Linux中的vi编辑器基本操作,包括vi的两种工作模式、移动光标、翻页、跳转到特定位置、括号配对、设置书签、删除与替换文本、撤销与重复操作、文件命令、段落操作、剪贴板使用以及其他常用命令。通过这些命令,可以帮助初学者更好地掌握vi编辑器。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

声明:本文首发于个人公众号:写点代码

1 vi的工作方式是命令方式和输入方式

 

 

处于命令方式时,用户键入的内容被当作vi的命令来解释,一般处于命令方式下按键无回显(以冒号打头的命令和查找命令/除外)。编辑命令i,a等,可以从命令方式转

到输入方式。处于输入方式时,用户键入的所有内容全部作为输入的正文内容,用户可以输入多行,每输入完一行后按回车转入下一行,正文输入时有回显。输入完毕按键盘左上角的Esc键,返回到命令方式。

 

2 命令子集

(1)单字符移动:左下上右;

h 光标左移一列;j 光标下移一行;k 光标上移一行;l 光标右移一列。在vi中有许多命令可以在命令前加上一个整数,标志这个命令连续执行多少遍,例:5h 光标左移5列

 

(2)翻页

Ctrl-B: 向后翻页(Backward);Ctrl-F: 向前翻页(Forward);Ctrl-U: 向上翻半页(Up);Ctrl-D: 向下翻半页(Down)。同样可以加数字,比如6Ctrl-F:向前翻6页

(3)将光标移至当前行首 ^将光标移至当前行尾 $ ,需要使用ctrl辅助

 

(4)移到右一个单词 w W,移到左一个单词 b B

使用这种方法,向左/右移动光标,尤其是需要连续移动光标定位到某一位置时,比单字

符移动命令更快和更有效。w,b与W,B的区别是它们对“单词”的定义不同。小写命令的命令w和b,以非字母,数字,下划线之外的所有字符作为“单词”分界符。大写命令的命令W和B,仅以空白符(空格或者制表符)作为“单词”分界符。同前述其它命令类似,也可以使用类似6w 3W 5b 10B命令。

 

(5)移到指定的行

 

:476 将光标定位于第476行 :1 将光标定位于第1行(文件首) :$ 将光标定位于文件尾  :$-10 将光标定位于文件倒数第10行

在描述行号时,可以使用圆点(.)代表当前行号,使用$代表最后一行的行号,而且

可以使用整数加减法,如前述的最后一例。

(6) 括号配对命令 %

先把光标移到一个花括号(或圆括号,或方括号)上,按%键,则光标自动定位到与它

配对的那一个括号。

(7)设置书签

vi允许设置以单个英文字母命名的最多26个标记(mark),许多编辑器把这种功能叫

“书签(bookmark)”。vi的书签记忆了一个行号。设置书签的命令是m。例如:按下按键ma,尽管终端上没什么特别的显示信息,但是,vi已经将当前行号记为名字为a的书签。最多可以使用26个书签,设置的所有书签,在vi退出后,不再保存。 vi许多编辑命令可以使用命名的书签,将光标移动到指定书签处的命令是'(单引号) 例: 'a 连续按下单引号和字母a,光标会移动到书签a处。

(8)删除

① 删除当前字符的命令:x

类似的,命令5x删除从当前光标开始的5个字符。

② 删除当前行的命令:dd

类似的,命令3dd删除从当前行开始的3行。

③ 与光标移动命令相关的删除命令

d'e 从当前光标处删除到书签e处(书签e需要事先用命令m设置好)

d$ 从当前光标处删除到行尾

d^ 从当前光标处删除到行首

dw 删除一个单词

d% 将光标移动到一个括号字符上,删除和它配对的括号括起的段落。

(9)字符替换

替换光标处字符的命令是r。

例:ra命令将当前光标处字符替换为a。

如果希望将当前光标处开始的三个字符依次替换为abc,则需要按命令rarbrc。

替换多个字符的命令是R。

例:命令Rabcdef,然后按Esc键

该命令把从当前光标开始的字符依次替换为abcdef,用Esc来结束多字符替换命

令。这类似于以“覆盖”(overwrite)方式进入编辑状态。

(10)取消和重复

① 命令u

取消上一次的编辑操作。例如:误删除了一段正文,用u命令可以恢复到删除前的状

态(undo)。再如:把文件中的所有abc字符串替换成xyz字符串,用u命令可恢复到替换

前状态。

vi的取消操作,只能回退一次,不像现在Windows上流行的很多编辑软件那样,可

以回退很多步。许多新版本的vi对这个问题作了改进。

② 命令.

重复上一次的编辑操作。按圆点键,可以重复上一次的编辑操作。例如:按3dd命令

删除了三行,然后按圆点键就再删除三行,如果接着连续按圆点键,则每按一次删除三

行。

(11)文件命令

① 存盘退出 ZZ

存盘退出 :wq

② 存盘不退出 :w

③ 不存盘退出 :q!

④ 读入一个文件插入到当前行之下 

:r a.c

⑤ 写文件

把第50行至文件尾的内容写到文件junk中 

:50,$w junk

如果文件junk事先已经存在,使用下述命令强制把它覆盖掉

:50,$w! junk

如果编辑了文件之后,无法存盘(例如:文件没有写权限),那么可以用

:w file1

将当前编辑好的文件内容存到一个另个文件中。

 

(12)段落的删除,复制和移动

① 删除(delete)

:10,50d 删除第10-50行

:1,.d 删除文件首至当前行的部分

② 复制(copy)

:5,10co56 复制第5-10行到第56行之下

③ 移动(move)

:8,34m78 移动第8-34行到第78行之下

行号描述时除了可以使用圆点代表当前行,$代表最后一行,还可以使用“书签”,

例如:下面的命令中'e代表书签e的行号。

:'e,.d

(13)剪贴板

将缓冲区中保留的信息粘贴到光标处,使用p命令(put或paste)。

除了上述的d命令之外,还有“抽取(yank)”命令y,它仅仅把指定的信息拷贝到缓冲

区,但不删除它们。用法和d命令类似。

在信息保留到缓冲区之后,就可以使用p命令,将它们粘贴到文件合适的位置。

vi除了使用这个默认的缓冲区之外,还有26个用单个英文字母命名的有名字的缓冲

区。与缓冲区有关的三个命令是d,y,p,在使用有名字缓冲区时,在这些命令前加两个

字符的前缀,一个字符是双引号,一个字符是英文字母代表的缓冲区名字。例如:

"a3dd 删除当前行开始的3行,并把信息保留到a缓冲区中。

"by'e 拷贝当前光标到书签e处内容到b缓冲区中。

"ky%

光标定位在一个括号字符上,拷贝从此开始到和它配对的括号处的段落到缓冲区k中.

"kp

粘贴出缓冲区k中的内容。

(14)其它命令

① 两行合并J (大写字母,Join)

把当前行下面的行合并到当前行。

② 刷新屏幕显示Ctrl-L

当正在编辑一个文件时,由于其它用户给本终端发送的信息显示到屏幕上,或者某

一后台进程的输出冲掉了当前的vi显示。那么,在阅读完这些“突然”出现的信息后,

按Ctrl-L键,恢复vi原先的屏幕显示。在more命令中也介绍过类似的功能。

③ 状态显示 Ctrl-G

在屏幕最下面一行列出正在编辑的文件的名字,总行数,当前行号,文件是否被修

改过等信息

 

(15)模式查找

在vi的模式查找命令中,使用“正则表达式”来描述一个字符串模式。命令格式为:

/模式

例:/[0-9][0-9]*

从文件当前位置开始向下查找能与正则表达式[0-9][0-9]*匹配的字符串,找到

后,光标将定位于该处。继续查找命令:n和N。小写字母n键,向下继续查找下一个(next),查到文件尾后,自动折到文件首继续向下查找(循环搜索)。大写字母N,向上继续查找下一个,查到文件头后自动折到文件尾继续向上查找(循环搜索)。 

(16)模式替换

① 基本用法

在vi的模式替换命令(substitution)中,也使用“正则表达式”来描述一个字符串模式。

命令格式为:

:行号,行号s/模式/替换字符串/g

其中,模式描述使用正则表达式。替换命令结束后在屏幕的最下面的状态行显示替换次

 

参考内容:书籍《实用UNIX教程》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值