📱 Vim 配置文件 vimrc 详解
1. 📝 简介
Vim 的配置文件在 Linux 系统中默认为 .vimrc,在 Windows 系统中则为 _vimrc,两者在功能上没有差异。下文统称为 vimrc。
vimrc 用于保存用户自定义的启动设置、插件加载方式、界面优化选项等。配置得当可以显著提升编辑效率和使用体验。
2. 📁 目录结构
Vim高手通常会根据项目的不同配置全局vimrc和局部vimrc。
全局vimrc对所有项目都生效,局部vimrc只对其所在的项目生效。
以下是典型的全局vimrc和局部vimrc的目录结构
/home/
├── vimrc ← 全局 Vim 配置文件(适用于所有项目)
├── project-a/
│ ├── vimrc ← 项目 A 的局部配置(仅在目录project-a中打开 Vim 时生效)
│ └── ... ← 项目 A 其他文件
├── project-b/
│ ├── vimrc ← 项目 B 的局部配置(仅在目录project-b中打开 Vim 时生效)
│ └── ... ← 项目 B 其他文件
3. 🖥️ 全局vimrc配置
以下是常见的全局vimrc配置:
"----------------------------
" Basic Settings
" ----------------------------
set nocompatible
filetype off
set encoding=utf-8
set termencoding=utf-8
set fileformats=unix,dos,mac
set fileencoding=utf-8
set fileencodings=utf-8,gbk,ucs-bom,latin1
set exrc
" set secure
" set rtp+=~\vimfiles\autoload\plug.vim
" ----------------------------
" Basic UI Settings
" ----------------------------
syntax on
set number
set relativenumber
set showcmd
set cursorline
set wildmenu
set lazyredraw
" ----------------------------
" Plugin Manager
" ----------------------------
call plug#begin('~/vimfiles/plugged')
Plug 'preservim/nerdtree'
Plug 'luochen1990/rainbow'
Plug 'vim-airline/vim-airline'
call plug#end()
" ----------------------------
" Plugin Shortcuts & Configuration
" ----------------------------
" NERDTree
map <F2> :NERDTreeToggle<CR>
let NERDTreeShowHidden=1
" Rainbow parentheses
let g:rainbow_active = 1
" Airline
let g:airline#extensions#tabline#enabled = 1
let g:airline#extensions#tabline#buffer_nr_show = 1
说明:
-
基本设置(Basic Settings)
- set nocompatible:关闭与传统 Vi 编辑器的兼容模式,使 Vim 可以使用更多增强功能。
- filetype off:在加载插件前先关闭文件类型检测,防止插件加载顺序出错。
- set encoding=utf-8:设置 Vim 使用 UTF-8 编码,支持多语言文本文件的读取与编辑。
- set termencoding=utf-8:设置 Vim 与终端之间通信的编码方式,确保在终端中正确显示 UTF-8 字符。
- set fileformats=unix,dos,mac:设置 Vim 打开文件时优先使用的换行符格式,这里表示 Vim 会优先尝试 Unix 换行符,如果不匹配再尝试 Windows (dos) 和 macOS 旧版格式。
- set fileencoding=utf-8:指定当前文件保存时使用的编码格式。
- set fileencodings=utf-8,gbk,ucs-bom,latin1:指定 Vim 打开文件时尝试的编码顺序,用于自动识别文件编码。适用于中英文混合环境或跨平台项目。
- set exrc: 允许加载每个目录下的局部vimrc配置
- " set secure:出于安全考虑,建议开启 set secure,这样 Vim 不会在加载局部 vimrc 时执行 :!、:shell 等外部命令。但如果某些插件(如 YouCompleteMe)在局部 vimrc 中配置了相关命令,而 set secure 开启会阻止其运行,则可以注释该项。
- " set rtp+=~\vimfiles\autoload\plug.vim:添加 vim-plug 的路径到rtp。如果你是在 Windows 系统中使用 Vim 插件,需要放开这行代码,在 Linux 系统中可以注释掉。
-
界面设置(Basic UI Settings)
- syntax on:启用语法高亮,根据不同文件类型进行高亮显示。
- set number:在编辑器左侧显示实际的行号,便于定位代码位置。
- set relativenumber:显示相对行号。当前行显示为 0,其他行为相对于当前行的偏移。这有助于使用
j
,k
,d
,y
等命令快速操作多行。 - set showcmd:在屏幕下方实时显示正在输入的命令组合,例如
d2w
、y$
,帮助新手理解命令行为。 - set cursorline:高亮当前光标所在行,便于聚焦编辑位置。
- set wildmenu:增强命令行补全体验,在输入
:e
或:b
之类的命令时会弹出文件名、缓冲区的补全列表。 - set lazyredraw:在执行宏或复杂命令时不频繁重绘界面,可以提升性能,尤其在运行大量命令时更明显。
-
通用插件管理(Plugin Manager)
- 这里用vim-plug配置了3个较为通用的插件,分别是NERDTree、Rainbow、Airline。
- NERDTree是一个文件系统浏览器插件,可以在 Vim 左侧打开一个树状文件目录窗口,方便用户快速定位、打开或管理项目文件,是许多 Vim 用户的常用导航工具。
- Rainbow是一个彩虹括号高亮插件,能使用不同颜色高亮显示嵌套的括号(包括 ()[]{}<>),特别适合阅读嵌套结构复杂的代码,如 Lisp、C++ 模板等。
- Airline是一个状态栏美化插件,用于在 Vim 底部状态栏中显示更丰富的信息,如当前模式、文件编码、Git 分支等,同时支持配色主题和扩展模块(如标签页、缓冲区切换等)。
- 在全局vimrc中配置的插件会对所有项目生效,也就是说,无论在哪个目录打开 Vim,这三个插件都会被自动加载,适合作为通用开发工具集。
-
通用插件配置(Plugin Shortcuts & Configuration)
- NERDTree 插件的配置说明详见 NERDTree 目录浏览插件(Vim插件)基本配置和用法
- Rainbow 插件的配置说明详见 Rainbow 括号配色插件(Vim插件)基本配置和用法
- Airline 插件的配置说明详见 Airline 状态栏插件(Vim插件)基本配置和用法
4. 📐 局部vimrc配置
以下是常见的局部vimrc配置:
" ----------------------------
" indentation Settings
" ----------------------------
set tabstop=4 " Set tab width to 4 spaces
set shiftwidth=4 " Set indentation width to 4 spaces
set expandtab " Use spaces instead of tabs
filetype plugin indent on " Enable filetype-based plugins and indentation
" ----------------------------
" Project-specific Plugin
" ----------------------------
call plug#begin('~/vimfiles/plugged')
Plug 'ycm-core/youCompleteMe'
call plug#end()
" ----------------------------
" Project-specific Plugin Shortcuts & Configuration
" ----------------------------
" YouCompleteMe
let g:ycm_auto_hover = ''
let g:ycm_complete_in_comments = 1
let g:ycm_filetype_whitelist = {
\ 'c': 1,
\ 'cpp': 1,
\ 'python': 1,
\ 'vim': 1,
\ 'sh': 1,
\ }
let g:ycm_key_invoke_completion = '<C-Z>'
nnoremap <Leader>fi :YcmCompleter FixIt<CR>
nnoremap <Leader>gt :YcmCompleter GoTo<CR>
nnoremap <Leader>gd :YcmCompleter GoToDefinition<CR>
nnoremap <Leader>gh :YcmCompleter GoToDeclaration<CR>
nnoremap <Leader>gr :YcmCompleter GoToReferences<CR>
说明:
-
缩进配置 (indentation Settings)
- set tabstop=4:设置一个实际的 Tab 字符宽度为 4 个空格,控制文本中
\t
显示的宽度。 - set shiftwidth=4:设置使用
>>
或<<
缩进命令时每次缩进的空格数,也设为 4。 - set expandtab:按下 Tab 键时插入空格而非实际的 Tab 字符,推荐用于保持缩进一致。
- filetype plugin indent on:启用基于文件类型的插件和缩进规则,让不同语言使用合适的缩进风格。
- set tabstop=4:设置一个实际的 Tab 字符宽度为 4 个空格,控制文本中
-
特殊插件管理(Project-specific Plugin)
- 这里用vim-plug配置了专门用于大型C++项目的 YCM(YouCompleteMe) 的插件。
- YCM 是一款基于语义分析的自动补全插件,使用 Clangd 和 Python 引擎支持多语言自动补全、跳转、引用查找、语法诊断等功能,适合对补全质量要求较高的项目开发。
- 在局部vimrc中配置的插件只在所在项目生效,也就是说,只有在用 Vim 打开该项目目录下的文件时才会加载 YCM 插件;打开其他项目则不会加载,从而有效避免全局启用 YCM 带来的内存和性能消耗。
-
特殊插件配置(Project-specific Plugin Shortcuts & Configuration)
- Windows 系统下 YCM 插件的配置说明详见 Windows系统下Vim插件YCM(YouCompleteMe)基本配置和用法
5. ⚠️ 注意事项
- 这里只是举个例子,vimrc文件具体怎么配置应该根据自己的喜好和习惯来,合适的才是最好的。
- 如果某个属性在全局vimrc和局部vimrc都有配置,那么局部vimrc会覆盖全局vimrc中的配置。
- 在局部vimrc中如果添加了 YCM 插件,请确保全局vimrc的
set secure
已被注释掉或不存在,否则用 Vim 打开项目文件会显示形如...exrc/vimrc或tag查找中不允许此命令...
的报错