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 和更快的跳转
基础移动
| 按键 | 作用 |
|---|---|
h j k l |
左、下、上、右(代替方向键) |
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 回来就行。多改几次配置文件,肌肉记忆两周就建立了。