进入 vi 编辑器
vi 是 Unix/Linux 系统中最经典的文本编辑器之一,其后续增强版本 vim(Vi IMproved)更为常用。以下命令适用于 vi 及 vim。
启动 vi 并打开文件
vi filename:打开或新建文件,光标置于第一行首。vi +n filename:打开文件,光标置于第 n 行首。vi + filename:打开文件,光标置于最后一行首。vi +/pattern filename:打开文件,光标置于第一个匹配 pattern 的字符串处。vi -r filename:恢复在上次编辑时因系统崩溃而未保存的文件。vi file1 file2 …:依次打开多个文件,使用:n切换到下一个文件,:N切换到上一个文件。
移动光标
基本移动
h或←:光标左移一个字符。l或→:光标右移一个字符。k或↑:光标上移一行。j或↓:光标下移一行。0(数字零):光标移至当前行首。^:光标移至当前行第一个非空白字符。$:光标移至当前行尾。
按词移动
w或W:光标移至下一个单词的词首。b或B:光标移至上一个单词的词首。e或E:光标移至当前或下一个单词的词尾。
按行移动
gg:光标移至文件第一行。G:光标移至文件最后一行。nG或:n:光标移至第 n 行。n+:光标下移 n 行。n-:光标上移 n 行。
屏幕内移动
H:光标移至屏幕顶行。M:光标移至屏幕中间行。L:光标移至屏幕最后行。
屏幕滚动
Ctrl + f:向文件尾翻一屏。Ctrl + b:向文件首翻一屏。Ctrl + d:向文件尾翻半屏。Ctrl + u:向文件首翻半屏。zz:将当前行置于屏幕中央。
插入与替换文本
进入插入模式
i:在光标前插入。I:在当前行首插入。a:在光标后插入。A:在当前行尾插入。o:在当前行下方新开一行并插入。O:在当前行上方新开一行并插入。
替换与修改
r:替换当前字符(单次)。R:进入替换模式,连续替换字符直至按Esc。s:删除当前字符并进入插入模式。S或cc:删除当前行并进入插入模式。cw:修改从光标到当前单词词尾的内容。
删除文本
x:删除光标所在字符。X:删除光标前一个字符。dd:删除当前行。ndd:删除当前行及其后 n-1 行。dw:删除从光标到下一个单词词首的内容。d$或D:删除从光标到行尾的内容。d0:删除从光标到行首的内容。
搜索与替换
搜索
/pattern:从光标处向文件尾搜索 pattern。?pattern:从光标处向文件首搜索 pattern。n:重复上一次搜索(同方向)。N:重复上一次搜索(反方向)。
替换(在命令模式下)
:s/old/new/:将当前行第一个 old 替换为 new。:s/old/new/g:将当前行所有 old 替换为 new。:%s/old/new/g:将全文所有 old 替换为 new。:n1,n2s/old/new/g:将第 n1 到 n2 行中所有 old 替换为 new。
复制、粘贴与撤销
yy:复制当前行。nyy:复制当前行及其后 n-1 行。p:在光标后粘贴。P:在光标前粘贴。u:撤销上一次操作。Ctrl + r:重做上一次撤销的操作。
文件操作与退出
:w:保存文件。:w filename:另存为 filename。:q:退出 vi(如果文件已保存)。:q!:强制退出,不保存修改。:wq或:x或ZZ:保存并退出。:e filename:打开另一个文件进行编辑。
其他实用命令
:set number或:set nu:显示行号。:set nonumber或:set nonu:隐藏行号。:set ignorecase或:set ic:搜索时忽略大小写。:!command:执行 shell 命令,按回车返回 vi。:r filename:将文件内容插入到光标下方。:r !command:将命令的输出插入到光标下方。
提示:vi 有三种基本模式——普通模式(Normal)、插入模式(Insert)和命令模式(Command)。大部分操作在普通模式下进行,按
i进入插入模式,按Esc返回普通模式,在普通模式下输入:进入命令模式。建议新手先掌握基本的光标移动、插入、保存和退出命令。