跳到主要内容

Vi 文本编辑

在 Linux 系统下,文本编辑常用的命令包括:

  1. vi:vim 的前身,一个基础的文本编辑器。

    vi filename
  2. cat:用于显示文件内容,但不支持编辑。

    cat filename
  3. more:另一个分页器,用于查看文件内容。

    more filename

什么是 vi?

UNIX 操作系统自带的默认编辑器称为 vi(可视化编辑器)。[UNIX 环境的替代编辑器包括 pico 和 emacs,它是 GNU 的产品。]

  • UNIX vi 编辑器是全屏编辑器,有两种操作模式:
    1. 命令模式命令导致对文件采取操作,以及
    2. 插入模式,将输入的文本插入到文件中。

在命令模式下,输入的每个字符都是一个命令,对正在编辑的文本文件执行某些操作;在命令模式下键入的字符甚至可能导致 vi 编辑器进入插入模式。在插入模式下,输入的每个字符都会添加到文件中的文本中;按、<Esc> ( Escape ) 键可关闭插入模式。

虽然 vi 命令有很多,但对于 vi 初学者来说,通常只需要其中的一小部分就足够了。为了帮助此类用户,此网页包含基本 vi 命令的示例。下表中最基本和最有用的命令用星号(*或星号)标记。经过练习,这些命令应该变得自动。

注意: UNIX 和 vi 都区分大小写。确保不要使用大写字母代替小写字母;结果不会是你所期望的。

进入和退出 vi

开始 vi

要对文件使用 vi ,请输入 vi filename。如果名为 filename 的文件存在,则显示该文件的第一页(或屏幕);如果该文件不存在,则会创建一个空文件和屏幕,您可以在其中输入文本。

*   vi 文件名   编辑从第 1 行开始的文件名
vi -r 文件名 恢复系统崩溃时正在编辑的文件名

退出 vi

通常,当您离开 vi 时,会保存新的或修改的文件。但是,也可以退出 vi 而不保存文件。

注意:每当键入冒号 (:) 时,光标就会移动到屏幕底部。此类命令可通过按<Return>(或<Enter>)键来完成。

*   :x  退出vi,将修改后的文件写入原始调用中指定的文件
:wq 退出vi,将修改后的文件写入原始调用中指定的文件
:q 退出(或退出)vi
* :q! 退出vi,即使尚未为此 vi 调用保存最新更改

移动光标

与许多 PC 和 MacIntosh 编辑器不同,鼠标不会在 vi 编辑器屏幕(或窗口)内移动光标。您必须使用下面列出的键盘命令。在某些 UNIX 平台上,也可以使用方向键;然而,由于 vi 在设计时考虑了 Qwerty 键盘(不包含箭头键),因此箭头键有时会在 vi 中产生奇怪的效果,应避免使用。

*   j   或 <回车> [或向下箭头]  将光标向下移动一行
* k [或向上箭头] 将光标向上移动一行
* h 或 <空格> [或左箭头] 将光标向左移动一个字符
* l 或 <空格> [或右箭头] 将光标向右移动一个字符
* o 将光标移动到当前行的开头(有光标的行)
* $ 将光标移至当前行末尾
w 将光标移至下一个单词的开头
b 将光标移回前一个单词的开头
:0 <回车>或1G 将光标移动到文件的第一行
:n <回车>或nG 将光标移至第 n行
:$ <回车>G 将光标移动到文件的最后一行

添加、更改和删除文本

以下命令允许您插入和添加文本。每个命令都会将 vi 编辑器置于插入模式;因此,必须按下<Esc>键来终止文本输入并将 vi 编辑器返回到命令模式。

插入或添加文本

*   i	在光标前插入文本,直到按下<Esc>
I 在当前行的开头插入文本,直到按下<Esc>
* a 在光标后追加文本,直到按下<Esc>
A 将文本附加到当前行末尾,直到按下<Esc>
* o 打开文本并将文本放入当前行下方的新行中,直到按下<Esc>
* O 打开文本并将文本放在当前行上方的新行中,直到按下<Esc>

更改文本

以下命令允许您修改文本。

*   r   替换光标下的单个字符(无需<Esc>
R 替换字符,从当前光标位置开始,直到按下<Esc>
cw 从光标下的字符开始,用新文本更改当前单词 ,直到按下<Esc>
cNw 更改以光标下的字符开头的 N 个单词,直到按下<Esc>;例如,c5w 改变 5 个单词
C 更改(替换)当前行中的字符,直到按下<Esc>
cc 更改(替换)整个当前行,按下<Esc>时停止
Ncc or cNc 更改(替换)从当前行开始的接下来的 N 行, 当按下 <Esc> 时停止

删除文本

以下命令允许您删除文本。

*   X	删除光标下的单个字符
Nx 删除N个字符,从光标下的字符开始
dw 删除以光标所在字符开头的单个单词
dNw 删除以光标处字符开头的 N个单词;例如,d5w删除 5 个单词
D 从当前光标位置开始删除该行的其余部分
* DD 删除整个当前行
Ndd 或 dNd 删除N行,从当前行开始;例如,5dd删除 5

剪切和粘贴文本

以下命令允许您复制和粘贴文本。

*   yy	将当前行复制(复制、剪切)到缓冲区中
NYy 或 yNy 将接下来的 N 行(包括当前行)复制(复制、剪切)到缓冲区中
p 将缓冲区中的行放入(粘贴)到当前行之后的文本中

参考链接

https://www.cs.colostate.edu/helpdocs/vi.html