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
:向上滚动半页。
-
文本编辑命令 :
x
或dl
:删除光标后的字符。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 [文件名]
:打开新标签页。:tabnext
或gt
:切换到下一个标签页。:tabprevious
或gT
:切换到上一个标签页。: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 复制、粘贴等操作的灵活性。通过使用寄存器,你可以实现复杂的文本操作,比如同时保存多个文本片段,并在需要的时候有选择地粘贴。
寄存器的分类
- 默认寄存器 (“”) :这是 Vim 最常用的寄存器。当你执行普通的复制
(yy)
、删除(dd)
操作时,文本会被自动放入默认寄存器。例如,输入 dd
删除一行,该行内容就存储在默认寄存器中,之后输入p
粘贴时,也是从默认寄存器取出内容进行粘贴。 - 命名寄存器 (a - z, A - Z) :Vim 提供了 26 个小写字母和 26 个大写字母命名的寄存器,共 52 个。你可以将文本显式地放入这些命名寄存器中,方便后续有针对性地粘贴。比如,使用
"ayy
可以将当前行复制到 a 寄存器中;使用"ap
则从 a 寄存器中取出内容进行粘贴 。大写命名寄存器和小写命名寄存器的区别在于,大写命名寄存器在执行删除操作时,会将内容追加到寄存器原有内容之后,而小写命名寄存器会覆盖原有内容。 - 数字寄存器 (0 - 9) :数字寄存器用于存储最近删除(x、dd 等)或复制(y)的文本。其中,0 寄存器存储最近一次复制的内容,1 - 9 寄存器依次存储最近 9 次删除的内容。例如,连续执行 3 次 dd 删除操作后,第三次删除的内容在 0 寄存器,第二次删除的在 1 寄存器,第一次删除的在 2 寄存器。
- 行内删除寄存器 (-) :当你使用
x、dw
等命令删除行内部分文本时,删除的内容会被放入行内删除寄存器。这个寄存器的特点是,当你执行粘贴操作时,不会影响默认寄存器和其他主要寄存器的内容。比如,使用dw
删除一个单词后,使用" - p
可粘贴该行内删除的单词,而此时默认寄存器的内容不受影响。 - 只读寄存器 (:、/、?、.) :这类寄存器存储了一些特殊信息。: 寄存器保存最近一次在命令行模式下输入的命令
;/
和?
寄存器分别保存最近一次向前和向后搜索的模式;. 寄存器存储当前行的内容 。这些寄存器的内容只能读取,不能写入。 - 表达式寄存器 (=) :表达式寄存器允许你执行 Vim 脚本表达式,并将表达式的结果作为粘贴内容。例如,输入
":=1 + 2<CR>p
,会先计算 1 + 2 的结果 3,然后将 3 粘贴到光标位置。
寄存器的常用操作
- 将内容放入寄存器 :在命令模式下,在普通操作命令前加上 " 和寄存器名称,即可将操作的内容存入指定寄存器。除了前面提到的 "
ayy
复制到 a 寄存器,还有如"bdw
表示删除光标所在单词,并将其存入 b 寄存器。 - 从寄存器中取出内容粘贴 :同样在命令模式下,使用 " 加上寄存器名称,再加上粘贴命令(p 或 P)。例如,从 c 寄存器中取出内容并粘贴到光标后,可输入
"cp
;粘贴到光标前则输入"cP
。 - 查看寄存器内容 :在 Vim 中,可以通过
:reg
命令查看所有寄存器的内容。执行该命令后,Vim 会列出各个寄存器及其存储的文本片段,方便你了解当前寄存器的使用情况。
掌握 Vim 寄存器的使用,能够让你在文本编辑过程中更加游刃有余,实现许多原本难以完成的复杂操作。随着不断实践,你会发现寄存器是 Vim 强大功能不可或缺的一部分。
总结
以上内容涵盖了 Vim 的基础操作、文件编辑、文本处理、代码编写与调试等多方面的命令。通过学习和熟练运用这些命令,你可以大大提高在 Vim 中的工作效率。在实际使用中,你还可以根据自己的需求和习惯,进一步探索和挖掘更多实用的 Vim 命令和技巧。无论是寄存器的灵活运用,还是各类命令的熟练组合,都能让你在文本编辑的道路上越走越远,越走越快。