SSH 到一台服务器上改配置,手头没有 VS Code,能用的编辑器基本就 Nano 和 Vim。Nano 上手快,但改大型项目源码时效率差 Vim 一大截。这一篇把 Vim 的模式、常用快捷键、基础配置和插件入门讲清楚,目标是看完就能独立改文件,不再一进去就出不来。
一、Vim 的核心:五种模式
很多人怕 Vim,是因为打开文件后敲键盘全是乱跳,根本输不了字。问题不在 Vim,在没搞懂模式。Vim 里同一把按键在不同模式下做的事完全不同。
| 模式 | 进入方式 | 干什么用 |
|---|---|---|
| 普通模式(Normal) | 打开文件默认就在,按 Esc 随时回来 | 移动光标、复制删除、切换模式 |
| 插入模式(Insert) | 普通模式下按i/a/o | 正常打字编辑 |
| 可视模式(Visual) | 普通模式下按v/V/Ctrl+v | 选中文本块 |
| 命令行模式(Command-line) | 普通模式下按:///? | 保存、退出、替换、搜索 |
| 替换模式(Replace) | 普通模式下按R | 覆盖式输入 |
刚打开文件时你在普通模式。这是第一句话,也是最重要的一句话。在普通模式下按键盘的字母不是输入字符,是发命令。想打字先按i,想回到普通模式按Esc。
普通模式下进入插入模式
| 按键 | 作用 |
|---|---|
i | 在光标前插入 |
a | 在光标后插入 |
o | 在下方新开一行插入 |
O | 在上方新开一行插入 |
I | 跳到行首插入 |
A | 跳到行尾插入 |
i够用一辈子。o在改代码时特别顺手,不用手移到行尾再按回车。
二、移动光标:hjkl 和更快的跳转
基础移动
| 按键 | 作用 |
|---|---|
hjkl | 左、下、上、右(代替方向键) |
w | 下一个单词开头 |
b | 上一个单词开头 |
e | 当前单词结尾 |
0 | 跳到行首 |
$ | 跳到行尾 |
^ | 跳到行首第一个非空白字符 |
gg | 跳到文件第一行 |
G | 跳到文件最后一行 |
数字 + G | 跳到第数字行,如12G跳到第 12 行 |
Ctrl+d/Ctrl+u | 向下/向上翻半屏 |
Ctrl+f/Ctrl+b | 向下/向上翻一整屏 |
hjkl 这四个键在主键盘区,手不用挪到方向键,熟练后效率高很多。不强迫自己,用方向键也能干活。
三、编辑操作:删、复制、粘贴、撤销
删除与修改
| 按键 | 作用 |
|---|---|
x | 删除光标下一个字符 |
dd | 删除整行 |
dw | 删除到下一个单词开头 |
d$或D | 删除到行尾 |
d0 | 删除到行首 |
cc或S | 删除整行并进入插入模式 |
cw | 删除当前单词并进入插入模式 |
u | 撤销 |
Ctrl+r | 重做(撤销的撤销) |
Vim 的删除其实就是剪切——删掉的内容进了寄存器,按p就能粘出来。这也是dd之后p能复制整行的原理。
复制与粘贴
| 按键 | 作用 |
|---|---|
yy | 复制整行 |
yw | 复制一个单词 |
y$ | 复制到行尾 |
p | 在光标后粘贴 |
P | 在光标前粘贴 |
数字 yy | 复制数字行,如5yy复制 5 行 |
数字前缀在 Vim 里到处都能用:3dd删 3 行,10j往下跳 10 行,2w跳两个单词。
四、搜索与替换
搜索
| 按键 | 作用 |
|---|---|
/关键词 | 向下搜索 |
?关键词 | 向上搜索 |
n | 跳到下一个匹配 |
N | 跳到上一个匹配 |
* | 搜索光标下的单词 |
替换
命令行模式下输入:
:%s/old/new/g把整个文件里的old替换成new。%表示全文,s是 substitute,g表示一行里所有匹配都换(不加g只换每行第一个)。
想替换前确认一下,加c:
:%s/old/new/gc每处替换都会问你一次y/n/a/q/l。
五、保存与退出
| 按键 | 作用 |
|---|---|
:w | 保存 |
:q | 退出 |
:wq | 保存并退出 |
:q! | 强制退出不保存 |
:x | 保存并退出(和 :wq 等价) |
ZZ | 保存并退出(普通模式快捷键) |
ZQ | 不保存直接退出 |
新手最容易卡在这里:改完文件发现按什么都退不出来。记住Esc先回到普通模式,再:q!强行退出,永远不会丢系统。
六、可视模式:选块操作
| 按键 | 作用 |
|---|---|
v | 字符可视模式,按字符选 |
V | 行可视模式,按整行选 |
Ctrl+v | 块可视模式,选矩形块 |
块可视模式(Ctrl+v)是 Vim 处理多行编辑的利器。比如想给连续几行前面都加#注释:
Ctrl+v进入块模式- 用
j/k选中要注释的行 - 按
I进入行首插入 - 输入
# - 按
Esc
所有选中的行都会加上#。批量改代码缩进、加前缀,用块模式比手敲快得多。
七、.vimrc:一份能用的基础配置
Vim 默认配置很朴素。把下面这段存成~/.vimrc,打开文件时 Vim 会自动加载:
" 显示行号 set number " 相对行号,配合数字+j/k 快速跳行 set relativenumber " 缩进设置 set tabstop=4 set shiftwidth=4 set expandtab set autoindent set smartindent " 搜索 set hlsearch set incsearch set ignorecase set smartcase " 界面 set cursorline set scrolloff=5 set wildmenu set showcmd " 关闭备份和交换文件提示 set nobackup set noswapfile " 语法高亮 syntax on " 文件类型检测,加载对应插件 filetype plugin indent on每一行的作用都写在注释里。几个关键点:
expandtab把 Tab 键转成空格,避免不同编辑器打开缩进乱掉。incsearch边输入边高亮匹配项,不用按回车就知道搜到哪了。smartcase搜索时全小写忽略大小写,只要有一个大写就区分大小写,日常最顺手。noswapfile关掉每次打开文件都生成.swp临时文件,个人用够了;团队协作环境建议留着。
改完.vimrc后在 Vim 里跑:source ~/.vimrc立即生效,不用重开。
八、插件入门(点到为止)
Vim 原生已经能干很多事,但写大型项目时还想有自动补全、文件树、语法检查,就要靠插件。现在主流的插件管理器是 vim-plug:
curl -fLo ~/.vim/autoload/plug.vim --create-dirs \ https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim装好后在.vimrc里加一段:
call plug#begin('~/.vim/plugged') Plug 'preservim/nerdtree' " 文件树 Plug 'vim-airline/vim-airline' " 底部状态栏 call plug#end()打开 Vim 跑:PlugInstall就会自动下载安装。NERDTree用:NERDTreeToggle呼出文件树,vim-airline直接在底部显示当前模式、文件名、行列号。
新手不建议一上来装一堆插件,先把原生快捷键练熟。插件是加分项,不是必需品。
九、知识扩展:为什么 Vim 要搞这么多模式
普通编辑器里,"打字"和"移动光标"用的是同一套按键,Vim 偏要分开,听着反人类。设计逻辑其实很简单:编辑文本的人,大部分时间不是在打字,而是在移动光标、看代码、删改。Vim 把高频操作(移动、删除、复制)放在普通模式,让手不用离开主键区;把低频操作(真正输入文字)切到插入模式。用熟之后,从一个函数跳到另一个函数、删掉几行、复制粘贴,全程手指不挪键盘中间区域,这就是 Vim 党说的"指尖效率"。
代价是学习曲线陡。记住一句话就够跨过去:Esc 永远是回普通模式,普通模式是你的大本营。进了插入模式不害怕,按 Esc 回来就行。多改几次配置文件,肌肉记忆两周就建立了。