vi、Vim 命令详解与实战速查

Vim 的核心不是“记住很多快捷键”,而是先分清当前模式,再把“动作范围”和“操作”组合起来。以下命令适用于常见 Vim 版本;发行版、插件和个人配置可能改变部分行为。

Vim 常用命令键位与模式示意图

一、先掌握四种模式

模式 进入方式 用途
普通模式 按 Esc 移动、删除、复制、撤销和执行命令
插入模式 i、a、o 等 输入文字
可视模式 v、V、Ctrl+v 按字符、整行或块选择
命令行模式 普通模式输入 : 保存、退出、替换和设置选项

忘记当前处于什么模式时,先按一次 Esc。这是避免误操作最有效的习惯。

二、打开、保存与退出

vim /etc/nginx/nginx.conf
vim +120 app.log
vim +/ERROR app.log
命令 作用
:w 保存
:w newfile 另存为
:q 无改动时退出
:wq 或 ZZ 保存并退出
:q! 放弃当前改动并退出
:e! 放弃改动并重新读取文件

! 表示强制执行,应在确认不需要当前改动后使用。

三、移动比方向键更高效

命令 位置
h j k l 左、下、上、右
w / b 下一个 / 上一个单词开头
e 当前或下一个单词结尾
0 / ^ / $ 行首 / 首个非空字符 / 行尾
gg / G 文件开头 / 文件结尾
120G 跳到第 120 行
Ctrl+f / Ctrl+b 向下 / 向上翻页
% 在匹配的括号间跳转

数字可以与多数动作组合,例如 5j 向下移动 5 行,3w 向前移动 3 个单词。

四、插入与修改

命令 作用
i / a 在光标前 / 后插入
I / A 在行首 / 行尾插入
o / O 在下方 / 上方新建一行
x 删除一个字符
dd 删除整行
D 删除到行尾
cc 修改整行
cw 修改到单词结尾
rX 用 X 替换当前字符

Vim 的组合逻辑很有用:d 表示删除,c 表示修改,后面接范围。比如 d3w 删除后面 3 个单词,ci" 修改双引号中的内容,da( 删除包含括号的整个范围。

五、复制、粘贴、撤销

命令 作用
yy / 5yy 复制当前行 / 连续 5 行
p / P 在光标后 / 前粘贴
u 撤销
Ctrl+r 重做
. 重复上一次修改
"0p 粘贴最近一次复制的内容,避免被删除操作覆盖

系统剪贴板是否可用取决于 Vim 的编译选项。可先执行 :version,检查是否包含 +clipboard。支持时可用 "+y 复制到系统剪贴板、"+p 从系统剪贴板粘贴。

六、搜索与批量替换

命令 作用
/word 向下搜索
?word 向上搜索
n / N 下一个 / 上一个匹配
* / # 搜索光标所在单词
:set hlsearch 高亮匹配
:nohlsearch 临时关闭高亮

替换示例:

:%s/old/new/g
:%s/old/new/gc
:10,30s/old/new/g

第一条替换全文,第二条逐项确认,第三条只处理第 10 到 30 行。正则表达式中的 /、.、* 等字符可能需要转义,执行前可先缩小范围或加 c 确认。

七、多文件与窗口

:e another.conf
:ls
:bnext
:bprevious
:split another.conf
:vsplit another.conf

窗口间切换使用 Ctrl+w 后再按 h/j/k/l。:tabnew file 新建标签页,gt 和 gT 在标签页之间切换。

八、运维场景中的安全用法

  1. 编辑系统配置前先复制备份,或使用版本管理。
  2. 使用 :set number 显示行号,:%!command 这类会改写全文的命令不要在生产文件中随意执行。
  3. 粘贴大段配置前可执行 :set paste,粘贴后立即 :set nopaste,避免自动缩进破坏格式。
  4. 修改完成先保存,再运行对应语法检查,例如 nginx -t、sshd -t。
  5. 远程连接不稳定时在 tmux 或 screen 中编辑,避免连接中断造成混乱。

九、交换文件与异常恢复

Vim 异常退出后可能留下 .swp 文件。再次打开时不要盲目删除:

  • 先确认是否还有另一个编辑会话正在使用该文件。
  • 确认没有活动会话后,选择恢复并核对内容。
  • 恢复完成后正常保存退出,再清理残留交换文件。
vim -r /path/to/file

十、建议的最小配置

将下列内容放入个人 ~/.vimrc,先从少量可靠设置开始:

set number
set ruler
set showcmd
set incsearch
set hlsearch
set ignorecase
set smartcase
set expandtab
set tabstop=4
set shiftwidth=4

不要直接复制来源不明的庞大 Vim 配置。插件和映射越多,排查按键冲突越困难。

十一分钟练习

  1. 打开一份临时文本,用 gg、G、10G 跳转。
  2. 用 yy、p 复制一行,用 dd 删除,再用 u 撤销。
  3. 用 /关键字 搜索,使用 n 切换。
  4. 用 :%s/旧值/新值/gc 逐项替换。
  5. 用 :w 保存,再用 :q 退出。

延伸阅读

Copyright © yan-jian.com 2023 - 2026 · Powered by GitBook更新时间: 2026-10-16 08:51:34

results matching ""

    No results matching ""