# 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
```