Vim:重构完善
This commit is contained in:
parent
6995ccbc7c
commit
ae896eb20f
@ -1,14 +1,18 @@
|
||||
---
|
||||
title: Vim 快速入门
|
||||
description: Vim 快速入门
|
||||
description: Vim 是一个功能强大的文本编辑器,此文档提供了快速入门指南,包括基础操作、模式切换、文本编辑技巧等。
|
||||
keywords:
|
||||
- Vim
|
||||
- 入门
|
||||
- 编辑器
|
||||
- 基础操作
|
||||
- 模式
|
||||
- 文本编辑
|
||||
tags:
|
||||
- Vim
|
||||
- 技术/入门
|
||||
author: 7Wate
|
||||
date: 2022-11-16
|
||||
date: 2024-08-08
|
||||
---
|
||||
|
||||
[Vim](http://www.vim.org/) 8.2 快速参考备忘单的有用集合,可帮助您更快地学习 vim 编辑器。
|
326
Tech/getting-started/命令行工具/Vim/2.VIM 配置管理.md
Normal file
326
Tech/getting-started/命令行工具/Vim/2.VIM 配置管理.md
Normal 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
|
||||
|
||||
```
|
554
Tech/getting-started/命令行工具/Vim/3.Vim 高级功能.md
Normal file
554
Tech/getting-started/命令行工具/Vim/3.Vim 高级功能.md
Normal 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>
|
||||
```
|
110
Tech/getting-started/命令行工具/Vim/4.Vim 实用技巧.md
Normal file
110
Tech/getting-started/命令行工具/Vim/4.Vim 实用技巧.md
Normal 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 %
|
||||
```
|
||||
|
||||
这个命令会先保存当前文件,然后运行它并显示输出。
|
@ -1,14 +1,15 @@
|
||||
---
|
||||
title: Vim 参考手册
|
||||
description: Vim 参考手册
|
||||
description: 提供 Vim 的详尽参考手册,涵盖光标移动、插入模式、编辑文本、选择文本、寄存器、标记、宏等高级命令。
|
||||
keywords:
|
||||
- Vim
|
||||
- 参考手册
|
||||
- 命令
|
||||
tags:
|
||||
- Vim
|
||||
- 技术/入门
|
||||
author: 7Wate
|
||||
date: 2022-11-16
|
||||
date: 2024-08-08
|
||||
---
|
||||
|
||||
## [Vim Cheat Sheet](https://vim.rtorr.com/)
|
@ -1,14 +1,14 @@
|
||||
---
|
||||
title: Vim 帮助文档
|
||||
description: Vim 帮助文档
|
||||
description: Vim 的中文帮助文档计划,提供用户手册和参考手册的在线阅读和下载链接,以及字体和安装程序信息。
|
||||
keywords:
|
||||
- Vim
|
||||
- 文档
|
||||
- 帮助文档
|
||||
tags:
|
||||
- Vim
|
||||
- 技术/入门
|
||||
author: 7Wate
|
||||
date: 2022-11-16
|
||||
date: 2024-08-08
|
||||
---
|
||||
|
||||
[Vim 中文文档计划](https://github.com/yianwillis/vimcdoc)
|
Loading…
Reference in New Issue
Block a user