diff --git a/Tech/getting-started/命令行工具/Vim/Vim 入门.md b/Tech/getting-started/命令行工具/Vim/1.Vim 入门.md similarity index 99% rename from Tech/getting-started/命令行工具/Vim/Vim 入门.md rename to Tech/getting-started/命令行工具/Vim/1.Vim 入门.md index ead49ad3..fcab0243 100644 --- a/Tech/getting-started/命令行工具/Vim/Vim 入门.md +++ b/Tech/getting-started/命令行工具/Vim/1.Vim 入门.md @@ -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 编辑器。 diff --git a/Tech/getting-started/命令行工具/Vim/2.VIM 配置管理.md b/Tech/getting-started/命令行工具/Vim/2.VIM 配置管理.md new file mode 100644 index 00000000..cad4e770 --- /dev/null +++ b/Tech/getting-started/命令行工具/Vim/2.VIM 配置管理.md @@ -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 :NERDTreeToggle " 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 :w " 在普通模式下,Ctrl+s 保存文件 +inoremap " 在插入模式下,Ctrl+c 切换到普通模式 +vnoremap "+y " 在可视模式下,Ctrl+c 复制到系统剪贴板 +``` + +### 常用快捷键示例 + +以下是一些常用的快捷键示例,这些快捷键可以提高日常编辑的效率: + +| 快捷键配置 | 模式 | 说明 | 示例 | +| ----------------------------------------- | -------- | ----------------------------------- | ----------------------------------------- | +| `nnoremap :w` | 普通模式 | `Ctrl+s` 保存文件 | `nnoremap :w` | +| `inoremap ` | 插入模式 | `Ctrl+c` 退出插入模式 | `inoremap ` | +| `vnoremap "+y` | 可视模式 | `Ctrl+c` 复制到系统剪贴板 | `vnoremap "+y` | +| `nnoremap :q` | 普通模式 | `Ctrl+x` 退出 Vim | `nnoremap :q` | +| `nnoremap :tabnew` | 普通模式 | `Ctrl+t` 打开新标签 | `nnoremap :tabnew` | +| `nnoremap :NERDTreeToggle` | 普通模式 | `Ctrl+n` 切换 NERDTree 文件树 | `nnoremap :NERDTreeToggle` | +| `nnoremap f :Files` | 普通模式 | `Leader+f` 调用 FZF 查找文件 | `nnoremap f :Files` | +| `nnoremap g :Gstatus` | 普通模式 | `Leader+g` 调用 Git 状态 | `nnoremap g :Gstatus` | +| `nnoremap w :w!` | 普通模式 | `Leader+w` 强制保存文件 | `nnoremap w :w!` | +| `nnoremap q :q!` | 普通模式 | `Leader+q` 强制退出 Vim | `nnoremap q :q!` | +| `nnoremap r :source $MYVIMRC` | 普通模式 | `Leader+r` 重新加载 `vimrc` 文件 | `nnoremap r :source $MYVIMRC` | +| `vnoremap y "+y` | 可视模式 | `Leader+y` 复制选中文本到系统剪贴板 | `vnoremap y "+y` | +| `nnoremap p "+p` | 普通模式 | `Leader+p` 从系统剪贴板粘贴 | `nnoremap p "+p` | +| `nnoremap t :terminal` | 普通模式 | `Leader+t` 打开终端 | `nnoremap t :terminal` | +| `nnoremap :cnext` | 普通模式 | `Ctrl+j` 跳到下一个 QuickFix 项 | `nnoremap :cnext` | +| `nnoremap :cprev` | 普通模式 | `Ctrl+k` 跳到上一个 QuickFix 项 | `nnoremap :cprev` | +| `nnoremap n :nohlsearch` | 普通模式 | `Leader+n` 取消搜索高亮 | `nnoremap n :nohlsearch` | +| `nnoremap e :e ~/.vimrc` | 普通模式 | `Leader+e` 打开 `vimrc` 文件 | `nnoremap e :e ~/.vimrc` | +| `nnoremap d "_d` | 普通模式 | `Leader+d` 删除但不复制到寄存器 | `nnoremap 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 :NERDTreeToggle +nnoremap :CtrlP +nnoremap f :Files +nnoremap g :Gstatus +nnoremap w :w! +nnoremap q :q! +nnoremap r :source $MYVIMRC +vnoremap y "+y +nnoremap p "+p +nnoremap t :terminal +nnoremap :cnext +nnoremap :cprev +nnoremap n :nohlsearch +nnoremap e :e ~/.vimrc +nnoremap d "_d + +" Airline 主题 +let g:airline_theme='luna' + +" GitGutter 配置 +let g:gitgutter_enabled = 1 + +``` diff --git a/Tech/getting-started/命令行工具/Vim/3.Vim 高级功能.md b/Tech/getting-started/命令行工具/Vim/3.Vim 高级功能.md new file mode 100644 index 00000000..725bedc2 --- /dev/null +++ b/Tech/getting-started/命令行工具/Vim/3.Vim 高级功能.md @@ -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 ` | 克隆一个远程仓库到本地。 | +| 查看状态 | `git status` | 查看当前仓库的状态。 | +| 添加文件 | `git add ` | 添加文件到索引。 | +| 提交更改 | `git commit -m "Commit message"` | 提交已添加的更改。 | +| 推送到远程仓库 | `git push` | 将本地提交推送到远程仓库。 | +| 拉取最新代码 | `git pull` | 从远程仓库拉取最新的代码。 | +| 创建新分支 | `git checkout -b ` | 创建一个新的分支并切换到该分支。 | +| 合并分支 | `git merge ` | 将指定分支合并到当前分支。 | + +### 项目管理 + +#### NERDTree + +在 `vimrc` 文件中添加以下内容(以 vim-plug 为例): + +``` +call plug#begin('~/.vim/plugged') +Plug 'preservim/nerdtree' +call plug#end() +``` + +**打开/关闭 NERDTree** + +``` +:NERDTreeToggle +``` + +或者添加快捷键映射: + +``` +nnoremap :NERDTreeToggle +``` + +**在 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 :NERDTreeToggle +``` + +**使用本地配置**: + +根据项目需求,在项目根目录下创建 `.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 h :TmuxNavigateLeft +nnoremap j :TmuxNavigateDown +nnoremap k :TmuxNavigateUp +nnoremap l :TmuxNavigateRight +``` + +需要安装 `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 f :Files + ``` diff --git a/Tech/getting-started/命令行工具/Vim/4.Vim 实用技巧.md b/Tech/getting-started/命令行工具/Vim/4.Vim 实用技巧.md new file mode 100644 index 00000000..13435a8c --- /dev/null +++ b/Tech/getting-started/命令行工具/Vim/4.Vim 实用技巧.md @@ -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 =expand("%:p:h") . "/" =input("File: ") +``` + +这个命令会打开一个提示,输入文件名后会自动补全路径并打开文件。 + +## 快速窗口管理 + +垂直分割窗口,打开文件,关闭其他窗口 + +``` +:vsplit file.txt | only +``` + +这个命令会垂直分割窗口并打开 `file.txt`,然后关闭其他所有窗口。 + +## 自动格式化代码 + +格式化当前文件并保存 + +``` +gg=G`` | w +``` + +这个命令会格式化整个文件并保持光标位置不变,然后保存文件。 + +## 批量执行宏 + +在所有文本文件中执行宏。 + +``` +:args **/*.txt | argdo normal @q | update +``` + +这个命令会在所有文本文件中执行寄存器 `q` 中的宏,并保存所有修改。 + +## 快速编译并打开错误列表 + +编译当前项目并打开 QuickFix 列表。 + +``` +:make | copen +``` + +这个命令会编译当前项目并打开 QuickFix 窗口显示错误列表。 + +## 运行代码并显示输出 + +运行当前 Python 文件并显示输出 + +``` +:w | !python3 % +``` + +这个命令会先保存当前文件,然后运行它并显示输出。 diff --git a/Tech/getting-started/命令行工具/Vim/Vim 参考手册.md b/Tech/getting-started/命令行工具/Vim/5.Vim 参考手册.md similarity index 98% rename from Tech/getting-started/命令行工具/Vim/Vim 参考手册.md rename to Tech/getting-started/命令行工具/Vim/5.Vim 参考手册.md index 7f315fe4..294f2383 100644 --- a/Tech/getting-started/命令行工具/Vim/Vim 参考手册.md +++ b/Tech/getting-started/命令行工具/Vim/5.Vim 参考手册.md @@ -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/) diff --git a/Tech/getting-started/命令行工具/Vim/Vim 帮助文档.md b/Tech/getting-started/命令行工具/Vim/6.Vim 帮助文档.md similarity index 85% rename from Tech/getting-started/命令行工具/Vim/Vim 帮助文档.md rename to Tech/getting-started/命令行工具/Vim/6.Vim 帮助文档.md index d5f38039..772a2e93 100644 --- a/Tech/getting-started/命令行工具/Vim/Vim 帮助文档.md +++ b/Tech/getting-started/命令行工具/Vim/6.Vim 帮助文档.md @@ -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)