Unix / Linux - vi 编辑器
Unix/Linux - vi/vim 编辑器教程
Section titled “Unix/Linux - vi/vim 编辑器教程”vi 编辑器(及其增强版继承者 vim - Vi IMproved)是一个功能强大的、面向屏幕的文本编辑器,在类 Unix 系统中无处不在。虽然它以陡峭的学习曲线而闻名,但掌握其基础知识对于系统管理和开发来说是无价的。
为什么要学习 vi/vim?
- 可用性(Availability):几乎总是存在,即使在最小的系统安装中也是如此。
- 效率(Efficiency):模式编辑允许用少量按键完成复杂操作,一旦学会。
- 资源占用少(Resourcefulness):它需要极少的系统资源。
- 强大(Power):
vim提供了丰富的功能,如语法高亮、多级撤销、分割窗口和庞大的插件支持。
本教程重点介绍 vi 和 vim 共有的基本命令。我们将使用 vim 作为示例,因为这是大多数用户现在遇到的版本。如果你安装了 vim,可以尝试运行 vimtutor 来获取一个优秀的交互式教程。
启动 vim
Section titled “启动 vim”vim filename: 打开filename。如果文件不存在则创建它。vim: 不指定文件打开 vim。vim -R filenameorview filename: 以只读模式打开。
$ vim my_document.txtvim 启动时,你会看到文件内容(或空缓冲区),底部有状态信息。以 ~ 开头的行表示它们不是文件的一部分。
Vim 的强大之处(以及初学时的困惑)源于其模式化特性。你始终处于几种模式之一:
- 普通模式(Normal Mode):默认模式。用于导航、命令、删除、复制、粘贴。按键被解释为命令,而不是文本输入。按
Esc从其他模式返回此模式。 - 插入模式(Insert Mode):用于直接向文件中输入文本。使用
i、a、o等命令进入插入模式。按Esc退出插入模式并返回普通模式。 - 可视化模式(Visual Mode):用于选择文本(按字符
v、按行V、按块Ctrl+V)。普通模式下的命令通常作用于可视化选区。按Esc退出。 - 命令行模式(Command-Line Mode):在普通模式下输入
:进入。允许执行扩展命令,如保存 (:w)、退出 (:q)、搜索/替换 (:s)、设置选项 (:set)。按Enter执行命令,Esc取消。
经验法则:如果你不确定当前处于哪种模式,按一次或两次 Esc 键以确保处于普通模式。
退出 vim
Section titled “退出 vim”在普通模式下,使用命令行模式 (:) 命令:
:q- 退出(如果文件有未保存的更改,则会失败)。:q!- 不保存退出(放弃更改)。请务必谨慎使用!:w- 写入(保存)当前文件。:w filename- 写入(保存)到名为filename的新文件。:wq- 写入(保存)然后退出。:x- 如果有更改则写入(保存),然后退出(类似于:wq)。
普通模式下的快捷键(无需输入 :):
ZZ- 保存并退出(等同于:wq或:x)。ZQ- 不保存退出(等同于:q!)。
基本导航(普通模式)
Section titled “基本导航(普通模式)”确保你处于普通模式 (Esc)。
| 按键 | 操作 |
|---|---|
| tds | |
| tds | |
| tds | |
| tds | |
| tds | |
| tds | |
| tds | |
| tds | |
| tds | |
| tds | |
| tds | |
| tds | |
| tds | |
| tds | |
| tds | |
| tds | |
| tds |
许多导航命令可以加上计数前缀(例如,5j 向下移动 5 行,3w 向前移动 3 个单词)。
进入插入模式(从普通模式)
Section titled “进入插入模式(从普通模式)”| 命令 | 操作 |
|---|---|
| tds | |
| tds | |
| tds | |
| tds | |
| tds | |
| tds |
记住在插入文本后按 Esc 返回普通模式。
删除文本(普通模式)
Section titled “删除文本(普通模式)”| 命令 | 操作 |
|---|---|
| tds | |
| tds | |
| tds | |
| tds | |
| tds | |
| tds | |
| tds | |
| tds |
将 d 与移动命令结合使用(例如,d2j 删除当前行和下一行,df<char> 删除直到下一个 <char> 出现的位置)。可以加上计数前缀(例如,3dd 删除 3 行)。
改变文本(普通模式)
Section titled “改变文本(普通模式)”改变命令通常会删除文本,然后进入插入模式。
| 命令 | 操作 |
|---|---|
| tds | |
| tds | |
| tds | |
| tds | |
| tds | |
| tds | |
| tds |
将 c 与移动命令结合使用(例如,c2w 改变接下来的两个单词)。可以加上计数前缀(例如,3cc 改变 3 行)。
复制 (Yank) 与粘贴 (Put)(普通模式)
Section titled “复制 (Yank) 与粘贴 (Put)(普通模式)”y 代表 ‘yank’(复制)。
| 命令 | 操作 |
|---|---|
| tds | |
| tds | |
| tds | |
| tds | |
| tds |
将 y 与移动命令结合使用。可以使用计数(例如,3yy 复制 3 行)。请注意,d 命令也会将删除的文本放入同一缓冲区中供粘贴。
使用可视化模式: 进入可视化模式(v、V、Ctrl+V),使用导航键选择文本,然后按 d 删除选区,按 y 复制选区,或按 c 改变选区。
撤销与重做(普通模式)
Section titled “撤销与重做(普通模式)”u- 撤销上一次更改。Vim 支持多级撤销;持续按u可以进一步回退。Ctrl+r- 重做上一次撤销的更改。
搜索(普通模式)
Section titled “搜索(普通模式)”/<pattern>- 向前搜索<pattern>。按Enter。?<pattern>- 向后搜索<pattern>。按Enter。n- 在同一方向重复上一次搜索。N- 在相反方向重复上一次搜索。
有用设置(使用 :set 命令):
:set ic- 搜索时忽略大小写。:set noic- 大小写敏感搜索(默认)。:set hls- 高亮所有搜索匹配项。:set is- 增量搜索(边输入边显示匹配项)。
要清除搜索高亮::noh (no highlight)。
替换(命令行模式)
Section titled “替换(命令行模式)”语法::[range]s/search/replace/[flags]
:s/old/new/- 替换当前行中old的第一次出现为new。:s/old/new/g- 替换当前行中old的所有出现为new(g= 全局)。:%s/old/new/g- 替换整个文件中old的所有出现为new(%= 所有行范围)。:%s/old/new/gc- 替换文件中所有出现,但对每次替换进行确认 (c)。
运行 Shell 命令
Section titled “运行 Shell 命令”在命令行模式下:
:! command- 在 shell 中执行command并显示输出。按 Enter 返回 vim。(例如,:! ls -l,:! python script.py):r !command- 读取command的输出并将其插入到当前行下方。:w !command- 将文件内容作为标准输入写入到command。
有用的 :set 选项
Section titled “有用的 :set 选项”在命令行模式下:
:set number或:set nu- 显示行号。:set nonumber或:set nonu- 隐藏行号。:set autoindent或:set ai- 自动缩进新行。:set expandtab或:set et- 使用空格代替 Tab 字符。:set tabstop=4或:set ts=4- 设置 Tab 宽度为 4 个空格。:set shiftwidth=4或:set sw=4- 设置缩进宽度为 4 个空格。:syntax on- 启用语法高亮(通常基于文件类型自动启用)。:help option- 获取特定选项的帮助(例如,:help tabstop)。
要使设置永久生效,请将它们添加到你的 vim 配置文件中,通常是 ~/.vimrc。
这涵盖了基础知识。vim 功能极其深入;探索 vimtutor、内置帮助 (:help) 和在线资源,学习更多高级功能。