1
0

Vim:重构完善

This commit is contained in:
周中平 2024-08-08 15:49:06 +08:00
parent 6995ccbc7c
commit ae896eb20f
Signed by: zhouzhongping
GPG Key ID: 6666822800008000
6 changed files with 1002 additions and 7 deletions

View File

@ -1,14 +1,18 @@
--- ---
title: Vim 快速入门 title: Vim 快速入门
description: Vim 快速入门 description: Vim 是一个功能强大的文本编辑器,此文档提供了快速入门指南,包括基础操作、模式切换、文本编辑技巧等。
keywords: keywords:
- Vim - Vim
- 入门 - 入门
- 编辑器
- 基础操作
- 模式
- 文本编辑
tags: tags:
- Vim - Vim
- 技术/入门 - 技术/入门
author: 7Wate author: 7Wate
date: 2022-11-16 date: 2024-08-08
--- ---
[Vim](http://www.vim.org/) 8.2 快速参考备忘单的有用集合,可帮助您更快地学习 vim 编辑器。 [Vim](http://www.vim.org/) 8.2 快速参考备忘单的有用集合,可帮助您更快地学习 vim 编辑器。

View File

@ -0,0 +1,326 @@
---
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
```

View File

@ -0,0 +1,554 @@
---
title: Vim 高级功能
description: 探索 Vim 的高级功能如正则表达式、多行编辑、宏录制、VimScript 脚本语言及自动化工作流。
keywords:
- Vim
- 高级功能
- 正则表达式
- 宏录制
- VimScript
- 自动化
tags:
- 技术/入门
- Vim
author: 仲平
date: 2024-08-08
---
## 高级技巧
### 高级文本操作
#### 正则表达式
| 功能 | 命令或表达式 | 说明 |
| ---------- | --------------------------- | ------------ |
| 向前搜索 | `/pattern` | 向前搜索匹配的模式 |
| 向后搜索 | `?pattern` | 向后搜索匹配的模式 |
| 全文替换 | `:%s/pattern/replacement/g` | 全文替换所有匹配的模式 |
| 当前行替换 | `:s/pattern/replacement/g` | 替换当前行所有匹配的模式 |
| 删除行首空白 | `:%s/^\s\+//g` | 删除每行开头的空白字符 |
| 删除行尾空白 | `:%s/\s\+$//g` | 删除每行结尾的空白字符 |
| 匹配任意字符 | `.` | 匹配任意字符 |
| 匹配数字字符 | `\d` | 匹配数字字符 |
| 匹配非数字字符 | `\D` | 匹配非数字字符 |
| 匹配字母或数字字符 | `\w` | 匹配字母或数字字符 |
| 匹配非字母或数字字符 | `\W` | 匹配非字母或数字字符 |
| 匹配行首 | `^` | 匹配行首 |
| 匹配行尾 | `$` | 匹配行尾 |
#### 多行编辑
| 功能 | 命令 | 说明 |
| -------------- | ---------- | -------------------------------- |
| 行可视模式 | `V` | 进入行可视模式 |
| 字符可视模式 | `v` | 进入字符可视模式 |
| 块可视模式 | `Ctrl+v` | 进入块可视模式 |
| 在每行开头添加 | `:%s/^/#/` | 使用正则表达式在每行开头添加 `#` |
| 在每行结尾添加 | `:%s/$/;/` | 使用正则表达式在每行结尾添加 `;` |
#### 宏录制与播放
| 功能 | 命令 | 说明 |
| ---------- | ---------- | ---------------------------------------------------- |
| 录制宏 | `qx ... q` | 开始录制宏,`x` 是寄存器名,执行一系列命令后停止录制 |
| 播放宏 | `@x` | 播放寄存器 `x` 中的宏 |
| 重复播放宏 | `@@` | 重复播放上一个宏 |
| 多次播放宏 | `10@x` | 播放寄存器 `x` 中的宏 10 次 |
### VimScript
#### 基本语法
VimScript 是 Vim 的脚本语言,用于扩展和定制 Vim 的功能。以下是一些基本语法:
```vim
" 这是一个注释
" 变量
let myvar = 42 " 整数变量
let mystr = "Hello" " 字符串变量
" 条件语句
if myvar > 0
echo "Positive"
elseif myvar == 0
echo "Zero"
else
echo "Negative"
endif
" 循环语句
let i = 0
while i < 5
echo i
let i += 1
endwhile
for item in [1, 2, 3, 4, 5]
echo item
endfor
```
#### 函数和变量
```vim
" 定义函数
function! MyFunction(arg)
echo a:arg
endfunction
" 调用函数
call MyFunction("Hello")
" 局部变量
function! MyFunction()
let l:localVar = "I am local"
echo l:localVar
endfunction
" 全局变量
let g:globalVar = "I am global"
echo g:globalVar
```
#### 编写和调试简单的 VimScript 脚本
**编写脚本**
将 VimScript 代码写入 `.vim` 文件,例如 `myplugin.vim`
```
" myplugin.vim
function! SayHello()
echo "Hello, Vim!"
endfunction
command! SayHello call SayHello()
```
**加载脚本**
将脚本放入 Vim 的 `plugin` 目录,启动 Vim 自动加载:
```
mkdir -p ~/.vim/plugin
cp myplugin.vim ~/.vim/plugin/
```
**调试脚本**
使用 `echo` 命令输出调试信息:
```
echo "Debug info: " . someVar
```
使用 `:messages` 查看所有输出信息。
### 自动化
#### 使用自动命令
自动命令autocommand允许在特定事件发生时自动执行命令例如文件保存、打开等。
```
augroup MyAutoCmd
autocmd!
autocmd BufWritePost *.txt :echo "Text file saved!"
augroup END
```
| 事件 | 说明 | 权重 |
| -------------- | ------------ | ---- |
| `BufReadPost` | 文件读取后 | 5 |
| `BufWritePost` | 文件写入后 | 5 |
| `BufNewFile` | 新建文件 | 4 |
| `FileType` | 文件类型检测 | 5 |
| `BufEnter` | 缓冲区进入 | 4 |
| `BufLeave` | 缓冲区离开 | 4 |
| `VimEnter` | Vim 启动后 | 5 |
| `VimLeave` | Vim 退出前 | 5 |
| `WinEnter` | 窗口进入 | 3 |
| `WinLeave` | 窗口离开 | 3 |
#### 配置文件模板
`~/.vim/templates/` 目录中创建模板文件,例如 `python_template.py`
```python
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Created on <++>
@author: <++>
"""
def main():
pass
if __name__ == "__main__":
main()
```
**使用自动命令应用模板:**
```
augroup MyTemplates
autocmd!
autocmd BufNewFile *.py 0r ~/.vim/templates/python_template.py
augroup END
```
## 高效工作流
### 版本控制集成
#### 使用 Vim-fugitive
**安装 vim-fugitive**
`vimrc` 文件中添加以下内容(以 vim-plug 为例):
```
call plug#begin('~/.vim/plugged')
Plug 'tpope/vim-fugitive'
call plug#end()
```
**基本用法**
| 功能 | 命令 | 说明 |
| ------------- | ---------- | ------------------------------------------------------------ |
| 查看 Git 状态 | `:Gstatus` | 打开一个新窗口显示当前 Git 仓库的状态。可以在该窗口中导航和操作。 |
| Git 添加 | `-` | 在 `:Gstatus` 窗口中,将光标移动到文件名上,按 `-` 号将文件添加到索引。 |
| Git 提交 | `:Gcommit` | 打开一个新的缓冲区输入提交信息,完成后保存并关闭缓冲区即可提交。 |
| Git 推送 | `:Gpush` | 将本地提交推送到远程仓库。 |
| Git 拉取 | `:Gpull` | 从远程仓库拉取最新的代码。 |
| Git 日志 | `:Glog` | 显示 Git 提交日志,可以在日志中导航和查看每个提交的详细信息。 |
| Git 分支 | `:Gbranch` | 显示和管理 Git 分支。 |
#### 常用 Git 命令
在 Vim 中,使用 vim-fugitive 可以执行常见的 Git 命令。同时你也可以在 Vim 外部使用 Git 命令行工具:
| 功能 | 命令 | 说明 |
| -------------- | -------------------------------- | -------------------------------- |
| 克隆仓库 | `git clone <repository_url>` | 克隆一个远程仓库到本地。 |
| 查看状态 | `git status` | 查看当前仓库的状态。 |
| 添加文件 | `git add <file>` | 添加文件到索引。 |
| 提交更改 | `git commit -m "Commit message"` | 提交已添加的更改。 |
| 推送到远程仓库 | `git push` | 将本地提交推送到远程仓库。 |
| 拉取最新代码 | `git pull` | 从远程仓库拉取最新的代码。 |
| 创建新分支 | `git checkout -b <new_branch>` | 创建一个新的分支并切换到该分支。 |
| 合并分支 | `git merge <branch>` | 将指定分支合并到当前分支。 |
### 项目管理
#### NERDTree
`vimrc` 文件中添加以下内容(以 vim-plug 为例):
```
call plug#begin('~/.vim/plugged')
Plug 'preservim/nerdtree'
call plug#end()
```
**打开/关闭 NERDTree**
```
:NERDTreeToggle
```
或者添加快捷键映射:
```
nnoremap <C-n> :NERDTreeToggle<CR>
```
**在 NERDTree 中导航**
- 使用 `j``k` 键上下移动
- 使用 `o` 键打开文件或目录
- 使用 `x` 键关闭目录
**显示隐藏文件**
```
:NERDTreeShowHidden
```
#### 配置项目相关设置
**项目特定的 vimrc**
在项目根目录下创建一个 `.vimrc` 文件,包含项目特定的 Vim 配置。然后在主 `vimrc` 中添加以下内容:
```
if filereadable("path/to/project/.vimrc")
source path/to/project/.vimrc
endif
```
**自动切换项目配置**
可以使用 `vim-rooter` 插件自动切换项目根目录并加载项目特定的配置。在 `vimrc` 中添加以下内容:
```
call plug#begin('~/.vim/plugged')
Plug 'airblade/vim-rooter'
call plug#end()
let g:rooter_patterns = ['.git', '.hg', '.svn', 'Makefile']
```
### 代码补全与调试
#### YouCompleteMe 代码补全
YouCompleteMe 是一个强大的代码补全插件,需要编译安装。具体步骤如下:
1. 安装依赖(以 Ubuntu 为例):
```
sudo apt install build-essential cmake python3-dev
```
2. 安装 YouCompleteMe
```
git clone https://github.com/ycm-core/YouCompleteMe.git ~/.vim/bundle/YouCompleteMe
cd ~/.vim/bundle/YouCompleteMe
git submodule update --init --recursive
python3 install.py --all
```
3. 在 `vimrc` 中添加以下内容:
```
call plug#begin('~/.vim/plugged')
Plug 'ycm-core/YouCompleteMe'
call plug#end()
```
#### Deoplete 代码补全
[Deoplete](https://github.com/Shougo/deoplete.nvim) 是另一种流行的代码补全插件,基于 Neovim。
1. 安装依赖(以 Neovim 为例):
```
pip install neovim
```
2. 在 `vimrc` 中添加以下内容:
```
call plug#begin('~/.vim/plugged')
Plug 'Shougo/deoplete.nvim', {'do': ':UpdateRemotePlugins'}
Plug 'Shougo/neosnippet.vim'
Plug 'Shougo/neosnippet-snippets'
call plug#end()
let g:deoplete#enable_at_startup = 1
```
#### Vimspector 代码调试
`vimrc` 文件中添加以下内容(以 vim-plug 为例):
```
call plug#begin('~/.vim/plugged')
Plug 'puremourning/vimspector'
call plug#end()
```
**基本配置**
`.vimspector.json` 文件,定义调试配置,例如:
```json
{
"configurations": {
"Launch": {
"adapter": "debugpy",
"configuration": {
"request": "launch",
"program": "${workspaceFolder}/your_script.py",
"console": "integratedTerminal"
}
}
}
}
```
**使用**
1. 启动调试会话:
```
:VimspectorLaunch
```
2. 设置断点: 将光标移动到需要设置断点的行,按 `F9` 键。
3. 继续执行、单步执行和停止调试: 使用 `F5`、`F10`、`F11` 和 `F12` 键进行调试控制。
## 性能优化
### 启动优化
#### 延迟加载插件
延迟加载插件可以显著提高 Vim 的启动速度,只在需要时加载插件。
**使用 vim-plug 进行延迟加载**
1. 在 `vimrc` 中配置延迟加载:
```
call plug#begin('~/.vim/plugged')
Plug 'tpope/vim-fugitive', { 'on': 'Gstatus' }
Plug 'scrooloose/nerdtree', { 'on': 'NERDTreeToggle' }
call plug#end()
```
以上配置将 vim-fugitive 插件仅在执行 `:Gstatus` 命令时加载NERDTree 插件仅在执行 `:NERDTreeToggle` 命令时加载。
**使用 lazy.nvim 插件管理器**
lazy.nvim 是一个专门用于延迟加载插件的插件管理器。
1. 安装 lazy.nvim
```
git clone https://github.com/folke/lazy.nvim.git ~/.vim/pack/lazy/start/lazy.nvim
```
2. 配置延迟加载:
```
call lazy#load_plugin('nerdtree', { 'on': 'NERDTreeToggle' })
```
#### 精简配置文件
**移除不必要的配置**
定期检查 `vimrc` 文件,移除不再使用的配置和插件,以减少 Vim 的启动时间和运行负担。
**分离插件配置**
将插件的配置分离到独立的文件中,以保持 `vimrc` 简洁。例如,将 NERDTree 的配置放在 `~/.vim/plugin/nerdtree.vim` 中:
```
" ~/.vim/plugin/nerdtree.vim
nnoremap <C-n> :NERDTreeToggle<CR>
```
**使用本地配置**
根据项目需求,在项目根目录下创建 `.vimrc``.vim/` 目录,存放项目特定的配置文件,以避免在全局配置中添加过多内容。
### 系统集成
#### 将 Vim 与 Tmux 结合使用
tmux 是一个终端复用器,允许你在一个终端窗口中运行多个会话,与 Vim 结合使用可以大大提高工作效率。
**安装 tmux**
在 Linux 或 MacOS 中,可以使用包管理器安装 tmux
```shell
sudo apt install tmux # Debian/Ubuntu
brew install tmux # macOS
```
| 功能 | 命令 | 说明 |
| -------------- | ----------------------------------- | ------------------------------------ |
| 启动 tmux 会话 | `tmux` | 启动一个新的 tmux 会话 |
| 新建会话 | `tmux new -s session_name` | 创建一个名为 `session_name` 的新会话 |
| 附加会话 | `tmux attach -t session_name` | 附加到一个名为 `session_name` 的会话 |
| 列出会话 | `tmux ls` | 列出所有 tmux 会话 |
| 杀死会话 | `tmux kill-session -t session_name` | 杀死一个名为 `session_name` 的会话 |
| 分离会话 | `Ctrl-b d` | 分离当前会话 |
| 新建窗口 | `Ctrl-b c` | 创建一个新窗口 |
| 切换窗口 | `Ctrl-b n` | 切换到下一个窗口 |
| 切换窗口 | `Ctrl-b p` | 切换到上一个窗口 |
| 重命名窗口 | `Ctrl-b ,` | 重命名当前窗口 |
| 分割窗格 | `Ctrl-b %` | 垂直分割当前窗格 |
| 分割窗格 | `Ctrl-b "` | 水平分割当前窗格 |
| 切换窗格 | `Ctrl-b o` | 切换到下一个窗格 |
| 关闭窗格 | `Ctrl-b x` | 关闭当前窗格 |
| 同步窗格 | `Ctrl-b :setw synchronize-panes on` | 在所有窗格中同步输入 |
| 切换会话 | `Ctrl-b s` | 列出所有会话并切换 |
**与 Vim 集成**
`vimrc` 中添加快捷键映射,方便与 tmux 交互:
```
nnoremap <silent> <Leader>h :TmuxNavigateLeft<CR>
nnoremap <silent> <Leader>j :TmuxNavigateDown<CR>
nnoremap <silent> <Leader>k :TmuxNavigateUp<CR>
nnoremap <silent> <Leader>l :TmuxNavigateRight<CR>
```
需要安装 `christoomey/vim-tmux-navigator` 插件:
```
call plug#begin('~/.vim/plugged')
Plug 'christoomey/vim-tmux-navigator'
call plug#end()
```
#### 在终端中使用 Vim
在终端中使用 Vim 可以提高工作效率,特别是当你需要频繁切换编辑器和命令行时。
**配置终端**
选择一个支持丰富功能的终端,例如 `iTerm2`macOS、`Alacritty`(跨平台)、`GNOME Terminal`Linux
**终端快捷键配置**
根据需要配置终端快捷键,方便打开 Vim。例如`iTerm2` 中,可以设置快捷键快速打开新的终端窗口或标签,并启动 Vim。
**Shell 集成**
`~/.bashrc``~/.zshrc` 中添加别名和函数,提高使用 Vim 的效率:
```shell
alias vi="vim"
alias svi="sudo vim"
alias vrc="vim ~/.vimrc"
# 快速打开项目目录中的 Vim
function vproj() {
cd ~/projects/$1 && vim
}
```
**使用 FZF 进行文件搜索**
FZF 是一个命令行模糊查找工具,可以与 Vim 集成,快速搜索和打开文件。
1. 安装 FZF
```shell
git clone --depth 1 https://github.com/junegunn/fzf.git ~/.fzf
~/.fzf/install
```
2. 在 `vimrc` 中配置 FZF
```shell
call plug#begin('~/.vim/plugged')
Plug 'junegunn/fzf'
Plug 'junegunn/fzf.vim'
call plug#end()
" 使用 FZF 查找文件
nnoremap <Leader>f :Files<CR>
```

View File

@ -0,0 +1,110 @@
---
title: Vim 实用技巧
description: 汇总 Vim 的实用技巧,包括文件备份、快速查找替换、批量处理文件、自动补全和窗口管理等。
keywords:
- Vim
- 实用技巧
tags:
- 技术/入门
- Vim
author: 仲平
date: 2024-08-08
---
## 文件备份和编辑
备份当前文件并打开进行编辑,避免无法还原旧配置文件。
```
:w hosts.back.240808 | e!
```
## 快速查找并替换
在所有文本文件中查找并替换某个模式。
```
:args **/*.txt | argdo %s/pattern/replacement/g | update
```
这个命令会在所有文本文件中查找并替换 `pattern``replacement`,并保存所有修改。
## 批量处理文件
批量删除所有文件的行尾空白字符。
```
:args **/* | argdo %s/\s\+$//e | update
```
这个命令会在所有文件中删除行尾的空白字符,并保存所有修改。
## 快速拼接文件内容
将多个文件的内容拼接到当前文件。
```
:r !cat file1.txt file2.txt file3.txt
```
这个命令将 `file1.txt`、`file2.txt` 和 `file3.txt` 的内容插入到当前文件光标所在位置。
## 自动补全并打开文件
自动补全路径并打开文件。
```
:e <C-R>=expand("%:p:h") . "/" <C-R>=input("File: ")<CR>
```
这个命令会打开一个提示,输入文件名后会自动补全路径并打开文件。
## 快速窗口管理
垂直分割窗口,打开文件,关闭其他窗口
```
:vsplit file.txt | only
```
这个命令会垂直分割窗口并打开 `file.txt`,然后关闭其他所有窗口。
## 自动格式化代码
格式化当前文件并保存
```
gg=G`` | w
```
这个命令会格式化整个文件并保持光标位置不变,然后保存文件。
## 批量执行宏
在所有文本文件中执行宏。
```
:args **/*.txt | argdo normal @q | update
```
这个命令会在所有文本文件中执行寄存器 `q` 中的宏,并保存所有修改。
## 快速编译并打开错误列表
编译当前项目并打开 QuickFix 列表。
```
:make | copen
```
这个命令会编译当前项目并打开 QuickFix 窗口显示错误列表。
## 运行代码并显示输出
运行当前 Python 文件并显示输出
```
:w | !python3 %
```
这个命令会先保存当前文件,然后运行它并显示输出。

View File

@ -1,14 +1,15 @@
--- ---
title: Vim 参考手册 title: Vim 参考手册
description: Vim 参考手册 description: 提供 Vim 的详尽参考手册,涵盖光标移动、插入模式、编辑文本、选择文本、寄存器、标记、宏等高级命令。
keywords: keywords:
- Vim - Vim
- 参考手册 - 参考手册
- 命令
tags: tags:
- Vim - Vim
- 技术/入门 - 技术/入门
author: 7Wate author: 7Wate
date: 2022-11-16 date: 2024-08-08
--- ---
## [Vim Cheat Sheet](https://vim.rtorr.com/) ## [Vim Cheat Sheet](https://vim.rtorr.com/)

View File

@ -1,14 +1,14 @@
--- ---
title: Vim 帮助文档 title: Vim 帮助文档
description: Vim 帮助文档 description: Vim 的中文帮助文档计划,提供用户手册和参考手册的在线阅读和下载链接,以及字体和安装程序信息。
keywords: keywords:
- Vim - Vim
- 文档 - 帮助文档
tags: tags:
- Vim - Vim
- 技术/入门 - 技术/入门
author: 7Wate author: 7Wate
date: 2022-11-16 date: 2024-08-08
--- ---
[Vim 中文文档计划](https://github.com/yianwillis/vimcdoc) [Vim 中文文档计划](https://github.com/yianwillis/vimcdoc)