外观
我的 Vim 配置与使用指南
Vim 是一个强大的文本编辑器,通过合理的配置和插件,可以打造成一个高效的开发环境。本文将详细介绍我的 Vim 配置,包括基础设置、快捷键映射和插件使用。
Vim Script 基础
在深入配置之前,先了解 Vim Script 的基本语法,有助于读懂和编写 .vimrc 配置文件。
特殊键表示
在映射命令中,特殊键用尖括号 <> 包裹表示:
| 符号 | 含义 |
|---|---|
<CR> | 回车键(Enter) |
<Esc> | Esc 键 |
<Space> | 空格键 |
<Tab> | Tab 键 |
<BS> | 退格键(Backspace) |
<C-x> | Ctrl+x |
<A-x> | Alt+x |
<S-x> | Shift+x |
<leader> | Leader 键(见下文) |
<localleader> | LocalLeader 键(插件局部 Leader) |
<left> / <right> / <up> / <down> | 方向键 |
例如 :w<CR> 表示输入 :w 后按下回车,即执行保存命令。
Leader 键
Leader 键是 Vim 自定义快捷键的命名空间前缀,默认为 \,通常改为空格或逗号:
let mapleader=" "在映射中写 <leader>y 表示"Leader 键 + y",即 空格 + y。
映射命令:map 系列
Vim 有多种映射命令,区别在于作用模式和是否递归:
| 命令 | 作用模式 | 是否递归 |
|---|---|---|
map | 普通、可视、操作符等模式 | 是 |
noremap | 普通、可视、操作符等模式 | 否 |
nnoremap | 普通模式(Normal) | 否 |
vnoremap | 可视模式(Visual) | 否 |
inoremap | 插入模式(Insert) | 否 |
cnoremap | 命令行模式(Command) | 否 |
xnoremap | 可视模式(不含选择模式) | 否 |
nmap | 普通模式 | 是 |
vmap | 可视模式 | 是 |
imap | 插入模式 | 是 |
递归 vs 非递归:
" 递归映射(危险):如果 j 本身也被映射,会触发链式调用
map j k
" 非递归映射(推荐):始终映射到 Vim 原生的 k
noremap j k实际配置中几乎总应使用非递归版本(nnoremap、vnoremap 等),以避免意外的递归展开。
基本语法
" 这是注释(双引号开头)
" 设置选项
set number " 显示行号
set option=value " 带值的选项
" 定义变量
let g:var = 1 " 全局变量(g:)
let s:var = 1 " 脚本局部变量(s:)
let b:var = 1 " 缓冲区变量(b:)
" 条件判断
if condition
" ...
endif基础配置
缩进配置
set expandtab
set tabstop=4
set shiftwidth=4
set softtabstop=4
set autoindent
set smartindent
set cindent
set cinoptions=g0这些设置确保了一致的代码缩进:
expandtab:将 Tab 转换为空格tabstop=4:Tab 显示为 4 个空格宽度shiftwidth=4:自动缩进使用 4 个空格softtabstop=4:按 Tab 键插入 4 个空格autoindent:自动继承上一行的缩进smartindent:智能缩进cindent:C 语言风格缩进cinoptions=g0:C++ 作用域声明(public/private)不缩进
快捷键映射
快速保存和退出
map W :w<CR>
map Q :q<CR>
map D :q!<CR>
map R :source $MYVIMRC<CR>W:快速保存文件Q:快速退出D:强制退出(不保存)R:重新加载配置文件
平滑滚动
noremap J 5j
noremap K 5k
noremap H 5h
noremap L 5l将 J、K、H、L 映射为一次移动 5 个字符/行,既保留了 Vim 的移动逻辑,又提高了移动效率。
搜索配置
set hlsearch
set incsearch
set ignorecase
set smartcase
nnoremap <LEADER><CR> :nohlsearch<CR>hlsearch:高亮搜索结果incsearch:增量搜索(边输入边搜索)ignorecase:搜索时忽略大小写smartcase:如果搜索词包含大写字母,则区分大小写<Leader><CR>:取消搜索高亮
窗口分割
set splitright
set splitbelow
nnoremap z <C-w>w
nnoremap r <C-w>r
nnoremap <left> :vertical resize -5<CR>
nnoremap <right> :vertical resize +5<CR>splitright:垂直分割时新窗口在右侧splitbelow:水平分割时新窗口在下方z:切换到下一个窗口r:旋转窗口布局<left>/<right>:调整窗口宽度
剪贴板集成
vnoremap <leader>y "+y
nnoremap <leader>p "+p
nnoremap <leader>sp :set paste<CR>
nnoremap <leader>np :set nopaste<CR><Leader>y:复制到系统剪贴板<Leader>p:从系统剪贴板粘贴<Leader>sp:启用粘贴模式(避免自动缩进)<Leader>np:禁用粘贴模式
插件管理
推荐使用 vim-plug 管理插件,支持 Github 中的绝大多数 vim 插件。
安装 vim-plug
curl -fLo ~/.vim/autoload/plug.vim --create-dirs \
https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim插件列表
call plug#begin()
Plug 'vim-airline/vim-airline'
Plug 'connorholyday/vim-snazzy'
Plug 'jiangmiao/auto-pairs'
Plug 'tpope/vim-commentary'
Plug 'tpope/vim-sensible'
Plug 'tpope/vim-surround'
Plug 'preservim/nerdtree'
Plug 'Xuyuanp/nerdtree-git-plugin'
Plug 'ycm-core/YouCompleteMe'
Plug 'lervag/vimtex'
Plug 'preservim/vim-markdown'
Plug 'iamcco/markdown-preview.nvim', { 'do': 'cd app && npm install' }
Plug 'tpope/vim-fugitive'
Plug 'junegunn/vim-easy-align'
Plug 'wakatime/vim-wakatime'
Plug 'github/copilot.vim'
call plug#end()安装插件:在 Vim 中执行 :PlugInstall
核心插件介绍
1. vim-airline - 状态栏美化
let g:airline#extensions#whitespace#enabled = 0
let g:airline_section_y = ''
let g:airline_section_z = '%l/%L : %c %p%%'Airline 提供了一个美观的状态栏,显示当前行号、列号和文件位置百分比。
2. vim-snazzy - 配色方案
" let g:SnazzyTransparent = 1
color snazzy3. NERDTree - 文件浏览器
nnoremap tt :NERDTreeToggle<CR>
nnoremap tf :NERDTreeFind<CR>tt:打开/关闭文件树tf:在文件树中定位当前文件
NERDTree 提供了一个侧边栏文件浏览器,配合 nerdtree-git-plugin 可以显示 Git 状态:
let g:NERDTreeGitStatusIndicatorMapCustom = {
\ 'Modified' :'✹',
\ 'Staged' :'✚',
\ 'Untracked' :'✭',
\ 'Renamed' :'➜',
\ 'Unmerged' :'═',
\ 'Deleted' :'✖',
\ 'Dirty' :'✗',
\ 'Ignored' :'☒',
\ 'Clean' :'✔︎',
\ 'Unknown' :'?',
\ }
4. YouCompleteMe - 代码补全
nnoremap gd :YcmCompleter GoToDefinitionElseDeclaration<CR>
nnoremap g/ :YcmCompleter GetDoc<CR>
nnoremap gt :YcmCompleter GetType<CR>
let g:ycm_clangd_binary_path = "/usr/bin/clangd-20"YCM 是一个强大的代码补全引擎,支持多种语言:
gd:跳转到定义g/:查看文档gt:查看类型信息
安装 YCM:
cd ~/.vim/plugged/YouCompleteMe
python3 install.py --clangd-completer5. vim-surround - 快速编辑包围符号
vim-surround 可以快速添加、修改、删除包围符号(括号、引号等),常用快捷键如下:
cs"':将双引号改为单引号ds":删除双引号ysiw":给当前单词加上双引号yss):给整行加上括号
6. vim-commentary - 快速注释
gcc:注释/取消注释当前行gc:在可视模式下注释选中的行gcap:注释一个段落
7. auto-pairs - 自动配对括号
自动补全括号、引号等配对符号,提高输入效率。
8. GitHub Copilot - AI 代码助手
inoremap <C-j> <Plug>(copilot-next)
inoremap <C-k> <Plug>(copilot-previous)
inoremap <C-\> <Plug>(copilot-suggest)Ctrl-j:下一个建议Ctrl-k:上一个建议Ctrl-\:手动触发建议Tab:接受建议
安装 Copilot:
- 在 Vim 中执行
:Copilot setup - 按照提示在浏览器中授权
9. vimtex - LaTeX 支持
let g:maplocalleader = " "
let g:vimtex_compiler_method = 'latexmk'
let g:vimtex_compiler_latexmk_engines = {
\ '_' : '-pdfxe',
\}vimtex 提供了完整的 LaTeX 编辑支持:
<LocalLeader>ll:编译 LaTeX 文档<LocalLeader>lv:查看 PDF<LocalLeader>lc:清理辅助文件<LocalLeader>lt:查看目录
使用 XeLaTeX 引擎编译,支持中文。
10. markdown-preview - Markdown 预览
let g:mkdp_browser = 'firefox'
nnoremap <C-p> :MarkdownPreviewToggle<CR>Ctrl-p:打开/关闭 Markdown 预览
在浏览器中实时预览 Markdown 文档。
11. vim-easy-align - 对齐工具
xmap ga <Plug>(EasyAlign)
nmap ga <Plug>(EasyAlign)使用示例:
- 选中多行(可视模式)
- 按
ga - 输入对齐字符(如
=、:)
// 对齐前
int a = 1;
int longer_name = 2;
int x = 3;
// 选中后按 ga=,对齐后
int a = 1;
int longer_name = 2;
int x = 3;12. vim-wakatime - 编码时间统计
自动追踪使用vim的编码时间,需要在 WakaTime 注册账号。WakaTime 会生成详细的编码时间统计和分析报告,帮助你了解自己的编码习惯和效率。 
高级功能
自动返回上次编辑位置
autocmd BufReadPost *
\ if line("'\"") >= 1 && line("'\"") <= line("$") && &ft !~# 'commit'
\ | exe "normal! g`\""
\ | endif打开文件时自动跳转到上次编辑的位置。
代码折叠
set foldmethod=marker
set foldmarker={{{,}}}用户可以用 {{{ 和 }}} 自定义折叠区域, 除此之外,Vim 支持对 markdown、LaTeX 等文件类型的自动折叠: 
Tags 支持
set tag=./tags,../tags,../../tags,../../../tags配合 ctags 使用,可以快速跳转到函数定义:
# 生成 tags 文件
ctags -R .在 Vim 中:
Ctrl-]:跳转到定义Ctrl-t:返回
使用技巧
1. 搜索和替换
" 搜索
/pattern
" 替换当前行
:s/old/new/g
" 替换全文
:%s/old/new/g
" 替换并确认
:%s/old/new/gc2. 宏录制
qa " 开始录制到寄存器 a
... " 执行操作
q " 停止录制
@a " 执行宏
100@a " 执行 100 次3. 可视块模式
Ctrl-v 进入可视块模式,可以进行列编辑:
Ctrl-v " 进入可视块模式
选择区域
I " 在选中列前插入
输入内容
Esc " 应用到所有行总结
这套 Vim 配置经过长期使用和调整,涵盖了日常开发的各个方面:
- 基础配置:合理的缩进、搜索和窗口管理
- 快捷键:高效的移动和编辑操作
- 代码补全:YCM + Copilot 提供强大的智能补全
- 文件管理:NERDTree 提供直观的文件浏览
- 多语言支持:LaTeX、Markdown、C/C++ 等
Vim 的学习曲线虽然陡峭,但一旦掌握,将极大提高编辑效率。建议循序渐进地学习,先掌握基本操作,再逐步添加插件和自定义配置。
参考资源
Happy Vimming! 🚀
版权所有
版权归属:Guisong Wu