UNIX下VI编辑器使用
作者:岁月静好秋意浓
时间:2026-06-02
浏览:0
vi 编辑器核心命令速查 文本编辑器几乎是所有计算机系统里最常用的工具了。在 UNIX 环境下,编辑器有不少,比如 ex、sed,但用的人最多、流传最广的还得是 vi。vi 的命令确实繁杂,很多人刚上手时会觉得无从下手。下面这份整理涵盖了 vi 在三种模式下的核心命令,希望能帮大家快速上手,也欢迎补
vi 编辑器核心命令速查
文本编辑器几乎是所有计算机系统里最常用的工具了。在 UNIX 环境下,编辑器有不少,比如 ex、sed,但用的人最多、流传最广的还得是 vi。vi 的命令确实繁杂,很多人刚上手时会觉得无从下手。下面这份整理涵盖了 vi 在三种模式下的核心命令,希望能帮大家快速上手,也欢迎补充指正。
文本输入模式
在 vi 的文本输入模式下,操作逻辑非常直白:
- a:在光标后追加文本
- A:在行末追加文本
- i:在光标前插入文本
- o:在光标下方新开一行
末行模式
末行模式(按 : 进入)是 vi 强大的命令中心:
- :w:写缓冲区,保存更改,继续在 vi 中工作
- :w new_filename:把缓冲区内容写入新文件 new_filename
- :wq 或 ZZ:写缓冲区,保存修改,然后退出 vi
- :q!:不保存修改,强制退出
- :wq!:写缓冲区,保存修改后强制退出 vi(如果你是文件所有者,会忽略只读属性)
- e!:取消自上次保存以来所做的所有修改
- u:撤销最近的一次编辑
命令模式(光标移动)
命令模式下,移动光标的操作是日常使用频率最高的:
- j(或向下箭头):向下移动一行
- k(或向上箭头):向上移动一行
- h(或向左箭头):向左移动一个字符
- l(或向右箭头):向右移动一个字符
- 空格:向右移动一个字符
- w:向前移动一个单词(包括标点)
- b:向后移动一个单词(包括标点)
- $:移动到行末
- 0(零)或 ^:移动到行首
- 回车:移动到下一行首
编辑与删除操作(命令模式 & 末行模式)
编辑和删除是 vi 的核心生产力所在:
- x(小写):删除光标所在处的字符
- dw:删除一个单词
- 3dw:删除三个单词
- dd:删除光标所在的行
- 3dd:删除三行
- yy:复制(拉出)一行到剪贴板
- p(小写):把复制的内容粘贴到当前行下方
- P(大写):把复制的内容粘贴到当前行上方
- :set nu:显示行号
- :set nonu:隐藏行号
- :set showmode:显示当前操作模式
- :set noshowmode:关闭模式显示
- :set:显示所有 vi 变量
- :set all:显示所有可能的 vi 变量及其当前值
- G:到达文件的最后一行
- :21:到达第 21 行
- /string:向前搜索字符串 string
- ?string:向后搜索字符串 string
- n:查找匹配的下一个字符串
Solaris vi 命令专篇
以下是一些更细分的命令集,尤其适用于更复杂的编辑场景。
进入 vi 的命令
- vi filename:打开或新建文件,光标置于第一行首。
- vi +n filename:打开文件,光标置于第 n 行首。
- vi + filename:打开文件,光标置于最后一行首。
- vi +/pattern filename:打开文件,光标置于第一个与 pattern 匹配的串处。
- vi -r filename:上次编辑时系统崩溃,用此命令恢复 filename。
- vi filename ... filename:打开多个文件,依次编辑。
光标移动类命令(补充)
- 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:(注意是数字零)光标移至当前行首
- $:光标移至当前行尾
屏幕翻滚类命令
- Ctrl+u:向文件首翻半屏
- Ctrl+d:向文件尾翻半屏
- Ctrl+f:向文件尾翻一屏
- Ctrl+b:向文件首翻一屏
- nz:将第 n 行滚至屏幕顶部(不指定 n 则将当前行滚至屏幕顶部)
文本插入与替换类命令
- i:在光标前插入
- I:在当前行首插入
- a:在光标后插入
- A:在当前行尾插入
- o:在当前行之下新开一行
- O:在当前行之上新开一行
- r:替换当前字符(只替换一次)
- R:替换当前字符及其后的字符,直到按 ESC 键
- s:从当前光标位置开始,用输入文本替代指定数目的字符
- S:删除指定数目的行,并用输入文本代替
- ncw 或 nCW:修改指定数目的单词
- nCC:修改指定数目的行
删除命令(二)
- ndw 或 ndW:删除从光标处开始的 n 个字
- do:删除至行首
- d$:删除至行尾
- ndd:删除当前行及其后 n-1 行
- x 或 X:删除一个字符(x 删除光标后,X 删除光标前)
- Ctrl+u:在输入方式下删除刚输入的文本
搜索与替换命令
- /pattern:从光标处向文件尾搜索 pattern
- ?pattern:从光标处向文件首搜索 pattern
- n:在同一方向重复上一次搜索
- N:在反方向重复上一次搜索
- :s/p1/p2/g:将当前行中所有 p1 替换为 p2
- :n1,n2s/p1/p2/g:将第 n1 至 n2 行中所有 p1 替换为 p2
- :g/p1/s//p2/g:将文件中所有 p1 替换为 p2
选项设置
- 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!:不保存文件并强制退出
- :!command:执行 shell 命令 command
- :n1,n2 w!command:将 n1 到 n2 行的内容作为 command 的输入并执行(若不指定范围,则用整个文件内容)
- :r!command:将 command 命令的输出结果放到当前行
寄存器操作
- "?nyy:将当前行及其下 n 行的内容保存到寄存器 ? 中(? 为字母,n 为数字)
- "?nyw:将当前行及其下 n 个字保存到寄存器 ? 中
- "?nyl:将当前行及其下 n 个字符保存到寄存器 ? 中
- "?p:取出寄存器 ? 中的内容放到光标位置处(? 可以是字母或数字)
- ndd:将当前行及其下共 n 行文本删除,并将删除内容放到 1 号删除寄存器中。
作者最新文章
3dmax动画制作教程:小球滚动实例与完整制作步骤
2026-09-22 15:56
PDF怎么解密去密码?处理前要注意哪些限制?
2026-09-02 19:09
魅族MX6(3GB RAM/全网通)忘了手机密码怎么办?
2026-08-25 13:53
我国大型民用水陆两栖飞机 AG600“鲲龙”T5 测试真机训练开飞
2026-08-25 10:20
美图创始人吴欣鸿:AI工具正在走向“自动驾驶”
2026-08-25 09:40
热门文章
更多
精品专题
更多
Mac软件
更多
WINDOWS
更多


































