Vim 命令大全:从入门到精通

前言:在编程和文本编辑的世界里,Vim 是一款极具传奇色彩的工具。它以其高效、灵活和强大的功能,赢得了无数用户的青睐。无论你是编程老手还是文本编辑新手,掌握 Vim 命令都能让你在编辑文本时如虎添翼。本文将为你全面梳理 Vim 的各类命令,让你轻松驾驭这款强大的编辑器。

Vim 的发展史和简介

  • Vi 的诞生 :Vi 源自 QED 编辑器,其发展历程如下:1966 年,伯克利分时系统的 QED("Quick EDitor")出现;1969 年 8 月,QED 发展为 AT&T 的 ed;1976 年 2 月,ed 变为玛丽王后大学的 em("Editor for Mortals");1976 年,em 又演变为加州大学伯克利分校的 ex("EXtended");1977 年 10 月,ex 出现了可视化模式,即 vi 。
  • 从 vi 到 vim :作为 ed 的衍生物,ex/vi 编辑器的版权属于 AT&T。若想在 Unix 以外的平台上使用 vi,就必须重新编写不使用任何原始代码的克隆版本。1991 年, Bram Moolenaar 在 Amiga 上使用 vi 时,因没有合适版本,便从 Atari 移植了 Stevie 并改进,最初命名为 "Vi IMitation"。1992 年,Vim 1.22 版本的 Vim 被移植到了 UNIX 和 MS-DOS 上,并更名为 "Vi IMproved"。
  • Vim 的发展 :1994 年 8 月 12 日,Vim 3.0 支持多个缓冲区和窗口;1996 年 5 月 29 日,Vim 4.0 推出了图形用户界面;1998 年 2 月 19 日,Vim 5.0 实现语法着色 / 高亮显示;2001 年 9 月 26 日,Vim 6.0 加入折叠、插件、垂直分割等功能;2006 年 5 月 8 日,Vim 7.0 新增拼写检查、自动补齐、撤消分支、标签等功能;2016 年 9 月 12 日,Vim 8.0 引入作业、异步 I/O、本机包等特性。

Vim 常见命令分类详解

  • 模式切换命令

    • Esc:从插入模式返回正常模式。
    • i:进入插入模式,在光标前插入文本。
    • a:进入插入模式,在光标后插入文本。
    • o:在光标下一行新建行并进入插入模式。
    • O:在光标上一行新建行并进入插入模式。
    • v:进入可视模式(选择文本)。
    • V:进入可视行模式(选择整行文本)。
    • Ctrl+v:进入可视块模式(选择文本块)。
    • R:进入替换模式(单字符替换)。
  • 文件操作命令

    • :w:保存文件。
    • :q:退出 Vim。
    • :wq:x:保存并退出。
    • :e [文件名]:打开指定文件。
    • :sp [文件名]:水平分屏打开文件。
    • :vsp [文件名]:垂直分屏打开文件。
    • :tabe [文件名]:在新标签页打开文件。
    • :w [文件名]:将当前缓冲区内容写入指定文件。
    • :r [文件名]:读取文件内容到当前缓冲区。
    • :wqall:保存所有缓冲区并退出 Vim。
    • :qa!:强制退出,不保存任何更改。
  • 光标移动命令

    • h:左移光标。
    • j:下移光标。
    • k:上移光标。
    • l:右移光标。
    • Ctrl+f:向下翻页。
    • Ctrl+b:向上翻页。
    • gg:跳转到文件首行。
    • G:跳转到文件尾行。
    • :[行号]:跳转到指定行。
    • 0:移动到行首。
    • $:移动到行尾。
    • w:向前移动到下一个单词首字母处。
    • b:向后移动到上一个单词首字母处。
    • e:向前移动到单词尾处。
    • ge:向后移动到单词尾处。
    • Ctrl+d:向下滚动半页。
    • Ctrl+u:向上滚动半页。
  • 文本编辑命令

    • xdl:删除光标后的字符。
    • dd:删除光标所在的行。
    • ndd:删除从当前行开始的 n 行(n 为具体数字)
    • dw:删除光标所在单词
    • D:删除光标到行尾的内容。
    • u:撤销上一步操作。
    • Ctrl+r:重做撤销的操作。
    • yy:复制光标所在行。
    • nyy:复制光标所在行及其后的 n-1 行。
    • y$:复制光标到行尾的内容。
    • yw:复制光标所在单词。
    • dd:剪切光标所在的行。
    • ndd:剪切光标所在行及其后的 n-1 行。
    • p:在光标下一行粘贴内容。
    • P:在光标上一行粘贴内容。
    • cw:修改当前单词(进入插入模式)。
    • cc:修改当前行(进入插入模式)。
    • r[字符]:用指定字符替换光标处的字符。
    • s:删除光标处字符并进入插入模式。
    • S:删除当前行并进入插入模式。
  • 查找与替换命令

    • /[关键词]:向下查找关键词。
    • ?[关键词]:向上查找关键词。
    • n:查找下一个匹配项。
    • N:查找上一个匹配项。
    • :%s/旧文本/新文本/g:替换全部匹配项。
    • :%s/旧文本/新文本/gc:逐个确认替换。
    • *:查找光标所在单词(向下)。
    • #:查找光标所在单词(向上)。
  • 撤销与重做命令

    • u:撤销上一步操作。
    • Ctrl+r:重做撤销的操作。
  • 复制剪切与粘贴命令

    • yy:复制光标所在行。
    • nyy:复制光标所在行及其后的 n-1 行。
    • y$:复制光标到行尾的内容。
    • yw:复制光标所在单词。
    • yiw:复制光标所在整个单词。
    • dd:剪切光标所在的行。
    • ndd:剪切光标所在行及其后的 n-1 行。
    • p:在光标下一行粘贴内容。
    • P:在光标上一行粘贴内容。
    • "+y"+Y:将文本复制到系统剪贴板。
    • "+p"+P:从系统剪贴板粘贴文本。
  • 窗口切换命令

    • Ctrl+w+w:切换当前窗口。
    • Ctrl+w+j:向下移动到下一个窗口。
    • Ctrl+w+k:向上移动到上一个窗口。
    • Ctrl+w+h:向左移动到上一个窗口。
    • Ctrl+w+l:向右移动到下一个窗口。
    • Ctrl+w+s:水平分割当前窗口。
    • Ctrl+w+v:垂直分割当前窗口。
    • Ctrl+w+= :使所有窗口大小相等。
    • Ctrl+w+_:最大化当前窗口。
    • Ctrl+w+>:增大当前窗口宽度。
    • Ctrl+w+<:减小当前窗口宽度。
    • Ctrl+w++:增大当前窗口高度。
    • Ctrl+w+-:减小当前窗口高度。
  • 标签页操作命令

    • :tabnew [文件名]:打开新标签页。
    • :tabnextgt:切换到下一个标签页。
    • :tabpreviousgT:切换到上一个标签页。
    • :tabfirst:切换到第一个标签页。
    • :tablast:切换到最后一个标签页。
    • :tabclose:关闭当前标签页。
    • :tabm [标签页号]:将当前标签页移动到指定位置。
  • 其他命令

    • :set nu!:切换显示行号。
    • :set wrap!:切换行显示方式。
    • :syntax on/off:开启或关闭语法高亮。
    • :! 命令:在 shell 下执行命令。
    • :q!:强制退出不保存。
    • :set ignorecase:忽略搜索大小写。
    • :set smartcase:智能区分搜索大小写(如果搜索词中有大写字母,则区分大小写)。
    • :set incsearch:开启实时搜索高亮。
    • :set ruler:显示光标所在行和列。
    • :set numberwidth=[宽度]:设置行号显示宽度。

Vim 寄存器的分类与操作

在 Vim 中,寄存器就像是一个个存储文本片段的小仓库,它极大地扩展了 Vim 复制、粘贴等操作的灵活性。通过使用寄存器,你可以实现复杂的文本操作,比如同时保存多个文本片段,并在需要的时候有选择地粘贴。

寄存器的分类

  1. 默认寄存器 ("") :这是 Vim 最常用的寄存器。当你执行普通的复制(yy)、删除(dd)操作时,文本会被自动放入默认寄存器。例如,输入 dd 删除一行,该行内容就存储在默认寄存器中,之后输入 p 粘贴时,也是从默认寄存器取出内容进行粘贴。
  2. 命名寄存器 (a - z, A - Z) :Vim 提供了 26 个小写字母和 26 个大写字母命名的寄存器,共 52 个。你可以将文本显式地放入这些命名寄存器中,方便后续有针对性地粘贴。比如,使用 "ayy 可以将当前行复制到 a 寄存器中;使用 "ap 则从 a 寄存器中取出内容进行粘贴 。大写命名寄存器和小写命名寄存器的区别在于,大写命名寄存器在执行删除操作时,会将内容追加到寄存器原有内容之后,而小写命名寄存器会覆盖原有内容。
  3. 数字寄存器 (0 - 9) :数字寄存器用于存储最近删除(x、dd 等)或复制(y)的文本。其中,0 寄存器存储最近一次复制的内容,1 - 9 寄存器依次存储最近 9 次删除的内容。例如,连续执行 3 次 dd 删除操作后,第三次删除的内容在 0 寄存器,第二次删除的在 1 寄存器,第一次删除的在 2 寄存器。
  4. 行内删除寄存器 (-) :当你使用 x、dw 等命令删除行内部分文本时,删除的内容会被放入行内删除寄存器。这个寄存器的特点是,当你执行粘贴操作时,不会影响默认寄存器和其他主要寄存器的内容。比如,使用 dw 删除一个单词后,使用 " - p 可粘贴该行内删除的单词,而此时默认寄存器的内容不受影响。
  5. 只读寄存器 (:、/、?、.) :这类寄存器存储了一些特殊信息。: 寄存器保存最近一次在命令行模式下输入的命令;/? 寄存器分别保存最近一次向前和向后搜索的模式;. 寄存器存储当前行的内容 。这些寄存器的内容只能读取,不能写入。
  6. 表达式寄存器 (=) :表达式寄存器允许你执行 Vim 脚本表达式,并将表达式的结果作为粘贴内容。例如,输入 ":=1 + 2<CR>p,会先计算 1 + 2 的结果 3,然后将 3 粘贴到光标位置。

寄存器的常用操作

  1. 将内容放入寄存器 :在命令模式下,在普通操作命令前加上 " 和寄存器名称,即可将操作的内容存入指定寄存器。除了前面提到的 "ayy 复制到 a 寄存器,还有如 "bdw 表示删除光标所在单词,并将其存入 b 寄存器。
  2. 从寄存器中取出内容粘贴 :同样在命令模式下,使用 " 加上寄存器名称,再加上粘贴命令(p 或 P)。例如,从 c 寄存器中取出内容并粘贴到光标后,可输入 "cp ;粘贴到光标前则输入 "cP
  3. 查看寄存器内容 :在 Vim 中,可以通过 :reg 命令查看所有寄存器的内容。执行该命令后,Vim 会列出各个寄存器及其存储的文本片段,方便你了解当前寄存器的使用情况。

掌握 Vim 寄存器的使用,能够让你在文本编辑过程中更加游刃有余,实现许多原本难以完成的复杂操作。随着不断实践,你会发现寄存器是 Vim 强大功能不可或缺的一部分。

总结

以上内容涵盖了 Vim 的基础操作、文件编辑、文本处理、代码编写与调试等多方面的命令。通过学习和熟练运用这些命令,你可以大大提高在 Vim 中的工作效率。在实际使用中,你还可以根据自己的需求和习惯,进一步探索和挖掘更多实用的 Vim 命令和技巧。无论是寄存器的灵活运用,还是各类命令的熟练组合,都能让你在文本编辑的道路上越走越远,越走越快。

vim命令小抄1:

vim命令小抄2:

相关推荐
zz_nj7 小时前
工作的环境
linux·运维·服务器
极客先躯7 小时前
如何自动提取Git指定时间段的修改文件?Win/Linux双平台解决方案
linux·git·elasticsearch
suijishengchengde8 小时前
****LINUX时间同步配置*****
linux·运维
qiuqyue8 小时前
基于虹软Linux Pro SDK的多路RTSP流并发接入、解码与帧级处理实践
linux·运维·网络
切糕师学AI9 小时前
Linux 操作系统简介
linux
sun03229 小时前
【VSCode基础】VSCode快捷键总结、工程导入配置等
ide·vscode·编辑器
南烟斋..9 小时前
GDB调试核心指南
linux·服务器
爱跑马的程序员9 小时前
Linux 如何查看文件夹的大小(du、df、ls、find)
linux·运维·ubuntu
oMcLin12 小时前
如何在 Ubuntu 22.04 LTS 上部署并优化 Magento 电商平台,提升高并发请求的响应速度与稳定性?
linux·运维·ubuntu
Qinti_mm12 小时前
Linux io_uring:高性能异步I/O革命
linux·i/o·io_uring