本文收集 vim 高效方便的插件及使用方法
插件集锦
序号 | 名称 | 插件名 | 功能 | 主页 |
---|---|---|---|---|
1 | startify | mhinz/vim-startify | 为 Vim 和 Neovim 提供开始屏幕 | 网址 |
2 | fcitx | vim-scripts/fcitx.vim | 解决中文下 <Esc> 的问题 |
网址 |
3 | airline | vim-airline/vim-airline | vim 的状态栏 | 网址 |
4 | markdown-toc | mzlogin/vim-markdown-toc | 生成文章目录 | 网址 |
5 | nerdTree | scrooloose/nerdtree | 文件管理器 | 网址 |
6 | indentLine | yggdroot/indentline | 显示缩进线 | 网址 |
7 | easymotion | symotion/vim-easymotion | 文本跳转插件 | 网址 |
8 | surround | tpope/vim-surround | 成对编辑 | 网址 |
9 | vim-markdown | plasticboy/vim-markdown | markdown 语法高亮显示 | 网址 |
10 | vim-table | dhruvasagar/vim-table-mode | vim 表格 | 网址 |
11 | coc.vim | neoclide/coc.nvim | 通用的代码补全工具 | 网址 |
12 | pangu.vim | hotoo/pangu.vim | 自动格式化、标准化中文排版 | 网址 |
网址 | ||||
网址 |
为 Markdown 生成目录
功能
-
为 Markdown 文件生成 Table of Contents,目前支持 GFM 和 Redcarpet 两种链接风格。
-
更新已经存在的 Table of Contents。
-
保存文件时自动更新 Table of Contents。
使用方法
生成目录
将光标移动到想在后面插入目录 (Table of Contents) 的那一行,然后运行:
命令 | 功能 |
---|---|
:GenTocGFM |
生成 GFM 链接风格的目录,适用 Github |
:GenTocRedcarpet |
生成 Redcarpet 链接风格的目录,适用 Jekyll 项目 |
更新已存在的目录
不需要手动做这件事,保存文件时会自动更新。命令为::UpdateToc
删除目录
:RemoveToc
命令可以帮你删除本插件生成的目录
Markdown 语法高亮 vim-markdown
为原生 markdown 进行语法高亮显示、匹配规则和标记映射
基本用法
折叠
默认情况下,页眉已启用折叠。下面的命令对于打开和关闭折叠非常有用:
命令 | 说明 |
---|---|
zr | 降低整个缓冲区的折叠水平 |
zR | 打开所有折叠 |
zm | 增加整个缓冲区的折叠水平 |
zM | 将所有内容折叠起来 |
za | 打开光标所在的折叠 |
zA | 递归打开光标所在的折叠 |
zc | 关闭光标所在的折叠 |
zC | 递归地关闭光标所在的折叠 |
选项
选项可用来禁用折叠或更改折叠样式。
禁用折叠
let g:vim_markdown_folding_disabled = 1
该选项仅控制 Vim Markdown 特定折叠配置。
要启用 / 禁用折叠,请使用 Vim 的标准折叠配置。
set [no]foldenable
改变折叠风格
- 要以 python 模式的样式折叠,请将以下内容添加到.vimrc 中
let g:vim_markdown_folding_style_pythonic = 1
g:vim_markdown_folding_level
设置折叠级别,默认为 1,因此,作为文档标题的第 1 级标题将展开。 - 要防止设置
foldtext
,请将以下内容添加到.vimrc
:let g:vim_markdown_override_foldtext = 0
语法隐藏
隐藏是为某些语法设置的,比如:将 [链接文本](链接 url)
隐藏为链接文本。另外,_斜体_
和 *斜体*
将隐藏为 斜体。类似地,**粗体**
、__粗体__**
将分别隐藏为 粗体
- 要启用隐藏,请使用 Vim 的标准隐藏配置:
set conceallevel=2
- 要禁用隐藏,无论隐藏级别设置如何,请将以下内容添加到
.vimrc
:let g:vim_markdown_conceal = 0
- 禁用代码栏的隐藏需要另外设置:
let g:vim_markdown_conceal_code_blocks = 0
- 若要禁用启用 LaTeX 数学语法的 math hide,请将以下内容添加到.vimrc 中
let g:tex_conceal = "" let g:vim_markdown_math = 1
语法的扩展
以下选项控制将打开哪些语法扩展。默认情况下它们是关闭的。
LaTex 数学语法
使用 $x^2$
、$$x^2$$
而不是 \$x\$
和 \$\$x\$\$
let g:vim_markdown_math = 1
删除线
删除线使用两个波浪。 抓住这个。
let g:vim_markdown_strikethrough = 1
不需要 .md 扩展的标记链接
如果你想要一个像这样的 [链接](链接文本)
,然后使用 ge
命令在 vim 中编辑它,但是要让它打开文件 链接 url.md
而不是文件 链接 url
,然后使用这个选项
let g:vim_markdown_no_extensions_in_markdown = 1
这对于 GitLab 和 GitHub wiki 知识库非常有用。
进入链接时自动写入
如果您使用 ge
快捷方式进入这样的链接 [链接文本](链接 url)
,此选项将自动保存您在移动之前进行的任何编辑
更改如何打开新文件
默认情况下,当进入一个链接时,目标文件将在当前缓冲区中打开。可以使用 g:vim_markdown_edit_url_in
来设置在分屏还是新标签中打开,可选值是:tab
, vsplit
, hsplit
, current
,默认值是 tab
映射
在正常模式和视觉模式下可行的操作:
指令键 | 功能 | 映射方法 |
---|---|---|
gx | 在浏览器中打开光标下的链接 | <Plug>Markdown_OpenUrlUnderCursor |
ge | 打开光标下的链接进行编辑, 适用于 markdown 链接 |
<Plug>Markdown_EditUrlUnderCursor |
]] |
转到下一级标题 | <Plug>Markdown_MoveToNextHeader |
[[ |
转到前一级标题 | <Plug>Markdown_MoveToPreviousHeader |
][ |
转到下一个同级标题 | <Plug>Markdown_MoveToNextSiblingHeader |
[] |
转到前一个同级标题 | <Plug>Markdown_MoveToPreviousSiblingHeader |
]c |
转到当前标题 | <Plug>Markdown_MoveToCurHeader |
]u |
转到上级标题 | <Plug>Markdown_MoveToParentHeader |
也可以自己设置映射:
map asdf <Plug>Markdown_MoveToParentHeader
禁用映射的使用:
map <Plug> <Plug>Markdown_MoveToParentHeader
创建 markdown 表格 VIM Table Mode
VIM Table Mode 是一个了不起的自动表创建器和格式化器,可以一个创建整齐的表格。
要在动态模式下开始使用这个插件,可以使用 :TableModeToggle
,默认情况下映射到 <Leader>tm
。
在
vimrc
中加入一段指令后,可以使用||
或__
在插入模式下快速启用 / 禁用表模式
使用方法
输入第一行,用 |
符号分隔列。插件会自动在文本和分隔符之间插入空格:
| name | address | phone |
当输入后面的行时,插件会自动调整格式以匹配您每次输入的 |
:
| name | address | phone |
|------------+---------+-------|
| John Adams |
然后您可以返回到第一行,并在它上面输入 ||
,这样整个表格将完成格式化。
移动
现在您可以使用 [|
,]|
,{|
和 }|
在单元格之间移动,分别移动 左 / 右 / 上 / 下 的单元格。如果存在当前行中最后一个单元格,则在当前行中最后一个单元格之后,左 / 右 移动环绕该表并移动到前一行的下一个。
操纵表格
指令 | 功能 | 备注 |
---|---|---|
i| |
选择单元格内部 | |
a| |
选择单元格及周围 | 包括 immidiate 右表分隔符 |
<Leader>tdd |
删除当前的表行 | g:table_mode_delete_row_map |
<Leader>tdc |
删除整个当前列 | g:table_mode_delete_column_map |
选择单元格
通过 i|
和 a|
选择表单元格的内部和周围(包括 immidiate 右表分隔符)。
删除行
可以使用选项 g:table_mode_delete_row_map
定义的 <Leader>tdd
映射来删除当前的表行(如果您在表行中),可以先执行一个 [count] 来删除多行,就像删除指令键 dd
一样。
删除列
可以使用选项 g:table_mode_delete_column_map
定义的 <Leader>tdc
映射来删除整个当前列(如果您在一个表行中),也可以在前面加上 [count] 来删除多个列
vim 的状态栏 ari-line
Airline 是 vim 的状态栏插件,它由几个部分组成,每个部分显示一些信息。默认情况下(无配置),如下所示:
+-----------------------------------------------------------------------------+
|~ |
|~ |
|~ VIM - Vi IMproved |
|~ |
|~ version 8.0 |
|~ by Bram Moolenaar et al. |
|~ Vim is open source and freely distributable |
|~ |
|~ type :h :q<Enter> to exit |
|~ type :help<Enter> or <F1> for on-line help |
|~ type :help version8<Enter> for version info |
|~ |
|~ |
+-----------------------------------------------------------------------------+
| A | B | C X | Y | Z | [...] |
+-----------------------------------------------------------------------------+
其中含义如下:
序号 | 部分 | 说明 |
---|---|---|
1 | A | 显示模式 + 附加标志,如加密 / 拼写 / 粘贴(插入) |
2 | B | VCS 信息(分支,大块摘要) |
3 | C | 文件名 + 只读标志 (~/.vim/vimrc RO) |
4 | X | 文件类型 |
5 | Y | 文件编码『文件格式』 (utf-8[unix) |
6 | Z | 文件中的当前位置 |
7 | […] | 自外部插件的附加部分(警告 / 错误 / 统计)(例如 YCM,syntastic,…) |
Z 段的信息 10% ☰ 10/100 ln : 20
含义如下:
10% # 文件顶部向下 10%
☰ 10 # 当前行:10
/100 LN # 总共 100 行
:20 # 当前列:20
NerdTree 使用
NerdTree 是一个树形的文件管理器,它可以让你用键盘或鼠标操作文件系统,它也可以执行文件系统的指令。
NerdTree 的设置
" 打开 NerdTree
noremap tt :NERDTreeToggle<CR>
" 在 NerdTree 中定位文件
noremap <leader>v :NERDTreeFind<cr>
常用指令键
序号 | 快捷键 | 说明 |
---|---|---|
1 | o/go | 在已有窗口中打开文件、目录或书签,并跳到该窗口 |
2 | s/gs | vsplit 一个新窗口打开选中文件,并跳到该窗口 |
3 | O | 递归打开选中 结点下的所有目录 |
4 | x | 合拢选中结点的父目录 |
5 | I | 切换是否显示隐藏文件 |
完整指令键
序号 | 快捷键 | 说明 |
---|---|---|
1 | o | 在已有窗口中打开文件、目录或书签,并跳到该窗口 |
2 | go | 在已有窗口 中打开文件、目录或书签,但不跳到该窗口 |
3 | t | 在新 Tab 中打开选中文件 / 书签,并跳到新 Tab |
4 | T | 在新 Tab 中打开选中文件 / 书签,但不跳到新 Tab |
5 | i | split 一个新窗口打开选中文件,并跳到该窗口 |
6 | gi | split 一个新窗口打开选中文件,但不跳到该窗口 |
7 | s | vsplit 一个新窗口打开选中文件,并跳到该窗口 |
8 | gs | vsplit 一个新 窗口打开选中文件,但不跳到该窗口 |
9 | ! | 执行当前文件 |
10 | O | 递归打开选中 结点下的所有目录 |
11 | x | 合拢选中结点的父目录 |
12 | X | 递归 合拢选中结点下的所有目录 |
13 | e | Edit the current dif |
14 | 双击 | 相当于 NERDTree-o |
15 | 中键 | 对文件相当于 NERDTree-i,对目录相当于 NERDTree-e |
16 | D | 删除当前书签 |
17 | P | 跳到根结点 |
18 | p | 跳到父结点 |
19 | K | 跳到当前目录下同级的第一个结点 |
20 | J | 跳到当前目录下同级的最后一个结点 |
21 | k | 跳到当前目录下同级的前一个结点 |
22 | j | 跳到当前目录下同级的后一个结点 |
23 | C | 将选中目录或选中文件的父目录设为根结点 |
24 | u | 将当前根结点的父目录设为根目录,并变成合拢原根结点 |
25 | U | 将当前根结点的父目录设为根目录,但保持展开原根结点 |
26 | r | 递归刷新选中目录 |
27 | R | 递归刷新根结点 |
28 | m | 显示文件系统菜单 |
29 | cd | 将 CWD 设为选中目录 |
30 | I | 切换是否显示隐藏文件 |
31 | f | 切换是否使用文件过滤器 |
32 | F | 切换是否显示文件 |
33 | B | 切换是否显示书签 |
34 | q | 关闭 NerdTree 窗口 |
35 | ? | 切换是否显示 Quick Help |
缩进线显示插件 indentLine
此插件用于在每个缩进级别显示带有空格缩进的代码的细竖线。
命令 | 说明 |
---|---|
:IndentLinesToggle |
打开或关闭缩进线 |
let g:indentLine_enabled = 0 |
默认关闭缩进显示 |
文本跳转插件 easymotion
easyMotion 提供了一种更简单的方法来在 vim 中完成一些动作。 它通过突出显示所有可能的选项并允许您按一个键直接跳转到目标,它会从 <number> w
或 <number> f {char}
中取出 <number>
。
当触发其中一个可用指令时,光标之前或之后的所有可见文本都会变淡,并且跳转目标会突出显示。 有点类似于 chrome 的 vim 插件,它可以在要搜索的文本上方显示跳转指令符,这里我们使用的是 ss
搜索 2 个字符的跳转,在 normal 模式中输入 ss
再输入要搜索的两个字母后,就可以出现搜索跳转指令符,非常好用。
nmap ss <Plug>(easymotion-s2)
成对编辑 vim-surround
成对更换一对单引号和双引号,tpope/vim-surround
可以满足要求
指令 | 说明 |
---|---|
ds | delete a surrounding,删除 |
cs | change a surrounding, 修改 |
ys | you add a surrounding,增加 |
应用:
指令 | 修改前 | -> | 改后 |
---|---|---|---|
cs"' |
"Hello world!" |
-> | 'Hello world!' |
cs'<q> |
"Hello world!" |
-> | <q>Hello world!</q> |
cst" |
"Hello world!" |
-> | Hello world! |
ds" |
"Hello world!" |
-> | Hello world! |
ysiw] |
"Hello world!" |
-> | [Hello] world! 光标在 Hello 处 |
cs]{ |
[Hello] world! |
-> | { Hello } world! 注:} 不带空格 |
yssb |
{ Hello } world! |
-> | ({ Hello } world!) 注:b:braces,) 也可 |
ds{ds) |
({ Hello } world!) |
-> | Hello world! |
ysiw<em> |
Hello world! |
-> | <em>Hello</em> world! |
- 给
name
增加"
的方式是:ysiw"
- 把
"name"
的 “ 改成 ‘: cs”’ - 把
print("you name is")
的(
改成[
:cs([
带空格的[]
,cs(]
不带空格的[]
- 删除
print("you name is")
中的"
和()
:ds(
,ds"
通过的代码补全插件 coc.vim
它是一个智能感知引擎,适用于 vim 和 neovim。它的设计是快速,可靠,功能和灵活,同时易于使用的新 vim 用户。
安装
- 安装 nodejs
curl -sL install-node.now.sh/lts | bash
- 安装 coc.vim
" Use release branch
Plug 'neoclide/coc.nvim', {'branch': 'release'}
代码补全
触发模式
- 部分匹配触发
默认模式,当输入字母与
triggerCharacters
有重叠时触发补全 - 完全匹配触发
只有输入与
triggerCharacters
完全匹配时触发 - 手动触发 手动设置触发方式
触发方式的设置,是在配置文件中 coc-settings.json
进行
- 在输入时支持补全触发器触发器
"suggest.triggerAfterInsertEnter": true
- 更改补全超时时间
"suggest.timeout": 500,
- 自动选择第一个补全的项:
"suggest.noselect": false,
- 两个输入字符触发补全
"suggest.minTriggerInputLength": 2
- 更改代码片段项的指示符
"suggest.snippetIndicator": "►"
使用 <Tab>
或自定义键完成触发器
可以使用 coc#refresh()
来完成触发器,如下所示
" use <tab> for trigger completion and navigate to the next complete item
" 使用 <tab> 触发补全并导航到下一个补全项
function! s:check_back_space() abort
let col = col('.') - 1
return !col || getline('.')[col - 1] =~ '\s'
endfunction
inoremap <silent><expr> <Tab>
\ pumvisible() ? "\<C-n>" :
\ <SID>check_back_space() ? "\<Tab>" :
\ coc#refresh()
注意:<tab>
可以被另一个插件重新映射,使用 :verbose imap <tab>
检查它是否按预期映射。
" use <c-space>for trigger completion
" 使用 <c-space> 触发补全
inoremap <silent><expr> <c-space> coc#refresh()
完善补全体验
- 使用
<Tab>
和<S-Tab>
在补全列表中移动inoremap <expr> <Tab> pumvisible() ? "\<C-n>" : "\<Tab>" inoremap <expr> <S-Tab> pumvisible() ? "\<C-p>" : "\<S-Tab>"
- 使用
<cr>
确认补全inoremap <expr> <cr> pumvisible() ? "\<C-y>" : "\<C-g>u\<CR>"
- 补全后关闭预览窗口
autocmd! CompleteDone * if pumvisible() == 0 | pclose | endif
补全来源
默认情况下支持缓冲区中的单词补全和文件路径补全
内嵌来源
名称 | 简写 | 说明 |
---|---|---|
around | [A] | 当前缓冲区的单词 |
buffer | [B] | 非当前缓冲区的字 |
file | [F] | 自动检测的文件名 |
配置补全源
我们可以通过 coc-settings.json
来配置补全源
序号 | 功能 | 设置项 |
---|---|---|
1 | 控制是否启用了源 | "coc.source.{name}.enable" |
2 | 菜单中使用的快捷方式 | "coc.source.{name}.shortcut" |
3 | 优先级排序方式 | "coc.source.{name}.priority" |
4 | 禁用补全的语法部分 | "coc.source.{name}.disableSyntaxes" |
优先级排序:当分值相同时,低优先级的源排在高级之后 设置禁用补全的语法部分,例如:[“comment”,“string”]
更多的源
如何使用配置文件
coc.nvim 使用 jsonc 作为配置文件格式,与 VSCode 相同。json 支持注释
要获得正确的注释高亮显示,请在 vimrc
或 init.vim
中添加
autocmd FileType json syntax match Comment +\/\/.\+$+
打开配置文件
使用命令 :CocConfig
打开用户配置文件
解析配置文件
有两种类型的用户配置文件:
coc-settings.json
默认位置放在$XDG_CONFIG_HOME/nvim
或$HOME/.config/nvim
文件夹中(或者 vim 为$HOME/.vim
)。 运行命令:CocConfig
以打开您的用户配置文件。coc-settings.json
工作区配置文件,位于.vim
目录中。 在 vim 中打开文件后,将从该文件的父目录中解析此目录。
活动配置是“默认”、“用户”和“工作区”配置文件的合并结果,后者具有最高的优先级。
要为 coc-settings.json
文件启用 coc 智能感知,在 vim/NeoVim 中安装 json 语言扩展 coc-json:
:CocInstall coc-json
默认的 COC 配置
默认的 COC 配置可以参考:schema.json
使用代码片段
Coc 以不同的方式支持代码片段:
- 来自不同的 vim 片段插件,比如:coc-ultisnips 和 coc-neosnippet
- 来自语言服务器的代码片段,它是 snipmate 格式的
- 来自提供 VSCode 片段的 coc 扩展
片段补全
完整的片段类型将默认显示为 ~
附加在预览窗口中
在补全解析中,补全格式的代码片段不会显示
~
, 这是 vim 的局限
代码片段仅在使用 <C-y>
进行触发 completionDone
时才会展开,以便用户可以决定是否展开代码段
若要使 <cr>
确认补全,在 vimrc
或 init.vim
中添加:
inoremap <silent><expr> <cr> pumvisible() ? coc#_select_confirm() :
\"\<C-g>u\<CR>\<c-r>=coc#on_enter()\<CR>"
coc#_select_confirm()
在必要时帮助选择第一个补全项,并将<C-y>
发送到 vim 以确认补全\<C-g>u
用于在当前位置断开撤销链coc#on_enter()
通知 coc 您已按下<enter>
,因此它可以在<enter>
上格式化您的代码
配置片段工作流
要向前 / 向后导航代码段占位符,请使用 < C-j >
和 < C-k >
。Vim 全局变量 g:coc_snippet_next
和 g:coc_snippet_prev
可用于更改键映射。
要使代码片段完成工作就像 VSCode 一样,您需要安装 coc-snippet,然后在 vim 中像这样配置 <tab>
:
inoremap <silent><expr> <TAB>
\ pumvisible() ? coc#_select_confirm() :
\ coc#expandableOrJumpable() ? "\<C-r>=coc#rpc#request('doKeymap', ['snippets-expand-jump',''])\<CR>" :
\ <SID>check_back_space() ? "\<TAB>" :
\ coc#refresh()
function! s:check_back_space() abort
let col = col('.') - 1
return !col || getline('.')[col - 1] =~# '\s'
endfunction
let g:coc_snippet_next = '<tab>'
然后在 coc-settings.json
中添加:
// make vim select first item on completion
"suggest.noselect": false
使用来自 VSCode 的代码片段
要加载 VSCode 代码片段,需要安装 coc-snippet 扩展。
然后从 GitHub 安装一个 VSCode 代码片段插件
:CocInstall https://github.com/andys8/vscode-jest-snippets.git#master
扩展
为什么需要 coc 扩展
主要原因是,与 VSCode 的扩展相比,社区提供的一些语言服务器表现不佳。Coc 扩展可以从 VSCode 扩展分离出来,提供更好的用户体验。
coc 扩展特性
- 扩展命令
- 类似于 Vscode,我们可以使用
:CocList commands
打开命令列表,选择需要的命令 - 使用
:CocCommand <tab>
选择命令
- 类似于 Vscode,我们可以使用
- 扩展可以提供 json 模式(与 VSCode 相同)
- 可以提供通过 coc-snippets 扩展加载的片段
- 扩展可以指定更多的客户端选项
- Coc 扩展使用 Coc.nvim 作为依赖项而不是 VSCode
管理 coc 扩展
安装扩展
- 使用
:CocInstall
安装扩展:
:CocInstall coc-json coc-css
请注意,您可以将扩展名添加到
g:coc_global_extensions
变量中,coc 将在服务器启动时为您安装缺少的扩展名
- 使用 vim-plug 安装扩展
但无法使用以下命令卸载扩展 :CocUninstall
并且无法使用自动更新支持。
自动更新
- 自动
coc 会自动更新插件,可以通过下面方式取消自动更新:
coc.preferences.extensionUpdateCheck = "never"
- 手动
:CocUpdate
或:CocUpdateSync
删除插件
:CocUninstall coc-css
通过 CocList 管理插件
运行命令 CocList extensions
打开插件列表,
?
表示无效扩展*
表示激活扩展+
表示加载扩展名-
表示禁用扩展
光标移到相应插件后,通过 <tab>
激活指令。
使用工作区
与 Vscode 不同,vim 不支持工作空间的概念,解决方案是从打开的文件中解析工作区文件夹。
解析工作区文件夹
文件 / 文件夹名称列表用于解析工作区文件夹,模式可以来自:
- 当前缓冲区的
b:coc_root_patterns
变量 - 指定用于当前缓冲区的语言服务器
rootPatterns
"coc.preferences.rootPatterns"
设置,默认为[".vim", ".git", ".hg", ".projections.json"]
后者具有较低的优先级,这意味着它仅在先前的模式与工作区文件夹不匹配时使用。当工作空间文件夹解析失败时,将 cwd 用于 workspaceFolder。
要为指定的文件类型配置 rootpattern,请使用 autocmd 命令,比如:
autocmd FileType python let b:coc_root_patterns = ['.git', '.env']
注意,由于它是通过解析文件来工作的,因此要启用多个工作区文件夹,您必须打开每个文件夹中的至少一个文件。
管理工作区文件夹
使用命令 :CocList folders
打开工作区文件夹列表,支持删除和编辑操作。
使用命令 :echo coc#util#root_patterns()
获取用于解析当前缓冲区的工作空间文件夹的模式。
禁用工作区文件夹支持
当您不希望语言服务器使用 workspaceFolders 功能时,可以将 "disableWorkspaceFolders":true
添加到语言服务器的配置部分。
持久化工作区文件夹
变量 g:WorkspaceFolders
用于存储当前工作区文件夹,如果想从会话中恢复工作区文件夹,请在 vimrc 中使用 set sessionoptions+=globals
。
中文排版插件 PanGu
文件目录和搜索
插件 | 地址 |
---|---|
NerdTree | scrooloose/nerdtree |
CtrlP | ctrlpvim/ctrlp.vim |
easymotion | easymotion/vim-easymotion |
ctrlp 模糊搜索器
ctrlp 可以搜索工作目录下的所有文件
强大的 vim 模糊搜索 fzf.vim
vim 的 /
只能搜索当前文件,这里使用的是 fzf.vim
插件。fzf
是强大的命令行搜索工具,fzf.vim
把它集成到了 vim
里。它的主页在『这里』(https://github.com/junegunn/fzf.vim
)。
安装与配置
Plug 'junegunn/fzf', { 'dir': '~/.fzf', 'do': './install --all' }
Plug 'junegunn/fzf.vim'
在 ~/.vim/vimrc
中写入这些安装包,然后执行 source ~/.vim/vimrc
再执行 PlugInstall
就可以安装 fzf.vim
插件
小技巧
安装好 fzf.vim
后,fzf
也被安装了,我们可以通过 vim $(fzf)
来选择打开的文件,可以通过 cd $(find * -type d | fzf)
来选择要进入的目录,而且 fzf
默认使用 **
来不全 shell 命令
安装好 fzf.vim
后,配置如下:
export FZF_DEFAULT_COMMAND="fd --exclude={.git,.idea,.vscode,.sass-cache,node_modules,build} --type f"
注意,这里使用了
fd
命令来搜索文件,而不是 Linux 自带的find
命令。fd
的安装看这里
其次,是 fzf
搜索的展示界面,配置如下:
export FZF_DEFAULT_OPTS="--height 40% --layout=reverse --preview '(highlight -O ansi {} || cat {}) 2> /dev/null | head -500'"
这里使用了命令行语法高亮的程序
highlight
,网址在这里
指令 | 说明 |
---|---|
Ag [pattern] | 模糊搜索字符串 |
Files [Path] | 模糊搜索目录 Files ./<tab> |
多文本替换工具 far.vim
far.vim
是一个在多文件内搜索和替换文本的工具,它的地址是: brooth/far.vim
。多文件的替换常用于代码重构。
使用方法很简单:
:Far foo bar **/*.py # 在当前 py 文件中搜索 foo,并替换在 bar
:Fardo # 开始替换
python 的补全插件 python-mode
python-mode 具备基本的补全、跳转、重构和格式化功能,据说是 Python 的最佳辅助型插件,地址:python-mode/python-mode
指令 | 说明 |
---|---|
<c-x> <c-o> |
代码补全 |
<c-]> |
跳转到定义 |
<c-c>ro |
整理 import 格式 |
:PymodeLintAuto |
使用 Auto PEP 8 整理格式 |
浏览代码工具 vim-tagbar
vim-tagbar
是一个通用的代码大纲插件,提供了一种简单的方法来浏览当前文件的标签并获得其结构的概述。 它通过创建一个侧边栏来显示当前文件的 ctags 生成的标签,按其范围排序,地址是:majutsushi/tagbar
它依赖 ctags
,我们可以去 ctags
的 github
主页 下载文件,然后自己编译安装
指令 | 说明 |
---|---|
TagbarToggle |
打开代码大纲 |
高亮单词 vim-interestingwords
地址:lfv89/vim-interestingwords
指令 | 说明 |
---|---|
<leader>k |
高亮单词 |
n/N | 跳转到下一个 |
<leader>k |
取消高亮 |
强大的通用代码补全 coc.vim
Coc 是 vim8 和 neovim 的智能感知引擎,是一个支持 VSCode 扩展特性的完成框架和语言服务器客户端。
它需要 node.js
的支持,所以先要安装 node.js
curl -sL install-node.now.sh/lts | bash
格式化和静态检查
静态检查可以让编写的代码更加规范,格式化插件是 sbdchd/neoformat
,需要安装对应语言的格式化库,如 python 的 autopep8,js 的 prettier 等
指令 | 说明 |
---|---|
:Neoformat |
格式化命令 |
静态检查 ALE
ale 需要 pylint
的支持,在安装前先要安装 pylint
,地址:w0rp/ale
快速注释代码 vim-commentary
地址:tpope/vim-commentary
指令 | 说明 |
---|---|
gc |
visual 模式下代码注释 / 取消注释 |
gcc |
单行代码注释 |
gcgc |
单行代码取消注释 |
gcap |
注释一个段落 |
Git 包装器 Fugitive
地址:tpope/vim-fugitive
指令 | 说明 |
---|---|
Gcommit | 提交 |
Gblame | 查看提交者 |
git 显示文件改动 vim-gitgutter
地址:airblade/vim-gitgutter
git 查看提交记录 gv.vim
地址:junegunn/gv.vim
指令 | 说明 |
---|---|
:GV |
显示提交记录 |
YouCompleteMe 插件
YCM 是一款广受赞誉的补全插件,但也出了名的难以安装。下面是安装的要求和步骤:
Python 版本
YCM 要求用来编译 YCM 的 python 版本是通过 --enabled-shared
编译安装的版本,所以在安装 YCM 之前,我们需要安装支持共享对象的 python。
-
下载 python 源码 以 python3.7 为例,下载源码包并解压,得到 Python-3.7 目录
- 编译并安装
# 进入 python 源码目录 cd python3.7 # 清除临时文件 make distclean # 配置 python 版本,支持共享对象,安装目录为 /usr/local/ ./configure --enable-shared --prefix=/usr/local/ # 编译 make # 安装 sudo make install
- 刷新动态连接库
如果出现类似的问题,可以通过
sudo ldconfig
刷新动态连接库解决/opt/python3/bin/python3.7:加载共享库时出错:libpython3.5m.so.1.0:无法打开共享对象文件:无此类文件或目录
安装 vim
安装了支持共享对象的 python 版本后,下载 vim8.1 源码包,解压后用以下编译指令安装 vim
./configure --with-features=huge --enable-multibyte --enable-python3interp=yes --with-python3-config-dir=/usr/local/lib/python3.8/config-3.8-x86_64-linux-gnu/ --enable-fontset --enable-cscope --enable-fail-if-missing --enable-gtk2-check --prefix=/usr/local
安装 YouCompleteMe
- 在 vimrc 中加入 YCM 插件
- 在 vim 中执行
:PlugInstall
,下载 YCM - 进入 YCM 目录,一般在
~/.vim/plugged/YouCompleteMe
目录下 - 执行
python3.8 install.py --all
安装 YCM
安装完成后,就可以自动补全了
详细的安装过程,可以参考这篇文章
插件可以在 vimawesome 网址中搜索
查看 vim 映射
:verbose map <key>