Vim 编辑器教程
Vim 是终端下最强大的文本编辑器。对于 C/C++ 程序员来说,在 SSH 远程服务器上写代码、快速修改配置文件、或是在 QEMU 裸机环境里没有 GUI 的时候,Vim 是唯一的选择。本教程以 Windows 用户使用 cmd 终端 为主线,附带 Linux/macOS 安装说明,并提供完整的 Vim 使用手册:快捷键大全、: 指令大全、.vimrc 配置详解,以及用 Vim 编辑系统配置文件的实战知识。
一、安装 Vim
1.1 Windows:下载并写入 PATH
方法一:winget(推荐,Windows 10/11 自带)
# 以管理员身份打开 PowerShell 或 cmd
winget install vim.vim
安装后重启终端即可在 cmd/PowerShell 中使用 vim。
方法二:官方安装包
- 前往 vim.org 下载 “PC: MS-DOS and MS-Windows” 的安装包(gvim90.exe 或类似)
- 运行安装程序,务必勾选 “Create .bat files for command line use”(这步自动写入 PATH)
- 若忘记勾选,手动添加环境变量:
:: 以管理员身份打开 cmd,将 Vim 安装目录加入 PATH(以默认路径为例)
setx PATH "%PATH%;C:\Program Files (x86)\Vim\vim91" /M
方法三:Scoop / Chocolatey
scoop install vim # Scoop 用户
choco install vim # Chocolatey 用户
验证安装
vim --version | findstr /C:"Vi IMproved"
1.2 Linux
# Debian/Ubuntu
sudo apt install vim
# Arch Linux
sudo pacman -S vim
# Fedora
sudo dnf install vim
多数 Linux 发行版已预装 vim 或 vi(Vi 兼容版)。
1.3 macOS
brew install vim
macOS 自带 vim,但版本较旧,Homebrew 可获取最新版。
二、3 分钟快速入门
2.1 打开 Vim
vim :: 空白编辑器
vim hello.c :: 打开已有文件(不存在则新建)
vim +69 hello.c :: 打开并跳到第 69 行
vim -R readme.md :: 只读模式打开(view 命令等效)
2.2 编辑并保存
Vim 有多个 模式(Mode),新手最大的困惑都源于此。你只需求记住 3 个核心模式:
| 模式 | 进入方式 | 用途 | 光标形状(典型) |
|---|
| Normal(普通模式) | Esc | 浏览、复制、粘贴、删除 | 方块 |
| Insert(插入模式) | i / a / o | 输入文字 | 竖线 |
| Command-line(命令模式) | : | 保存、退出、搜索替换 | — |
第一次使用 Vim 的新手三步走:
vim test.txt " 1. 打开
i " 2. 按 i 进入 Insert 模式 → 输入任意文字
<Esc> " 3. 按 Esc 回到 Normal 模式
:wq " 4. 输入 :wq 保存并退出
三、模式详解
3.1 Normal 模式(默认)
启动 Vim 后你就在 Normal 模式。所有移动、删除、复制、粘贴快捷键都从 Normal 模式发出。
3.2 Insert 模式(插入文字)
从 Normal 模式进入 Insert 模式:
| 快捷键 | 效果 |
|---|
i | 在光标前插入 |
a | 在光标后插入(append) |
I | 行首插入 |
A | 行尾插入 |
o | 在下方新开一行并插入 |
O | 在上方新开一行并插入 |
s | 删除光标处字符并插入 |
S / cc | 删除整行并插入 |
cw | 删除到词尾并插入(change word) |
Esc 或 Ctrl+[ 回到 Normal 模式。
3.3 Visual 模式(选择文字)
| 快捷键 | 效果 |
|---|
v | 字符级选中 |
V | 行级选中 |
Ctrl+v | 块选中(列编辑) |
选中后可用 y(复制)、d(删除)、>(缩进)、<(反缩进)、=(自动格式化) 操作。
3.4 Command-line 模式(执行命令)
Normal 模式下按 : 进入。常用 : 指令见后文「指令大全」。
四、快捷键大全
4.1 光标移动
4.1.1 基本移动
| 快捷键 | 效果 |
|---|
h / j / k / l | 左 / 下 / 上 / 右 |
5j / 10l | 数字前缀:向下 5 行 / 向右 10 列 |
gj / gk | 在自动换行的长行内按屏幕行向下 / 向上移动 |
Enter / + | 移到下一行行首 |
- | 移到上一行行首 |
_ | 移到当前行第一个非空白字符(同 ^) |
| | 移到当前行第 1 列 |
gm | 移到屏幕行中点 |
4.1.2 按词移动
| 快捷键 | 效果 |
|---|
w / W | 下一个词 / 下一个「大词」词首(WORD,仅以空白分隔) |
b / B | 上一个词 / 上一个大词词首 |
e / E | 当前词 / 大词词尾 |
ge / gE | 上一个词 / 大词词尾 |
3w | 向后移动 3 个词 |
词(word)由字母、数字、下划线组成;大词(WORD)由非空白字符组成。例如 foo-bar 是两个词、一个大词。
4.1.3 行内与括号跳转
| 快捷键 | 效果 |
|---|
0 | 行首(第 1 列) |
^ | 本行第一个非空白字符 |
$ | 行尾 |
g_ | 行尾最后一个非空白字符 |
% | 跳转到匹配的括号(( ) [ ] { }),再按一次返回 |
[( / ]) | 跳到上一个 / 下一个未匹配的 ( / ) |
[{ / }] | 跳到上一个 / 下一个未匹配的 { / } |
4.1.4 段落、句子与代码块
| 快捷键 | 效果 |
|---|
{ / } | 跳到上一个 / 下一个空行(段落边界) |
( / ) | 跳到上一个 / 下一个句子 |
[[ / ]] | 跳到上一个 / 下一个函数或代码块开头(C 语言常用) |
[] / ][ | 跳到函数或代码块结尾 |
[m / ]m | 跳到方法/类定义的开头与结尾(需 matchit 插件增强) |
4.1.5 文件与屏幕跳转
| 快捷键 | 效果 |
|---|
gg | 文件开头 |
G | 文件末尾 |
42G 或 :42 | 跳到第 42 行 |
42% | 跳到文件的 42% 处 |
H / M / L | 屏幕顶部 / 中部 / 底部(High/Middle/Low) |
Ctrl+f / Ctrl+b | 向下 / 向上翻整屏 |
Ctrl+d / Ctrl+u | 向下 / 向上翻半屏 |
Ctrl+e / Ctrl+y | 向下 / 向上滚动一行(光标不动) |
zz / zt / zb | 把当前行放到屏幕中央 / 顶部 / 底部 |
z. | 当前行居中并移到行首 |
4.1.6 字符查找
| 快捷键 | 效果 |
|---|
f{char} | 光标后查找字符(find),如 fa 找下一个 a |
F{char} | 光标前查找字符 |
t{char} | 光标后查找字符,停在字符前(till) |
T{char} | 光标前查找字符,停在字符后 |
; / , | 重复 / 反向前一次的 f/t/F/T 查找 |
3fa | 查找第 3 个 a |
4.1.7 跳转历史与修改历史
| 快捷键 | 效果 |
|---|
Ctrl+o | 回到上一个跳转位置(jumplist 后退) |
Ctrl+i / Tab | 前进到下一个跳转位置 |
g; | 回到上一次修改的位置(changelist 后退) |
g, | 前进到下一次修改的位置 |
:jumps | 查看跳转列表 |
:changes | 查看修改列表 |
4.1.8 标记(Marks)
| 快捷键 | 效果 |
|---|
ma | 在当前行设置标记 a(a-z 为文件内标记) |
`a | 跳到标记 a 的精确位置 |
'a | 跳到标记 a 所在行的行首 |
“ | 跳回上一次跳转前的位置 |
'' | 跳回上一次跳转所在行的行首 |
'. | 跳到上次修改的位置 |
`" | 跳到上次退出编辑时的位置 |
mA | 设置全局标记 A(A-Z 跨文件可用) |
:marks | 查看所有标记 |
4.2 编辑操作
4.2.1 删除
| 快捷键 | 效果 |
|---|
x | 删除光标处字符(等于 dl) |
X | 删除光标左边字符(退格) |
3x | 删除 3 个字符 |
dd | 删除(剪切)整行,3dd 删 3 行 |
dw / dW | 删除到词尾 / 大词尾 |
db | 删除到词首 |
de | 删除到当前词尾(保留空格) |
d$ / D | 删除到行尾 |
d0 | 删除到行首 |
d^ | 删除到第一个非空白字符 |
dG | 删除到文件末尾 |
dgg | 删除到文件开头 |
diw / daw | 删除词内 / 词及周围空格(文本对象,见 4.6) |
dap | 删除整个段落 |
:g/pattern/d | 删除所有匹配行 |
4.2.2 复制(Yank)与粘贴
| 快捷键 | 效果 |
|---|
yy / Y | 复制整行,3yy 复制 3 行 |
yw | 复制一个词 |
y$ | 复制到行尾 |
y0 | 复制到行首 |
yG | 复制到文件末尾 |
ygg | 复制到文件开头 |
yap | 复制整个段落 |
p | 粘贴到光标后(行级内容粘贴到下一行) |
P | 粘贴到光标前 |
3p | 粘贴 3 次 |
]p | 粘贴并自动匹配当前行缩进 |
gp / gP | 粘贴后光标停在粘贴内容末尾 |
:t N / :copy N | 复制当前行到第 N 行后 |
:t. | 复制当前行到下一行(比 yyp 更快) |
:t$ | 复制当前行到文件末尾 |
4.2.3 修改(Change)与替换
| 快捷键 | 效果 |
|---|
r{char} | 替换光标处字符为 {char} |
3r{char} | 替换 3 个字符 |
R | 进入替换模式(覆盖输入),Esc 退出 |
cc | 删除整行并进入插入模式 |
C | 删除到行尾并进入插入模式 |
cw / cW | 删除到词尾并进入插入模式 |
ciw / caw | 修改词内 / 词及空格(文本对象) |
ci" / ci( | 修改引号 / 括号内的内容 |
s | 删除光标处字符并进入插入模式 |
S | 删除整行并进入插入模式(等于 cc) |
~ | 切换光标处字符大小写,3~ 切换 3 个 |
g~w | 切换词的大小写 |
guw / gUw | 词转小写 / 大写 |
g~~ | 切换整行大小写 |
gUU / guu | 整行大写 / 小写 |
4.2.4 撤销、重做与重复
| 快捷键 | 效果 |
|---|
u | 撤销 |
U | 撤销当前行的所有修改(再按一次恢复) |
Ctrl+r | 重做(redo) |
. | 重复上一次修改操作(Vim 最强大的按键) |
3. | 重复 3 次 |
g; / g, | 在修改历史中后退 / 前进 |
:undolist | 查看撤销树分支 |
:earlier 10m | 回到 10 分钟前的状态 |
:later 5m | 前进到 5 分钟后的状态 |
4.2.5 缩进与格式化
| 快捷键 | 效果 |
|---|
>> / << | 右缩进 / 左缩进当前行 |
3>> | 缩进 3 行 |
>j / <j | 缩进当前行与下一行(可组合为 >2j) |
== | 自动格式化当前行 |
gg=G | 全文件自动格式化 |
= + 移动 | 对移动范围格式化,如 =ap 格式化段落 |
gq + 移动 | 按 textwidth 重排文本,如 gqap |
J | 合并下一行到当前行(带空格) |
gJ | 合并下一行(不带空格) |
4.2.6 排序与过滤
| 指令 | 效果 |
|---|
:sort | 按字典序排序选中行或全文 |
:sort! | 逆序排序 |
:sort u | 排序并去重 |
:sort n | 按数字大小排序 |
:%!sort | 用外部 sort 过滤全文 |
:%!column -t | 对齐表格列 |
:'<,'>!python3 -m json.tool | 格式化选中的 JSON |
4.3 搜索
4.3.1 基本搜索
| 快捷键 | 效果 |
|---|
/pattern | 向下搜索 |
?pattern | 向上搜索 |
n | 下一个匹配(同方向) |
N | 上一个匹配(反方向) |
* | 搜索当前光标下单词(向下,全词匹配) |
# | 搜索当前光标下单词(向上) |
g* / g# | 搜索当前光标下单词(不要求全词匹配) |
q/ / q? | 打开搜索历史窗口,可编辑后回车执行 |
4.3.2 搜索语法(正则)
| 写法 | 效果 |
|---|
/\<word\> | 全词匹配 word |
/\d\+ | 连续数字 |
/^foo | 行首的 foo |
/bar$ | 行尾的 bar |
/\cWord | 忽略大小写搜索 Word |
/\CWord | 强制区分大小写搜索 Word |
/\v(foo|bar) | very magic 模式,正则语法接近 PCRE |
/foo.*bar | 贪婪匹配 |
/\zs / /\ze | 设定匹配起点 / 终点 |
:%s/foo/bar/ 中的 \1 \2 | 引用捕获分组 |
4.3.3 搜索设置
| 指令 | 效果 |
|---|
:set incsearch | 输入时实时高亮第一个匹配 |
:set hlsearch | 高亮所有匹配 |
:noh | 临时关闭高亮 |
:set ignorecase | 忽略大小写 |
:set smartcase | 含大写时自动区分大小写 |
:set wrapscan | 搜到文件末尾后回到开头(默认开) |
4.3.4 搜索结果导航(Quickfix)
| 指令 | 效果 |
|---|
:grep -r pattern . | 用外部 grep 搜索 |
:vimgrep /pattern/ **/*.c | 内置多文件搜索 |
:copen / :cclose | 打开 / 关闭搜索结果窗口 |
:cnext / :cprev | 下一个 / 上一个搜索结果 |
:cfirst / :clast | 第一个 / 最后一个结果 |
:lopen / :lnext | 位置列表(当前窗口)搜索 |
替换命令的完整语法见 5.2 搜索替换。
4.4 多文件、缓冲区、窗口与标签页
4.4.1 缓冲区(Buffer)
| 快捷键 | 效果 |
|---|
:e filename | 编辑新文件 |
:ls / :buffers | 列出所有缓冲区 |
:bn / :bnext | 下一个缓冲区 |
:bp / :bprev | 上一个缓冲区 |
:b N | 切换到第 N 个缓冲区 |
:b filename | 按文件名切换到缓冲区(支持 Tab 补全) |
:bd | 关闭当前缓冲区 |
:bufdo %s/old/new/g | 对所有缓冲区执行命令 |
4.4.2 窗口分屏
| 快捷键 | 效果 |
|---|
:split / :sp | 水平分屏 |
:vsplit / :vs | 垂直分屏 |
:sp filename / :vs filename | 分屏并打开文件 |
Ctrl+w s / Ctrl+w v | 水平 / 垂直分屏(快捷键) |
Ctrl+w h/j/k/l | 切换到左 / 下 / 上 / 右窗口 |
Ctrl+w w | 轮流切换窗口 |
Ctrl+w W | 反向轮流切换 |
Ctrl+w q / Ctrl+w c | 关闭当前窗口 |
Ctrl+w o | 只保留当前窗口(关闭其他) |
Ctrl+w = | 均分窗口大小 |
Ctrl+w + / Ctrl+w - | 增加 / 减少窗口高度 |
Ctrl+w > / Ctrl+w < | 增加 / 减少窗口宽度 |
Ctrl+w r | 旋转窗口布局 |
Ctrl+w x | 与下一个窗口交换位置 |
Ctrl+w H/J/K/L | 把当前窗口移到最左 / 下 / 上 / 右 |
Ctrl+w T | 把当前窗口移成新标签页 |
4.4.3 标签页(Tab)
| 快捷键 | 效果 |
|---|
:tabnew / :tabnew file | 新建标签页 / 并在其中打开文件 |
:tabclose / :tabc | 关闭当前标签页 |
:tabonly / :tabo | 只保留当前标签页 |
:tabnext / gt | 下一个标签页 |
:tabprev / gT | 上一个标签页 |
:tabfirst / :tablast | 第一个 / 最后一个标签页 |
:tabmove N | 把当前标签页移到第 N 位 |
:tabs | 列出所有标签页 |
经验:缓冲区对应文件,窗口对应视口,标签页对应布局集合。日常切换用 buffer 最快,需要对照查看时用分屏。
4.5 寄存器与宏
| 快捷键 | 效果 |
|---|
"{char}y | 复制到指定寄存器 {char} |
"{char}p | 从指定寄存器 {char} 粘贴 |
"*y / "+y | 复制到系统剪贴板 |
"*p / "+p | 从系统剪贴板粘贴 |
qa … q | 录制宏:开始(qa) → 操作 → 结束(q) |
@a | 执行寄存器 a 中的宏 |
@@ | 重复上一次执行的宏 |
5@a | 执行宏 5 次 |
4.6 文本对象(Text Objects)
| 快捷键 | 含义 |
|---|
ciw | 删除当前词并插入(change inner word) |
ci" | 删除双引号内的内容并插入 |
ci( / ci) | 删除括号内的内容并插入 |
diw | 删除一个词 |
da" | 删除双引号及内容(a = around) |
yi" | 复制引号内的内容 |
vi{ | 选中花括号内的内容 |
规则:{operator}{i/a}{text-object} — i = inner, a = around
4.7 高级编辑
| 快捷键 | 效果 |
|---|
. | 重复上一次修改 |
Ctrl+a | 数字 +1 |
Ctrl+x | 数字 -1 |
g~w | 切换词的大小写 |
guw | 词转为小写 |
gUw | 词转为大写 |
gq | 段落格式化为固定宽度 |
za | 折叠/展开(编程代码块) |
五、: 指令大全
5.1 文件操作
| 指令 | 效果 |
|---|
:w | 保存 |
:w filename | 另存为 |
:q | 退出 |
:q! | 强制退出(不保存) |
:wq 或 :x | 保存并退出 |
:e filename | 打开文件 |
:e! | 重新加载当前文件(放弃修改) |
:r filename | 将文件内容插入当前光标位置 |
:r !command | 将 Shell 命令输出插入当前光标位置 |
5.2 搜索替换
| 指令 | 效果 |
|---|
:%s/old/new/g | 全文替换 |
:%s/old/new/gc | 全文替换(每次确认) |
:10,20s/old/new/g | 第 10-20 行范围内替换 |
:s/old/new/g | 仅当前行替换 |
:vimgrep /pattern/ *.c | 在多文件中搜索 |
:copen | 打开搜索结果窗口 |
5.3 行号与显示
| 指令 | 效果 |
|---|
:set nu | 显示行号 |
:set nonu | 隐藏行号 |
:set rnu | 相对行号(光标为 0,上下以距离标注) |
:set list | 显示不可见字符(Tab = ^I,行尾 = $) |
:set wrap / :set nowrap | 启用/禁用自动换行 |
:set hlsearch | 搜索高亮 |
:noh | 临时关闭搜索高亮 |
:set paste | 粘贴模式(禁用自动缩进) |
:set mouse=a | 启用鼠标支持 |
5.4 缩进与 Tab
| 指令 | 效果 |
|---|
:set tabstop=4 | Tab 显示宽度 |
:set shiftwidth=4 | 缩进宽度 |
:set expandtab | Tab 转为空格 |
:set noexpandtab | 保留 Tab 制表符 |
:retab | 将现有 Tab/空格按当前设置转换 |
:set autoindent | 自动缩进 |
5.5 窗口与 Tab 页
| 指令 | 效果 |
|---|
:split / :sp | 水平分屏 |
:vsplit / :vs | 垂直分屏 |
:tabnew | 新建标签页 |
:tabclose | 关闭当前标签页 |
:tabnext / :tabn | 下一个标签页 |
:tabprev / :tabp | 上一个标签页 |
:tabs | 列出所有标签页 |
5.6 外部命令
| 指令 | 效果 |
|---|
:!command | 执行外部命令(如 :!gcc % 编译当前文件) |
:! | 重复上一次外部命令 |
:shell | 打开子 Shell(exit 返回 Vim) |
:terminal | 在 Vim 内打开终端(Neovim/Vim 8+) |
5.7 帮助
| 指令 | 效果 |
|---|
:help | 打开帮助主页 |
:help :w | 查看 :w 命令的帮助 |
:help i_<Esc> | 查看 Insert 模式中 Esc 的帮助 |
:help usr_toc | 用户手册目录 |
5.8 编程相关
| 指令 | 效果 |
|---|
:make | 运行 make 并跳转到第一个错误 |
:cnext / :cn | 下一个编译错误 |
:cprev / :cp | 上一个编译错误 |
:!gcc % -o %< && ./%< | 编译并运行当前 C 文件 |
:set syntax=c | 设置语法高亮为 C |
:set filetype=c | 设置文件类型 |
:!python3 % | 运行当前 Python 文件 |
六、.vimrc 基础配置
在用户主目录创建 .vimrc(Windows 为 %USERPROFILE%\_vimrc,Linux/macOS 为 ~/.vimrc):
" 基础设置
set number " 显示行号
set relativenumber " 相对行号
set tabstop=4 " Tab 宽度
set shiftwidth=4 " 缩进宽度
set expandtab " Tab 转空格
set autoindent " 自动缩进
set hlsearch " 搜索高亮
set incsearch " 增量搜索
set ignorecase " 搜索忽略大小写
set smartcase " 包含大写时区分大小写
set mouse=a " 启用鼠标
set clipboard=unnamed " 系统剪贴板
" 高亮光标行
set cursorline
" 由文件类型决定缩进
filetype plugin indent on
" 快捷键:<Leader> 默认是 \
let mapleader = " "
nnoremap <Leader>w :w<CR> " 空格+w 保存
nnoremap <Leader>q :q<CR> " 空格+q 退出
nnoremap <Leader>so :so %<CR> " 空格+so 重新加载配置文件
七、与 C/C++ 开发的配合
Linux 下使用 Vim 开发 C/C++ 的最简配置:
# 安装插件管理器 vim-plug
curl -fLo ~/.vim/autoload/plug.vim --create-dirs \
https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim
.vimrc 中添加:
call plug#begin()
Plug 'neoclide/coc.nvim', {'branch': 'release'} " 代码补全(LSP)
Plug 'vim-airline/vim-airline' " 状态栏美化
Plug 'preservim/nerdtree' " 文件浏览器
Plug 'junegunn/fzf.vim' " 模糊搜索
call plug#end()
" 安装 coc-clangd(Vim 内执行)
" :CocInstall coc-clangd
编译运行快捷键:
" F5 编译并运行当前 C 文件
autocmd FileType c nnoremap <F5> :w<CR>:!gcc % -o %< -Wall -Wextra -g -std=c11 && ./%<<CR>
更多终端开发环境配置参考 C 教程环境配置 和 Python 快速入门。
八、速查卡
| 分类 | 快捷键 | 效果 |
|---|
| 模式切换 | i / Esc / : | 插入 / 普通 / 命令模式 |
| 移动 | h j k l | 左 下 上 右 |
| 移动 | w / b | 词首 / 词尾 |
| 移动 | 0 / $ / ^ | 行首 / 行尾 / 首个非空 |
| 移动 | gg / G / :N | 文件头 / 文件尾 / 第 N 行 |
| 删除 | x / dd | 删字符 / 删行 |
| 复制 | yy / p | 复制行 / 粘贴 |
| 撤销 | u / Ctrl+r | 撤销 / 重做 |
| 搜索 | /word / n / N | 搜索 / 下一匹配 / 上一匹配 |
| 保存退出 | :w / :q / :wq | 保存 / 退出 / 保存并退出 |
| 替换 | :%s/old/new/g | 全文替换 |
| 分屏 | :sp / :vs | 水平 / 垂直分屏 |
| 窗口切换 | Ctrl+w h j k l | 窗口间移动 |
| 宏 | q a … q / @a | 录制宏 / 执行宏 |
九、现代 Vim 上位替代
Vim 在 Linux 开发中广受欢迎,熟练之后操作轻快流畅,但缺点是学习曲线陡峭、配置耗时(原生 Vim 对标现代 IDE 需要自己拼装补全、语法高亮、文件树)。以下按”从易到难”给出替代方案。
1. IDE 内置 Vim 模式
主流 IDE 与编辑器都提供了 Vim 键位模拟插件,装上之后编辑习惯无缝迁移,同时保留 IDE 的补全、调试、重构能力:
| 宿主 | 插件 | 说明 |
|---|
| VS Code | Vim(vscodevim.vim) | 最接近原生 Vim 的模拟,社区最活跃 |
| IntelliJ / PyCharm / CLion | IdeaVim | JetBrains 官方支持,完美融合 IDE 快捷键 |
| Visual Studio | VsVim | 微软官方维护 |
| Chrome / Edge 浏览器 | Vimium | 浏览器内用 hjkl 操作网页(同思路) |
| Excel / 其他 | 不宜强上 | 键位冲突大于收益 |
装上插件即可获得原生 Vim 约九成的操作体验(hjkl 移动、dd/yy、宏、寄存器都可用),且零配置——这是最推荐的入门路径。
2. Neovim(nvim)
Neovim 脱胎于 Vim,解决了 Vim 二十多年积累的设计包袱:
| 优势 | 说明 |
|---|
| 异步架构 | 插件不再卡死界面,LSP 补全流畅 |
| Lua 配置 | 用 Lua 代替 vimscript 写配置,现代且可控 |
| 内置 LSP 客户端 | 原生支持补全、跳转、诊断(对标 IDE 核心功能) |
| 内置终端 | :terminal 在编辑器内开终端 |
| 社区生态 | Telescope、Treesitter、NvimTree 等已成事实标准 |
3.1 一键配置:LazyVim
原生 Neovim 仍然要自己配,但社区已经给出”装上就用”的整合包。LazyVim 是目前最流行的 Neovim 一键配置发行版:
- 基于 lazy.nvim 插件管理器,插件按需加载
- 开箱即用:文件树、模糊搜索、LSP 补全、Git 集成、主题
- 覆盖 Python / C/C++ / Go / Rust / 前端等主流语言
- 安装后基本不需要额外配置,快捷键以
<leader> 前缀组织、高度可查
3.2 作者的 ARKVim 项目
作者自身就是 LazyVim 重度用户,并基于它做了针对性定制,开源项目 ARKVim:
| 特性 | 说明 |
|---|
| 项目地址 | https://github.com/missercatos/ARKVim |
| 基础 | 脱胎于 LazyVim,保留其稳定插件体系 |
| 快捷编译运行 | 一键编译运行当前文件(针对 C / C++ 优化) |
| 快捷键扩展 | 追加大量高频操作快捷键,减少按键次数 |
| 多语言支持 | Python、C/C++、Java、Go、Rust、Lua、Ruby、HTML、CSS、JS 全系列插件 |
| 个性化 | 作者日常使用的主题、键位、优化调参 |
如果你打算长期用 Neovim,建议直接 clone 作者的配置体验一下,再按需增删:git clone <项目地址> ~/.config/nvim,然后打开 nvim 等待插件安装完成即可。
3. 其他现代替代
| 工具 | 特点 | 适合谁 |
|---|
| Zed | Rust 写的高性能编辑器,内置 AI 与协作 | 追求速度与现代化的开发者 |
| Helix | 内置 LSP、免配置、模式编辑(与 Vim 略异) | 想换新手感的人 |
| Emacs(evil-mode) | Vim 键位 + Emacs 生态,可配置性天花板 | 愿意花时间深度定制的用户 |
| Sublime Text | 轻量、启动快,Vintage 模式模拟 Vim | 轻量编辑 + 一点 Vim 键位 |
4. 选择建议
| 你的情况 | 推荐 |
|---|
| 刚接触 Vim,只想在 VS Code 里体验 | VS Code + Vim 插件 |
| 日常主力是 JetBrains IDE | IdeaVim |
| 想深入终端编辑器,愿意折腾配置 | Neovim + LazyVim(或直接 ARKVim) |
| 重度自定义、千层饼配置 | Emacs + evil-mode / 自研 nvim 配置 |
| 佛系,够用就好 | 原生 Vim 已足够,无需迁移 |