1
0
wiki/FormalSciences/ComputerScience/GettingStarted/3.CommandLineTools/Vim/2.Vim 配置管理.md
2024-10-14 16:48:38 +08:00

328 lines
16 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
title: Vim 配置管理
description: 介绍 Vim 配置文件 vimrc 的管理,包括不同操作系统下的 vimrc 文件位置、基本结构、示例配置及插件管理。
keywords:
- Vim
- 配置管理
- vimrc
- 插件
- Vundle
- vim-plug
tags:
- FormalSciences/ComputerScience
- GettingStarted/CommandLineTools
- 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
```