VI 和VIM区别

功能和特性

  1. 多级撤销/重做

    • vi: 只支持单级撤销。
    • vim: 支持多级撤销和重做,通过 u 撤销,Ctrl-r 重做。
  2. 多窗口/多标签

    • vi: 不支持多窗口和多标签。
    • vim: 支持分割窗口(:split:vsplit)和多标签页(:tabnew)。
  3. 语法高亮

    • vi: 不支持语法高亮。
    • vim: 支持多种语言的语法高亮,使用 :syntax on 命令开启。
  4. 代码折叠

    • vi: 不支持代码折叠。
    • vim: 支持代码折叠,使用 zf 来折叠代码块,zo 打开折叠。
  5. 插件支持

    • vi: 不支持插件。
    • vim: 有丰富的插件支持,通过 vim-plug 等插件管理器可以安装各种插件。
  6. 自动补全

    • vi: 不支持自动补全。
    • vim: 提供自动补全功能,通过 Ctrl-nCtrl-p 可以补全单词。
  7. 可视模式

    • vi: 不支持可视模式。
    • vim: 支持字符、行和块可视模式,使用 vVCtrl-v
  8. 录制和播放宏

    • vi: 不支持录制宏。
    • vim: 支持录制宏,使用 q 开始录制,@ 播放宏。
  9. 命令行历史

    • vi: 不支持命令行历史。
    • vim: 支持命令行历史,使用 : 后可以通过方向键上下查看历史命令。
  10. 查找和替换

    • vi: 基础查找和替换功能。
    • vim: 提供更强大的查找和替换功能,包括正则表达式支持。

用户体验

  1. 启动时间

    • vi: 一般启动时间较快,功能少。
    • vim: 启动时间稍慢,因为功能更多,但可以通过配置优化启动时间。
  2. 文档和帮助

    • vi: 文档和帮助较少。
    • vim: 提供详尽的文档和帮助系统,通过 :help 命令可以查看详细帮助。
  3. 配置灵活性

    • vi: 配置选项较少。
    • vim: 配置选项丰富,通过 ~/.vimrc 可以定制大量选项。

扩展能力

  1. 脚本支持

    • vi: 不支持脚本编写。
    • vim: 支持 Vim 脚本(VimScript),可以编写自定义脚本扩展功能。
  2. 外部程序接口

    • vi: 不支持与外部程序交互。
    • vim: 可以与外部程序交互,通过 :! 命令运行外部命令,并可通过插件与多种工具集成。
  3. GUI 版本

    • vi: 只有命令行版本。
    • vim: 提供 GUI 版本(gVim),具备图形界面的同时保留命令行版本的所有功能。

综合比较

  • vi: 简单、轻量、快速启动,适用于资源受限的环境和简单的文本编辑任务。
  • vim: 功能强大、可扩展性高,适合复杂的编辑任务和需要高级功能的用户。

2. 配置文件

  • /etc/vimrc: 系统全局配置文件,影响所有用户。
  • ~/.vimrc: 用户个人配置文件,仅影响当前用户。
  • ~/.viminfo: vim 会话信息文件,保存编辑历史和光标位置等信息。

Vi 的四种模式

1. 一般模式(浏览模式)

  • 进入方式:启动 vi 编辑器或从其他模式按 ESC 键。

2. 编辑模式(插入模式)

  • 进入方式:在一般模式下按 iIaAoORr 键。
  • 退出方式:按 ESC 键返回一般模式。

3. 命令行模式

  • 进入方式:在一般模式下按 :/? 键。
  • 功能:执行保存、退出、查找等命令。

4. 可视化模式

  • 进入方式:

    • v 字符可视化
    • V 行可视化
    • Ctrl+v 块可视化
  • 退出方式:按 ESC 键返回一般模式。

一般模式下进行的快捷命令操作

光标移动

  • 0: 光标移到行首
  • $: 光标移到行尾
  • G: 移到文件最后一行
  • nG: 移到文件第 n 行
  • gg: 移到文件第一行
  • nENTER: 光标向下移动 n 行

查找

  • /word: 向下查找 word 字符串
  • ?word: 向上查找 word 字符串
  • n: 重复前一个搜索的动作(向下)
  • N: 重复前一个搜索的动作(向上)

删除和复制

  • x, X: 向后删除和向前删除
  • dd: 删除整行
  • ndd: 从光标位置开始删除 n 行
  • d1G: 从第一行开始删除到光标所在行
  • dG: 删除光标位置到文件末尾
  • d$: 删除光标位置到行尾
  • yy: 复制光标所在行
  • y5y: 复制光标所在行和其后的4行
  • yG: 复制光标位置到文件末尾的所有行
  • y$: 复制光标位置到行尾

粘贴

  • P, p: 粘贴到光标行前一行或后一行

撤销和重做

  • u: 撤销前一操作
  • .: 重复前一操作

文件保存和退出

  • :w: 保存数据
  • :wq: 保存退出 vi
  • :wq!: 强制保存后离开 vi(权限相关,强制写入)
  • :w[filename]: 将编辑的数据另存为 filename
  • :r[filename]: 读入 filename 内容到光标行后面

Vim 的环境参数设置

  • :set nu: 设置行号
  • :set nonu: 取消行号
  • :set ruler: 显示状态行
  • :set showmode: 显示 INSERT 编辑模式状态
  • :set all: 显示当前所有的环境参数设置值
  • :syntax on/off: 语法颜色开关

本文由mdnice多平台发布


逼格高的汤圆
7 声望2 粉丝