# VIM 配置与常用命令指南
Vim 是一款强大的文本编辑器,以下内容为常用命令、列编辑技巧、插件管理和一些常见问题的解决方案。
## 常用命令
```bash
# 删除双引号内的内容
di" 或 da"
# 复制当前行
yy -> p
# 选中并复制
v -> 使用方向键移动 -> y
# 其他常见复制命令
y # 复制选定块
yy # 复制整行,n 行使用 nyy
y^ # 复制从当前位置到行首
y$ # 复制从当前位置到行尾
yw # 复制一个单词,n 个单词使用 nyw
yG # 复制到文件末尾,指定行使用 1yG
```
- **撤销操作**:`u`
## 列编辑操作
Vim 支持列编辑模式,适用于批量编辑特定列内容:
```bash
# 删除列内容
Ctrl+v -> 选择区域 -> d
# 插入列内容
Ctrl+v -> 选择区域 -> Shift+i -> 输入内容 -> Esc
# 替换列内容
Ctrl+v -> 选择区域 -> Shift+i -> c -> 输入内容 -> Esc
```
## 搜索相关设置
```bash
# 实时增量搜索
:set incsearch
# 忽略大小写搜索
:set ignorecase
```
## 常用配置
```bash
# 设置粘贴模式,避免注释符号
:set paste
# 显示行号
:set number
```
### 永久生效配置
在 `/etc/vimrc` 中添加以下内容:
```bash
set incsearch
set ignorecase
set paste
set number
```
## 插件管理
Vim 支持多种插件管理器。以下是常用插件和安装步骤。
### Vundle 插件管理器
> 适用于较老的插件管理方式
- [Vundle GitHub 仓库](https://github.com/VundleVim/Vundle.vim)
### vim-plug 插件管理器
> 推荐的插件管理器
- [vim-plug GitHub 仓库](https://github.com/junegunn/vim-plug)
#### 安装 vim-plug
```bash
curl -fLo ~/.vim/autoload/plug.vim --create-dirs \
https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim
```
#### 插件使用示例
在 `~/.vimrc` 文件中配置:
```bash
call plug#begin()
Plug 'tpope/vim-sensible'
Plug 'fatih/vim-go', { 'do': ':GoUpdateBinaries' }
call plug#end()
```
- 使用 `:PlugInstall` 命令安装插件。
### Pathogen 插件管理器
> 推荐用于简单插件管理
- [Pathogen GitHub 仓库](https://github.com/tpope/vim-pathogen)
#### 安装 Pathogen
```bash
mkdir -p ~/.vim/autoload ~/.vim/bundle && \
curl -LSso ~/.vim/autoload/pathogen.vim https://tpo.pe/pathogen.vim
```
## 常用插件推荐
- **Auto Pairs**:自动括号补全插件
```bash
git clone git://github.com/jiangmiao/auto-pairs.git ~/.vim/bundle/auto-pairs
```
- **NERDTree**:目录树管理工具
```bash
git clone https://github.com/preservim/nerdtree.git ~/.vim/bundle/nerdtree
# 启动命令
NERDTreeToggle
```
- **YouCompleteMe**:代码自动补全插件
```bash
git clone --recursive https://github.com/ycm-core/YouCompleteMe.git ~/.vim/bundle/YouCompleteMe
cd ~/.vim/bundle/YouCompleteMe
python3 install.py --go-completer
```
## 解决常见问题
### Gvim 菜单中文乱码
解决 Gvim 菜单中文显示乱码的配置:
```bash
set encoding=utf-8
set fileencodings=utf-8,chinese,latin-1,gbk,gb18030,gb2312
if has("win32")
set fileencoding=chinese
else
set fileencoding=utf-8
endif
source $VIMRUNTIME/delmenu.vim
source $VIMRUNTIME/menu.vim
language messages zh_CN.utf-8
```