Linux vi/vim

关键要点

  • vi 和 vim 是 Linux 的文本编辑器,vim 是 vi 的增强版,支持更多功能。
  • 它们有三种模式:命令模式、插入模式和底线命令模式。
  • 常用命令包括移动光标(如 h 左移)、编辑(如 i 插入)、保存退出(如 :wq)。
  • vim 比 vi 多支持语法高亮、多级撤销和跨平台使用。

基本概念

vi 是 Unix-like 系统内置的文本编辑器,适合基本文本编辑。vim 是 vi 的升级版,增加了编程支持如语法高亮,适合开发者。

使用步骤

  1. 启动:输入 vim 文件名 打开或创建文件。
  2. 模式切换:在命令模式下按 i 进入插入模式编辑,按 Esc 返回命令模式。
  3. 保存退出:在命令模式下输入 :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 filenamevim 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:向上半页
  • 0Home:移动到行首
  • $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 的主要区别,基于可靠资源整理:

方面vivim
定义Unix 下的多模式文本编辑器vi 的升级版,兼容所有 vi 命令,并增加新特性
平台支持仅运行于 Unix-like 系统可运行于 Unix、Windows、Mac 等多种平台
撤销功能仅支持单级撤销(u 撤销最后一次操作)支持多级撤销(uCtrl + 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。


关键引文

类似文章

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注