⚡ Vim 配置文件 vimrc 详解

📱 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:在屏幕下方实时显示正在输入的命令组合,例如 d2wy$,帮助新手理解命令行为。
    • 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)

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:启用基于文件类型的插件和缩进规则,让不同语言使用合适的缩进风格。
  • 特殊插件管理(Project-specific Plugin)

    • 这里用vim-plug配置了专门用于大型C++项目的 YCM(YouCompleteMe) 的插件。
    • YCM 是一款基于语义分析的自动补全插件,使用 Clangd 和 Python 引擎支持多语言自动补全、跳转、引用查找、语法诊断等功能,适合对补全质量要求较高的项目开发。
    • 局部vimrc中配置的插件只在所在项目生效,也就是说,只有在用 Vim 打开该项目目录下的文件时才会加载 YCM 插件;打开其他项目则不会加载,从而有效避免全局启用 YCM 带来的内存和性能消耗。
  • 特殊插件配置(Project-specific Plugin Shortcuts & Configuration)

5. ⚠️ 注意事项

  • 这里只是举个例子,vimrc文件具体怎么配置应该根据自己的喜好和习惯来,合适的才是最好的。
  • 如果某个属性在全局vimrc局部vimrc都有配置,那么局部vimrc会覆盖全局vimrc中的配置。
  • 局部vimrc中如果添加了 YCM 插件,请确保全局vimrcset secure 已被注释掉或不存在,否则用 Vim 打开项目文件会显示形如 ...exrc/vimrc或tag查找中不允许此命令... 的报错
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值