327 lines
16 KiB
Markdown
327 lines
16 KiB
Markdown
---
|
||
title: VIM 配置管理
|
||
description: 介绍 Vim 配置文件 vimrc 的管理,包括不同操作系统下的 vimrc 文件位置、基本结构、示例配置及插件管理。
|
||
keywords:
|
||
- Vim
|
||
- 配置管理
|
||
- vimrc
|
||
- 插件
|
||
- Vundle
|
||
- vim-plug
|
||
tags:
|
||
- 技术/入门
|
||
- Vim
|
||
author: 仲平
|
||
date: 2024-08-08
|
||
---
|
||
|
||
## `vimrc` 文件
|
||
|
||
### 位置
|
||
|
||
`vimrc` 文件是 Vim 的配置文件,用于存储用户的个人设置和定制。它的位置可能因操作系统而异:
|
||
|
||
- **Linux/Unix**:通常在 `~/.vimrc` 或 `~/.vim/vimrc`
|
||
- **MacOS**:类似于 Linux,通常在 `~/.vimrc` 或 `~/.vim/vimrc`
|
||
- **Windows**:在 `C:\Users\<用户名>\_vimrc` 或 `C:\Users\<用户名>\vimfiles\vimrc`
|
||
|
||
在 Vim 中,可以通过以下命令查看 `vimrc` 文件的位置:
|
||
|
||
```vim
|
||
:echo $MYVIMRC
|
||
```
|
||
|
||
### 基本结构
|
||
|
||
一个典型的 `vimrc` 文件可能包含以下几部分:
|
||
|
||
1. **全局设置**:设置 Vim 的全局行为,例如编码、文件格式等。
|
||
2. **界面设置**:配置界面元素,例如行号、颜色主题、状态栏等。
|
||
3. **编辑设置**:调整编辑行为,例如自动缩进、搜索选项等。
|
||
4. **插件设置**:加载和配置 Vim 插件。
|
||
5. **快捷键映射**:自定义快捷键,提升编辑效率。
|
||
|
||
### 示例配置
|
||
|
||
```vim
|
||
" 全局设置
|
||
set nocompatible " 关闭与 Vi 的兼容模式
|
||
filetype off " 关闭文件类型检测
|
||
|
||
" 界面设置
|
||
set number " 显示行号
|
||
syntax on " 启用语法高亮
|
||
set background=dark " 设置背景色为暗色系
|
||
colorscheme desert " 使用 desert 颜色主题
|
||
|
||
" 编辑设置
|
||
set tabstop=4 " 设置 Tab 宽度为 4 个空格
|
||
set shiftwidth=4 " 设置自动缩进的宽度为 4 个空格
|
||
set expandtab " 将 Tab 转换为空格
|
||
set autoindent " 自动缩进新行
|
||
set hlsearch " 高亮搜索结果
|
||
set incsearch " 增量搜索
|
||
|
||
" 插件设置
|
||
call plug#begin('~/.vim/plugged')
|
||
Plug 'scrooloose/nerdtree' " 文件树插件
|
||
Plug 'tpope/vim-fugitive' " Git 集成插件
|
||
call plug#end()
|
||
|
||
" 快捷键映射
|
||
nnoremap <C-n> :NERDTreeToggle<CR> " Ctrl+n 切换 NERDTree
|
||
```
|
||
|
||
### 常用配置选项
|
||
|
||
| 配置选项 | 说明 | 示例 |
|
||
| --------------------------- | ---------------------------------- | ------------------------------------ |
|
||
| `set nocompatible` | 关闭与 Vi 的兼容模式 | `set nocompatible` |
|
||
| `set number` | 显示行号 | `set number` |
|
||
| `set relativenumber` | 显示相对行号 | `set relativenumber` |
|
||
| `set tabstop` | 设置 Tab 宽度(以空格数表示) | `set tabstop=4` |
|
||
| `set shiftwidth` | 设置自动缩进的宽度(以空格数表示) | `set shiftwidth=4` |
|
||
| `set expandtab` | 将 Tab 转换为空格 | `set expandtab` |
|
||
| `set autoindent` | 自动缩进新行 | `set autoindent` |
|
||
| `set smartindent` | 智能缩进 | `set smartindent` |
|
||
| `set hlsearch` | 高亮搜索结果 | `set hlsearch` |
|
||
| `set incsearch` | 增量搜索 | `set incsearch` |
|
||
| `set ignorecase` | 搜索时忽略大小写 | `set ignorecase` |
|
||
| `set smartcase` | 智能大小写匹配 | `set smartcase` |
|
||
| `syntax on` | 启用语法高亮 | `syntax on` |
|
||
| `set background` | 设置背景色(dark 或 light) | `set background=dark` |
|
||
| `colorscheme` | 设置颜色主题 | `colorscheme desert` |
|
||
| `set cursorline` | 高亮当前行 | `set cursorline` |
|
||
| `set wrap` | 自动换行显示长行 | `set wrap` |
|
||
| `set nowrap` | 禁止自动换行显示长行 | `set nowrap` |
|
||
| `set linebreak` | 在单词边界处换行 | `set linebreak` |
|
||
| `set showcmd` | 显示部分命令(在底部命令行显示) | `set showcmd` |
|
||
| `set ruler` | 显示光标位置(行号和列号) | `set ruler` |
|
||
| `set wildmenu` | 命令行补全增强 | `set wildmenu` |
|
||
| `set clipboard` | 使用系统剪贴板 | `set clipboard=unnamedplus` |
|
||
| `set backspace` | 设置退格键的行为 | `set backspace=indent,eol,start` |
|
||
| `set mouse` | 启用鼠标操作(a 为全部模式启用) | `set mouse=a` |
|
||
| `set splitbelow` | 新窗口在当前窗口下方打开 | `set splitbelow` |
|
||
| `set splitright` | 新窗口在当前窗口右侧打开 | `set splitright` |
|
||
| `set foldmethod` | 设置折叠方法(syntax、indent 等) | `set foldmethod=syntax` |
|
||
| `set foldlevel` | 设置折叠级别 | `set foldlevel=99` |
|
||
| `set termguicolors` | 启用真彩色支持(需要终端支持) | `set termguicolors` |
|
||
| `set guifont` | 设置 GUI 字体(在 GUI Vim 中使用) | `set guifont=Monaco:h12` |
|
||
| `set encoding` | 设置文件编码 | `set encoding=utf-8` |
|
||
| `filetype plugin indent on` | 启用文件类型检测和插件 | `filetype plugin indent on` |
|
||
| `set spell` | 启用拼写检查 | `set spell` |
|
||
| `set spelllang` | 设置拼写检查语言 | `set spelllang=en_us` |
|
||
| `set list` | 显示不可见字符 | `set list` |
|
||
| `set listchars` | 设置不可见字符的显示方式 | `set listchars=tab:>-,trail:~,eol:$` |
|
||
| `set undofile` | 启用撤销文件 | `set undofile` |
|
||
| `set undodir` | 设置撤销文件的保存路径 | `set undodir=~/.vim/undodir` |
|
||
| `set backup` | 启用备份文件 | `set backup` |
|
||
| `set backupdir` | 设置备份文件的保存路径 | `set backupdir=~/.vim/backup` |
|
||
| `set updatetime` | 设置交换文件的更新频率(毫秒) | `set updatetime=300` |
|
||
|
||
## 快捷键映射
|
||
|
||
### 自定义快捷键
|
||
|
||
Vim 提供了强大的快捷键映射功能,用户可以根据需要自定义快捷键。常用的映射命令有:
|
||
|
||
- `map`:通用映射
|
||
- `nmap`:普通模式下的映射
|
||
- `imap`:插入模式下的映射
|
||
- `vmap`:可视模式下的映射
|
||
|
||
```vim
|
||
nnoremap <C-s> :w<CR> " 在普通模式下,Ctrl+s 保存文件
|
||
inoremap <C-c> <Esc> " 在插入模式下,Ctrl+c 切换到普通模式
|
||
vnoremap <C-c> "+y " 在可视模式下,Ctrl+c 复制到系统剪贴板
|
||
```
|
||
|
||
### 常用快捷键示例
|
||
|
||
以下是一些常用的快捷键示例,这些快捷键可以提高日常编辑的效率:
|
||
|
||
| 快捷键配置 | 模式 | 说明 | 示例 |
|
||
| ----------------------------------------- | -------- | ----------------------------------- | ----------------------------------------- |
|
||
| `nnoremap <C-s> :w<CR>` | 普通模式 | `Ctrl+s` 保存文件 | `nnoremap <C-s> :w<CR>` |
|
||
| `inoremap <C-c> <Esc>` | 插入模式 | `Ctrl+c` 退出插入模式 | `inoremap <C-c> <Esc>` |
|
||
| `vnoremap <C-c> "+y` | 可视模式 | `Ctrl+c` 复制到系统剪贴板 | `vnoremap <C-c> "+y` |
|
||
| `nnoremap <C-x> :q<CR>` | 普通模式 | `Ctrl+x` 退出 Vim | `nnoremap <C-x> :q<CR>` |
|
||
| `nnoremap <C-t> :tabnew<CR>` | 普通模式 | `Ctrl+t` 打开新标签 | `nnoremap <C-t> :tabnew<CR>` |
|
||
| `nnoremap <C-n> :NERDTreeToggle<CR>` | 普通模式 | `Ctrl+n` 切换 NERDTree 文件树 | `nnoremap <C-n> :NERDTreeToggle<CR>` |
|
||
| `nnoremap <Leader>f :Files<CR>` | 普通模式 | `Leader+f` 调用 FZF 查找文件 | `nnoremap <Leader>f :Files<CR>` |
|
||
| `nnoremap <Leader>g :Gstatus<CR>` | 普通模式 | `Leader+g` 调用 Git 状态 | `nnoremap <Leader>g :Gstatus<CR>` |
|
||
| `nnoremap <Leader>w :w!<CR>` | 普通模式 | `Leader+w` 强制保存文件 | `nnoremap <Leader>w :w!<CR>` |
|
||
| `nnoremap <Leader>q :q!<CR>` | 普通模式 | `Leader+q` 强制退出 Vim | `nnoremap <Leader>q :q!<CR>` |
|
||
| `nnoremap <Leader>r :source $MYVIMRC<CR>` | 普通模式 | `Leader+r` 重新加载 `vimrc` 文件 | `nnoremap <Leader>r :source $MYVIMRC<CR>` |
|
||
| `vnoremap <Leader>y "+y` | 可视模式 | `Leader+y` 复制选中文本到系统剪贴板 | `vnoremap <Leader>y "+y` |
|
||
| `nnoremap <Leader>p "+p` | 普通模式 | `Leader+p` 从系统剪贴板粘贴 | `nnoremap <Leader>p "+p` |
|
||
| `nnoremap <Leader>t :terminal<CR>` | 普通模式 | `Leader+t` 打开终端 | `nnoremap <Leader>t :terminal<CR>` |
|
||
| `nnoremap <C-j> :cnext<CR>` | 普通模式 | `Ctrl+j` 跳到下一个 QuickFix 项 | `nnoremap <C-j> :cnext<CR>` |
|
||
| `nnoremap <C-k> :cprev<CR>` | 普通模式 | `Ctrl+k` 跳到上一个 QuickFix 项 | `nnoremap <C-k> :cprev<CR>` |
|
||
| `nnoremap <Leader>n :nohlsearch<CR>` | 普通模式 | `Leader+n` 取消搜索高亮 | `nnoremap <Leader>n :nohlsearch<CR>` |
|
||
| `nnoremap <Leader>e :e ~/.vimrc<CR>` | 普通模式 | `Leader+e` 打开 `vimrc` 文件 | `nnoremap <Leader>e :e ~/.vimrc<CR>` |
|
||
| `nnoremap <Leader>d "_d` | 普通模式 | `Leader+d` 删除但不复制到寄存器 | `nnoremap <Leader>d "_d` |
|
||
|
||
## Vim 插件管理
|
||
|
||
### 插件管理工具
|
||
|
||
#### Vundle
|
||
|
||
[Vundle](https://github.com/VundleVim/Vundle.vim) 是一个流行的 Vim 插件管理工具,安装步骤如下:
|
||
|
||
1. 克隆 Vundle 仓库到 Vim 的插件目录:
|
||
|
||
```shell
|
||
$ git clone https://github.com/VundleVim/Vundle.vim.git ~/.vim/bundle/Vundle.vim
|
||
```
|
||
|
||
2. 在 `vimrc` 文件中添加以下内容:
|
||
|
||
```vim
|
||
set nocompatible " 关闭 Vi 兼容模式
|
||
filetype off " 关闭文件类型检测
|
||
|
||
" 设置 Vundle
|
||
set rtp+=~/.vim/bundle/Vundle.vim
|
||
call vundle#begin()
|
||
" 在此处添加插件
|
||
Plugin 'VundleVim/Vundle.vim'
|
||
call vundle#end() " 所有插件必须在这一行之前
|
||
|
||
filetype plugin indent on " 启用文件类型检测
|
||
```
|
||
|
||
**基本使用**:
|
||
|
||
- 安装插件: 在 `vimrc` 中添加插件后,启动 Vim 并运行 `:PluginInstall`。
|
||
- 更新插件: 启动 Vim 并运行 `:PluginUpdate`。
|
||
- 删除插件: 从 `vimrc` 中移除插件行,启动 Vim 并运行 `:PluginClean`。
|
||
|
||
#### Vim-plug
|
||
|
||
[vim-plug](https://github.com/junegunn/vim-plug) 是一个现代的 Vim 插件管理工具,安装步骤如下:
|
||
|
||
1. 下载 vim-plug 并放入 `autoload` 目录:
|
||
|
||
```shell
|
||
$ curl -fLo ~/.vim/autoload/plug.vim --create-dirs https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim
|
||
```
|
||
|
||
2. 在 `vimrc` 文件中添加以下内容:
|
||
|
||
```vim
|
||
call plug#begin('~/.vim/plugged')
|
||
" 在此处添加插件
|
||
Plug 'junegunn/vim-plug'
|
||
call plug#end()
|
||
```
|
||
|
||
**基本使用**:
|
||
|
||
- 安装插件: 在 `vimrc` 中添加插件后,启动 Vim 并运行 `:PlugInstall`。
|
||
- 更新插件: 启动 Vim 并运行 `:PlugUpdate`。
|
||
- 删除插件: 从 `vimrc` 中移除插件行,启动 Vim 并运行 `:PlugClean`。
|
||
|
||
### 常用插件
|
||
|
||
| 插件 | 功能描述 | 安装配置示例(基于 vim-plug) | 常用命令或快捷键 |
|
||
| -------------- | ------------------------ | ------------------------------------------------------------ | --------------------------------------- |
|
||
| NERDTree | 文件树管理 | `Plug 'preservim/nerdtree'` | `:NERDTreeToggle` |
|
||
| fzf.vim | 模糊查找 | `Plug 'junegunn/fzf', { 'do': { -> fzf#install() } }` | `:Files` `:Buffers` |
|
||
| ctrlp.vim | 文件和缓冲区切换 | `Plug 'ctrlpvim/ctrlp.vim'` | `:CtrlP` |
|
||
| YouCompleteMe | 代码补全 | `Plug 'ycm-core/YouCompleteMe'` (需要编译安装) | 自动代码补全 |
|
||
| Syntastic | 语法检查 | `Plug 'vim-syntastic/syntastic'` | `:SyntasticCheck` |
|
||
| vim-airline | 状态栏美化 | `Plug 'vim-airline/vim-airline'` `Plug 'vim-airline/vim-airline-themes'` | 自动启用状态栏美化 |
|
||
| vim-fugitive | Git 集成 | `Plug 'tpope/vim-fugitive'` | `:Gstatus` `:Gcommit` `:Gpush` `:Gpull` |
|
||
| vim-surround | 快速修改括号、引号等符号 | `Plug 'tpope/vim-surround'` | `ysiw]` `ds'` `cs"'` |
|
||
| vim-commentary | 快速注释代码 | `Plug 'tpope/vim-commentary'` | `gc` + 动作 |
|
||
| vim-gitgutter | 显示 Git 更改信息 | `Plug 'airblade/vim-gitgutter'` | 自动显示更改标记 |
|
||
|
||
### 配置示例
|
||
|
||
```vim
|
||
call plug#begin('~/.vim/plugged')
|
||
|
||
" 文件树管理
|
||
Plug 'preservim/nerdtree'
|
||
|
||
" 模糊查找
|
||
Plug 'junegunn/fzf', { 'do': { -> fzf#install() } }
|
||
Plug 'junegunn/fzf.vim'
|
||
|
||
" 文件和缓冲区切换
|
||
Plug 'ctrlpvim/ctrlp.vim'
|
||
|
||
" 状态栏美化
|
||
Plug 'vim-airline/vim-airline'
|
||
Plug 'vim-airline/vim-airline-themes'
|
||
|
||
" Git 集成
|
||
Plug 'tpope/vim-fugitive'
|
||
|
||
" 快速修改括号、引号等符号
|
||
Plug 'tpope/vim-surround'
|
||
|
||
" 快速注释代码
|
||
Plug 'tpope/vim-commentary'
|
||
|
||
" 显示 Git 更改信息
|
||
Plug 'airblade/vim-gitgutter'
|
||
|
||
call plug#end()
|
||
|
||
" 基本设置
|
||
set nocompatible
|
||
set number
|
||
set relativenumber
|
||
set tabstop=4
|
||
set shiftwidth=4
|
||
set expandtab
|
||
set autoindent
|
||
set hlsearch
|
||
set incsearch
|
||
set ignorecase
|
||
set smartcase
|
||
syntax on
|
||
set background=dark
|
||
colorscheme desert
|
||
set cursorline
|
||
set wrap
|
||
set showcmd
|
||
set ruler
|
||
set wildmenu
|
||
set clipboard=unnamedplus
|
||
set backspace=indent,eol,start
|
||
set mouse=a
|
||
set splitbelow
|
||
set splitright
|
||
set foldmethod=syntax
|
||
set foldlevel=99
|
||
set termguicolors
|
||
|
||
" 快捷键映射
|
||
nnoremap <C-n> :NERDTreeToggle<CR>
|
||
nnoremap <C-p> :CtrlP<CR>
|
||
nnoremap <Leader>f :Files<CR>
|
||
nnoremap <Leader>g :Gstatus<CR>
|
||
nnoremap <Leader>w :w!<CR>
|
||
nnoremap <Leader>q :q!<CR>
|
||
nnoremap <Leader>r :source $MYVIMRC<CR>
|
||
vnoremap <Leader>y "+y
|
||
nnoremap <Leader>p "+p
|
||
nnoremap <Leader>t :terminal<CR>
|
||
nnoremap <C-j> :cnext<CR>
|
||
nnoremap <C-k> :cprev<CR>
|
||
nnoremap <Leader>n :nohlsearch<CR>
|
||
nnoremap <Leader>e :e ~/.vimrc<CR>
|
||
nnoremap <Leader>d "_d
|
||
|
||
" Airline 主题
|
||
let g:airline_theme='luna'
|
||
|
||
" GitGutter 配置
|
||
let g:gitgutter_enabled = 1
|
||
|
||
```
|