Linux vi/vim
关键要点
- 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。