关键要点
- vi 和 vim 是 Linux 的文本编辑器,vim 是 vi 的增强版,支持更多功能。
- 它们有三种模式:命令模式、插入模式和底线命令模式。
- 常用命令包括移动光标(如
h左移)、编辑(如i插入)、保存退出(如:wq)。 - vim 比 vi 多支持语法高亮、多级撤销和跨平台使用。
基本概念
vi 是 Unix-like 系统内置的文本编辑器,适合基本文本编辑。vim 是 vi 的升级版,增加了编程支持如语法高亮,适合开发者。
使用步骤
- 启动:输入
vim 文件名打开或创建文件。 - 模式切换:在命令模式下按
i进入插入模式编辑,按Esc返回命令模式。 - 保存退出:在命令模式下输入
:wq保存并退出,或:q!强制退出不保存。
常见命令示例
- 移动:
h左,j下,k上,l右。 - 编辑:
dd删除行,yy复制行,p粘贴。 - 搜索:
/关键词向前找,n重复。
详细报告
Linux 中的 vi 和 vim 是两种强大的文本编辑器,尤其适合在命令行环境下使用。以下是对它们的全面讲解,涵盖基本概念、模式、命令、区别以及高级功能,基于可靠的在线资源整理。
1. 概述与基本概念
- vi:vi 是所有 Unix-like 系统中内置的标准文本编辑器。它是一种多模式编辑器,支持命令模式、插入模式和底线命令模式,适合基本文本编辑。
- vim:vim 是 vi 的升级版本,最初是 Vi IMitation(vi 模仿品),后来功能增强后改名为 Vi IMproved。它不仅兼容 vi 的所有命令,还增加了许多新特性,如多级撤销、语法高亮、可视化操作等,广泛用于编程和复杂文本编辑。vim 由布拉姆·莫勒纳尔(Bram Moolenaar)于 1991 年首次发布,目前是开源软件,按 Vim 许可证发布,建议用户捐款支持乌干达艾滋病儿童 (Vim – 维基百科,自由的百科全书)。
2. vi/vim 的模式
vi 和 vim 共有三种基本模式:
- 命令模式 (Command Mode):默认模式,用于移动光标、删除文本、复制粘贴等操作。
- 插入模式 (Insert Mode):用于输入和编辑文本,按
Esc返回命令模式。 - 底线命令模式 (Command-Line Mode):通过在命令模式下输入
:进入,用于保存文件、退出编辑器、搜索替换等操作。
此外,vim 还支持额外的模式,如可视模式(Visual Mode),用于块选择和区域操作。
3. 基本使用与常见命令
3.1 启动与文件操作
- 打开文件:
vi filename或vim filename,如果文件不存在,会创建新文件。 - 默认 vi 在 CentOS 7 等系统中被 vim 替换,需用
/bin/vi执行纯 vi。 - vim 创建交换文件(如
.filename.swp)用于恢复,位于编辑文件目录。
3.2 命令模式常见命令
以下是常用命令,数字前缀表示重复次数(如 20dd 删除 20 行):
- 移动光标:
h或←:左移一个字符j或↓:下移一个字符k或↑:上移一个字符l或→:右移一个字符Ctrl + f:向下翻页(类似 Page Down)Ctrl + b:向上翻页(类似 Page Up)Ctrl + d:向下半页Ctrl + u:向上半页0或Home:移动到行首$或End:移动到行尾H:移动到屏幕顶行M:移动到屏幕中行L:移动到屏幕底行G:移动到文件末尾gg:移动到文件开头(等同于1G)nG:移动到第 n 行(如20G跳到第 20 行)n<Enter>:向下移动 n 行- 编辑操作:
i:在光标前进入插入模式I:从行首进入插入模式a:在光标后进入插入模式A:从行尾进入插入模式o:在光标下插入新行,进入插入模式O:在光标上插入新行,进入插入模式r:替换光标处一个字符R:连续替换,进入替换模式x:删除光标处字符X:删除光标前一个字符dd:剪切当前行ndd:剪切向下 n 行(如20dd)yy:复制当前行nyy:复制向下 n 行(如20yy)p:粘贴在光标下P:粘贴在光标上u:撤销上一次操作Ctrl + r:重做(恢复撤销).:重复上一次操作- 搜索与替换:
/word:向前搜索 “word”?word:向后搜索 “word”n:重复上次搜索(向前)N:重复上次搜索(向后):%s/old/new/g:全局替换 “old” 为 “new”:n1,n2s/old/new/g:在 n1 到 n2 行范围内替换(如:10,20s/old/new/g)
3.3 插入模式操作
- 在插入模式下:
Enter:插入换行Back Space:删除光标前字符Del:删除光标后字符Esc:返回命令模式
3.4 底线命令模式常见命令
:w:保存文件:q:退出(如果有未保存修改会提示):q!:强制退出,不保存:wq或:x:保存并退出:wq!:强制保存并退出:set nu:显示行号:set nonu:隐藏行号:r filename:读取文件内容插入当前光标位置:w filename:将当前文件保存为新文件:n1,n2 w filename:将 n1 到 n2 行保存为新文件
4. vi 和 vim 的区别
以下是 vi 和 vim 的主要区别,基于可靠资源整理:
| 方面 | vi | vim |
|---|---|---|
| 定义 | Unix 下的多模式文本编辑器 | vi 的升级版,兼容所有 vi 命令,并增加新特性 |
| 平台支持 | 仅运行于 Unix-like 系统 | 可运行于 Unix、Windows、Mac 等多种平台 |
| 撤销功能 | 仅支持单级撤销(u 撤销最后一次操作) | 支持多级撤销(u 和 Ctrl + r) |
| 语法高亮 | 不支持 | 支持语法高亮,以不同颜色显示代码,便于编程 |
| 可视化操作 | 仅支持终端操作 | 支持终端、X Window、Mac OS、Windows 等环境 |
| 兼容性 | 基础编辑器 | 完全兼容 vi,在某些情况下可作为 vi 使用 |
| 使用场景 | 适合基本文本编辑 | 更适合编码和复杂文本编辑 |
| 模式 | 3 种模式:命令模式、文本输入模式、底线命令模式 | 4 种模式:普通模式、插入模式、命令模式、可视模式 |
5. vim 的高级功能
vim 相比 vi 提供了许多高级功能,适合高级用户:
- 块选择:使用
v(字符选择)、V(行选择)、Ctrl + v(块选择)进入可视模式,然后用y复制、d删除、p粘贴块。 - 多文件编辑:
vim file1 file2同时编辑多个文件,使用:n(下一个文件)、:N(上一个文件)、:files(列出打开文件)。 - 窗口分割:
:sp [filename]水平分割窗口,:vsp [filename]垂直分割,Ctrl + w + j/k切换窗口,Ctrl + w + q关闭窗口。 - 自动完成:
Ctrl + x -> Ctrl + n从当前文件内容完成,Ctrl + x -> Ctrl + f从文件名完成,Ctrl + x -> Ctrl + o语法补全(需正确文件扩展名,如.html为 CSS 补全)。 - 环境设置:在
~/.vimrc文件配置,示例: set hlsearch:高亮搜索结果set autoindent:自动缩进set nu:显示行号set bg=dark/light:设置背景颜色syntax on/off:开启/关闭语法高亮- vim 记录操作历史在
~/.viminfo,支持持久化搜索高亮和光标位置。
6. 使用示例
- 创建并编辑文件:
$ vim runoob.txt进入命令模式,按i编辑,按Esc返回命令模式,输入:wq保存并退出。 - 搜索替换:输入
/vbird搜索 “vbird”,按n找下一个,用:%s/vbird/VBIRD/g全局替换为 “VBIRD”。 - 块操作:
Ctrl + v选择矩形区域,按y复制,移动光标后按p粘贴。
7. 注意事项
- vi/vim 数字前缀有特殊意义,如
20dd删除 20 行,30j下移 30 行。 - 修改未保存文件可强制退出
:q!,但建议先保存以免丢失数据。 - vim 创建交换文件(如
.filename.swp)用于恢复,删除后可避免提示。
8. 总结
vi 和 vim 是 Linux 系统中不可或缺的文本编辑工具。vi 适合基本文本编辑,而 vim 提供更多高级功能,尤其适合编程和复杂文本处理。如果需要功能更强大的编辑器,建议使用 vim。