Vim 是 Vi 的增强版,几乎预装在 Linux、macOS 和多数容器镜像里。它的核心不是记住所有快捷键,而是理解“模式 + 操作符 + 动作/文本对象”的组合:普通模式下按键是命令,插入模式才输入文字,d、y、c 等操作符可以接 w、i(、ap 等动作。先掌握模式切换、保存退出和移动,再学文本对象、寄存器、宏和插件,学习曲线会平缓很多。
边界:Vim 负责文本编辑,不负责文件管理、版本控制或 IDE 级重构;需要 LSP、调试器和团队配置时看 Neovim 或 VS Code 快捷键。最小系统可能只有 vi(也可能是 Vim 的 compatible 模式),没有插件和部分 Ex 命令;上手前先确认 vim --version。纯 POSIX vi 的差异见 vi。
g 命令与 Ex 批量操作。.vimrc、插件管理、LSP 与常见配置。不想先读文档时,在终端跑 vimtutor,用 30 分钟走一遍官方交互教程;遇到具体问题再回到对应页面。
vim notes.txt # 打开或新建文件
vim +42 notes.txt # 跳到第 42 行
vim +/timeout app.conf # 定位到第一个 timeout
vim -R /etc/hosts # 只读打开,防止误改
进入后按 i 插入,改完按 Esc,再输入 :wq 保存退出;不想保存用 :q!。普通模式下 u 撤销、Ctrl+r 重做、/keyword 搜索、n 跳下一个匹配。先练熟这一组,再学操作符和文本对象。
| 任务 | 入口 |
|---|---|
| 改服务器配置,怕改坏 | 先 vim -R file 只读查看;需要编辑时用 sudoedit file,避免长期以 root 运行 Vim |
| 批量替换一个文件 | :%s/old/new/g;加 c 逐个确认,加 \v 使用更接近 PCRE 的正则 |
| 只改一个函数或段落 | 文本对象:ci{、ci(、dap、yiw,见进阶页 |
| 重复一段编辑 | q 录制宏,@a 回放,@@ 重复上次宏 |
| 同时看两个文件 | :split / :vsplit,Ctrl+w 切换窗口 |
| 粘贴时缩进越来越乱 | 先 :set paste 再粘贴,粘完 :set nopaste;或使用支持 bracketed paste 的终端 |
| 退出时提示 swap 文件 | 先确认没有另一个 Vim 在编辑;用 :recover 检查,确认后再删 .swp |
Esc 回普通模式,再看左下角提示;插入模式通常显示 -- INSERT --。:q 退不出去:有未保存修改,用 :wq 保存或 :q! 放弃;先用 :ls 看清缓冲区,不要直接杀进程。:set paste,或改用支持 bracketed paste 的终端。vim --version | grep clipboard 看是否带 +clipboard;没有时 "+y 不可用,可装带剪贴板支持的 Vim,或在 macOS 用 :w !pbcopy。sudoedit file 重新打开;已在 Vim 里时可用 :w !sudo tee % 写入,再 :e! 重新加载。vim --clean 排除配置,再用 vim --startuptime /tmp/vim-start.log 看启动耗时,二分注释 .vimrc 定位。.vimrc 里设置 set encoding=utf-8,打开文件后用 :set fileencoding=utf-8 检查,不要在不了解原编码时强制改写。合上页面,先回答,再展开对照。
ci( 的例子。:wq、:x、:q! 分别在什么情况下使用?d 删除、y 复制、c 修改),再按动作或文本对象指定范围。ci( 表示修改当前括号内的内容,并进入插入模式。:wq 无条件保存并退出;:x 有修改才写入并退出;:q! 放弃修改强制退出。:set paste 后再粘贴,或使用支持 bracketed paste 的终端。
小程序版
微信扫码,随时查命令