vime
vime是一个结构化的(neo)vim配置,具有如下优势:
- 结构简单明了。该项目中每个插件都单独对应一个配置文件,插件列表
config/layers.vim
可以对插件进行组合。 - 增删配置容易。大家可以根据自己的需求,快速的增减插件。
- 低耦合性。大家可以将某一个插件的配置文件单独拿出来放到自己的(neo)vim配置中直接使用。
一些截图和GIF,欢迎各位提供:
目录
整体结构
├── init.vim
├── config.vim
├── vimrc -> ./init.vim
├── autoload/
│ ├── common/
│ │ └── functions.vim
├── config/
│ ├── plugins/
│ ├── layers/
│ ├── other/
│ ├── theme/
│ │ ├── theme.vim
│ │ ├── statusline.vim
│ │ └── tabline.vim
│ ├── layer.vim
│ ├── base.vim
│ ├── keymap.vim
│ └── plugin_list.vim
├── plugin/
├── ftplugin/
└── scripts/
下面简单介绍下整个结构:
-
init.vim
neovim初始化的时候要加载的文件,
vimrc
链接到init.vim
文件上,是vim初始化时要加载的文件。 -
config.vim
该文件主要是一些用户自定义的全局配置文件。
-
autoload/
在(neo)vim中,
autoload/
目录用于自动加载。我将一些通用的函数放到autoload/common/functions.vim
文件中,如果大家想单独复制一个插件的配置到自己的(neo)vim配置中,那么请不要忘记将这些通用函数复制过去,因为很多插件配置都用到了这里的函数。 -
config/
该目录是主要的配置文件目录。
-
config/plugins/
此目录下面就是所有插件的配置,一个插件对应一个文件,文件的名称与插件的名称相同,比如插件
Plug "user_name/plugin_name.vim"
对应的配置文件名称为plugin_name.vim.vim
。对于插件的配置文件,有一个小小的规范,某个插件的按键映射最好写到对应配置文件的最后。
-
config/layers/
该目录主要存储一些插件组合配置文件。
-
config/other/
此目录主要存放一些插件需要用到的文件,比如插件coc用到的
coc-settings.json
,ycm用到的ycm_extra_conf.py
等文件。 -
config/theme/
主题配置,(neo)vim主题相关的配置基本上都放到该文件夹下。
-
config/layer.vim
此文件主要用于从
config/layers/
目录下选择合适的插件组合。 -
base.vim
基础配置。
-
keymap.vim
此文件是一些快捷键配置,通常这些快捷键与插件无关,与插件相关的快捷键一般都放到插件的配置文件中。
-
-
plugin/
在(neo)vim中,
plugin/
目录下的配置会在(neo)vim启动的时候自动加载,因此,我主要用于存放一些自定义的配置在这里。 -
ftplugin
该目录是(neo)vim的目录,该目录下的文件都是以
文件类型.vim
格式进行命名,比如c.vim
,cpp.vim
,表示遇到c
,cpp
文件的时候要执行对应文件的代码。 -
scripts/
该目录主要存储一些常用的脚本文件,如
preview.sh
等。
安装
依赖
下面是一些必须或者可选的一些依赖:
-
neovim
此处的
neovim
是指python包中neovim
,通过pip install neovim
进行安装,必须安装。 -
ripgrep
该软件主要用于
fzf
、clap
、leaderf
等插件,主要用于内容检索,建议安装。 -
nodejs
、npm
该软件主要用于coc补全插件,如果使用coc则必须安装。
-
neovim-remote
、xdotool
、inkscape
、rofi
、pip install inkscape-figures
这些软件主要用于vimtex插件,写latex的用户可能会用到。
其中xdotool主要用于在预览软件中按下ctrl+鼠标左键定位到代码位置,inkscape、rofi、inkscape-figures三个软件主要用于使用inkscape绘图然后自动插入到latex中,主要参考inkscape-figures。
-
zathura
该软件是pdf阅读器,同样主要用于vimtex插件,主要是用来进行预览,可选。
安装
git clone https://github.com/fgheng/vime ~/.config/nvim
然后打开(neo)vim,执行:PlugInstall
等待插件安装完毕即可!
注意:
- 因为一开始没有安装主题,因此在第一次启动的时候可能会提示找不到主题,属于正常现象,执行完
:PlugInstall
之后再打开(neo)vim即可。 - 因为列表中有关于
tmux
的插件,而这些插件只有在tmux
中打开(neo)vim的时候才会加入到插件列表中,因此,第一次运行vime的时候如果没有启动tmux
,那么这些关于tmux
的插件将不会安装,要安装这些插件需要在tmux
中打开(neo)vim后重新执行PlugInstall
命令才可以。 - 第一次安装可能要等待很长时间,可以稍微耐心等待一下。
插件结构
此部分主要介绍vime
的插件结构。
所有用到的插件都在config/plugin_list.vim
中,该文件中的内容如下:
Plug 'neoclide/coc.nvim', { 'branch': 'release' }
Plug 'junegunn/fzf.vim'
Plug 'junegunn/fzf', { 'do': {-> fzf#install()} }
Plug 'antoinemadec/coc-fzf', {'branch': 'release'}
需要什么插件,就在这里添加。
当需要为自己使用的插件自定义配置的时候,请按照如下的例子进行:
以Plug 'juegunn/fzf.vim'
为例,首先我们要在config/plugin_list.vim
中添加一行Plug 'juegunn/fzf.vim'
,表示我们要安装该插件,接下来要为该插件自定义配置,那么需要在config/plugins/
目录下建立与插件名同名的文件fzf.vim.vim
,注意后缀.vim
,最后在该文件中编写关于该插件的配置即可。
如果不想使用该插件了,那么只需要在config/plugin_list.vim
中注释掉该插件,config/plugins/fzf.vim.vim
文件则不必删除,(neo)vim在启动的时候将不再加载该配置文件。
插件以及快捷键
下面介绍的是我常用的插件及其快捷键,当然,我会先按照类型进行介绍,同一个类型下可能会有很多插件(一般选择自己喜欢的那个),而我的配置中,同一个类型的插件的快捷键我都尽可能配置的一样,这样,在更换为另一个插件的时候,更改的只有(neo)vim的表现形式而不会改变我们的使用习惯。
补全
可选插件
对于补全,有很多插件,而我常用的是两个,一个是coc,另一个是YouCompleteMe,两者都属于补全类的插件,因此,两者的快捷键应该一致。
-
使用coc
Plug 'neoclide/coc.nvim', { 'branch': 'release' }
-
Plug 'ycm-core/YouCompleteMe', {'do': 'python3 install.py --all'}
快捷键
按键 | 描述 | 提供者 |
---|---|---|
tab | 1. 如果存在下拉框,那么选择下一个 2. 如果不存在下拉框,那么强制显示下拉框,前提是有内容显示,否则输入tab |
coc |
shift-tab | 如果存在下拉框的话,选择下拉框的上一个 | coc/ycm |
enter | 选中下拉框中的该条目,如果条目可以扩展,那么将会扩展 | coc/ycm |
gd | 跳转到定义 | coc/ycm |
gr | 跳转到引用 | coc/ycm |
gi | 跳转到实现 | coc/ycm |
gy | 跳转到类型定义 | coc/ycm |
alt-j | 1. normal模式下,跳转到下一处错误 2. instert模式下,如果存在下拉框,选择下一个条目 3. instert模式下,如果存在snippet跳转块,跳转到下一处补全处 |
coc |
alt-k | 同alt-j行为相反 | coc |
K | 查看当前光标下函数的帮助 | coc/ycm |
<space>k | 查看当前光标下函数的参数帮助 | coc |
<space>rn | 重命名变量、函数名称等 | coc/ycm |
<space>f | 按照lsp的建议对代码错误进行自动修复 | coc/ycm |
下面是coc插件的额外快捷键
按键 | 描述 | 提供者 |
---|---|---|
<space>l | 打开coclist | coc |
<space>a | 打开coclist dialogistic | coc |
<space>c | 打开coclist command | coc |
<space>o | 打开coclist outline | coc |
<space>O | 打开coclist symbols | coc |
文件管理
可选插件
weirongxu/coc-explorer、Shougo/defx.nvim、nerdtree、ms-jpq/chadtree
-
使用coc-explorer
在
config/plugin_list.vim
中let g:coc_global_extensions = ['coc-explorer']
-
使用defx
if has('nvim') Plug 'Shougo/defx.nvim', { 'do': ':UpdateRemotePlugins' } Plug 'kristijanhusak/defx-icons' Plug 'kristijanhusak/defx-git' else Plug 'Shougo/defx.nvim' Plug 'roxma/nvim-yarp' Plug 'roxma/vim-hug-neovim-rpc' Plug 'kristijanhusak/defx-icons' Plug 'kristijanhusak/defx-git' endif
-
使用nerdtree
Plug 'preservim/nerdtree' Plug 'Xuyuanp/nerdtree-git-plugin'
-
使用chadtree
Plug 'ms-jpq/chadtree', {'branch': 'chad', 'do': ':UpdateRemotePlugins'}
快捷键
按键 | 描述 | 提供者 |
---|---|---|
j | 下一个 | coc-explorer/nerdtree/defx |
k | 上一个 | coc-explorer/nerdtree/defx |
h | 收起目录或跳到上级目录 | coc-explorer/nerdtree/defx |
l | 展开目录/打开文件 | coc-explorer/nerdtree/defx |
H | 递归收起目录 | coc-explorer |
L | 递归打开目录 | coc-explorer/nerdtree/defx |
J | 跳到下一个可以展开的地方 | coc-explorer/ |
K | 跳到上一个可以展开的地方 | coc-explorer/ |
enter | 进入目录并切换工作目录为进入的目录 | coc-explorer/nerdtree/defx/ |
backspace | 跳到上一级目并切换工作目录为切换的目录 | coc-explorer/nerdtree/defx/ |
r | 刷新目录 | coc-explorer/nerdtree/defx/ |
v | 选中/取消选中,并向下移动 | coc-explorer/defx/ |
V | 选中/取消选中,并向上移动 | coc-explorer/defx/ |
* | 选中/取消选中 | coc-explorer/defx/ |
w | 水平打开 | coc-explorer/nerdtree/defx/ |
W | 垂直打开 | coc-explorer/nerdtree/defx/ |
t | 新tab中打开 | coc-explorer/nerdtree/defx/ |
dd | 剪切文件 | coc-explorer/defx/ |
Y | 复制文件 | coc-explorer/defx/ |
D | 删除文件 | coc-explorer/defx/ |
P | 粘贴文件 | coc-explorer/defx/ |
R | 重命名文件 | coc-explorer/defx/ |
N | 添加文件或者目录,如果最后有/ 则表示添加目录 |
coc-explorer/defx/ |
yp | 复制文件路径 | coc-explorer/defx/ |
yn | 复制文件名称 | coc-explorer/ |
. | 显示/关闭隐藏文件 | coc-explorer/nerdtree/defx/ |
coc-explorer/nerdtree/defx/ | ||
x | 使用系统默认应用打开文件 | coc-explorer/defx/ |
f | 搜索文件 | coc-explorer |
F | 递归搜索文件 | coc-explorer |
<leader>f | 悬浮或者在当前窗口打开 | coc-explorer/defx/ |
快速检索
可选插件
junegunn/fzf.vim、Yggdroot/LeaderF、liuchengxu/vim-clap、coc-lists,其中如果存在前面的三个插件之一,那么coc-lists优先级最低。
-
使用fzf
Plug 'junegunn/fzf.vim' Plug 'junegunn/fzf', { 'do': {-> fzf#install()} } Plug 'antoinemadec/coc-fzf', {'branch': 'release'}
-
使用LeaderF
Plug 'Yggdroot/LeaderF'
-
使用vim-clap
Plug 'liuchengxu/vim-clap', { 'do': ':Clap install-binary!' } Plug 'vn-ki/coc-clap'
-
使用coc-lists
let g:coc_global_extensions = ['coc-lists']
快捷键
按键 | 描述 | 提供者 |
---|---|---|
alt-r | 最近打开的文件 | fzf/leaderf/clap/coc |
alt-b | 显示当前打开的所有buffer | fzf/leaderf/clap/coc |
alt-f | 1. 搜索工程目录下的文件 2. 搜索wiki笔记目录下的文件 |
fzf/leaderf/clap/coc |
alt-F | 搜索HOME下的所有文件 | fzf 因为clap很慢所以只有fzf保存该功能 |
alt-w | 显示打开的窗口 | fzf/leaderf/clap/coc |
alt-m | 显示所有的标记,即marks | fzf/clap/coc |
alt-M | 显示所有映射 | fzf/clap/coc |
alt-s | 1. 使用rg搜索当前工程下的文件内容 2. 如果正在编辑wiki目录下的笔记,那么使用rg会搜索wiki笔记目录下的内容 3.visural模式下选中内容之后会自动搜索选中的内容 |
fzf/leaderf/clap/coc |
alt-c | 显示所有命令 | fzf/leaderf/clap/coc |
? | 模糊搜索所有打开的buffer的内容 | fzf/leaderf/clap/coc |
alt-y | 显示复制内容 | fzf/clap/coc |
alt-J | 显示跳转 | fzf/clap |
alt-x | 使用系统默认应用打开检索到的文件 | fzf |
<F8> | quickfix | fzf/clap |
<F9> | locationList | fzf/clap |
基础快捷键
这些快捷键主要是操作窗口与buf的。
快捷键
按键 | 描述 | 提供者 |
---|---|---|
ctrl-w-h/j/k/l | 分别在当前窗口的左/下/上/右侧打开一个新的窗口 | |
ctrl-h/j/k/l | 分别移动光标到当前窗口的左/下/上/右侧窗口 | |
ctrl-w-o | 最大化当前窗口,再按一次恢复 | |
- | 选择窗口 交换窗口(按下-后在按s即可交换窗口) |
vim-choosewin |
q | 关闭窗口 | |
alt ( | 窗口左右方向变小 | |
alt ) | 窗口左右方向变大 | |
alt - | 窗口上下方向变小,注意是减号 | |
alt _ | 窗口上下方向变大,注意是下划线 | |
<leader>q | 使用宏 | |
jk | 表示<esc> | |
<backspace> | 取消搜索高亮 | |
ctrl h/j/k/l | 插入模式下移动光标 | |
alt h l | 插入模式下将光标移动到本行开头和结尾 | |
alt o O | 插入模式下在本上下或上新建一行 | |
<leader>tn | 在后面新建一个tab | |
<leader>tc | 关闭一个tab | |
<leader>tt | 新建一个终端 | |
alt-H/L | 将当前的tab移动到左侧/右侧 | |
alt-h/l | 切换到上一个/下一个tab 如果存在浮动终端,则切换为上一个或下一个浮动终端 如果不存在多个tab,那么切换上一个或下一个buffer |
Git
可选插件
git插件可以选择使用airblade/vim-gitgutter、tpope/vim-fugitive、neoclide/coc-git
-
使用vim-gitgutter
Plug 'airblade/vim-gitgutter'
-
使用vim-fugitive
Plug 'vim-fugitive', {'on': ['Gwrite', 'Gcommit', 'Gread', 'Gdiff', 'Gblame']}
-
使用coc-git
let g:coc_global_extensions = ['coc-git']
快捷键
按键 | 模式 | 描述 | 提供者 |
---|---|---|---|
<leader>gk | normal | 跳转到上一个修改地方 | coc-git/gitgutter |
<leader>gj | normal | 跳转到下一个修改地方 | coc-git/gitgutter |
<leader>gp | normal | 浮动预览光标处的修改 | coc-git/gitgutter |
<leader>gu | normal | 撤销光标处相对于上次提交的修改 | coc-git/gitgutter |
<leader>gw | normal | 添加当前文件到index | fugitive |
<leader>gc | normal | 提交 | fugitive |
<leader>gf | normal | 查看差异 | fugitive |
<leader>gr | normal | 回复当前文件到上个版本 | fugitive |
<leader>gb | normal | blame | fugitive |
多光标
可选插件
多光标使用的是插件vim-visual-multi以及coc自带的多光标,如果plug.vim
中没有vim-visual-multi那么会使用coc自带的插件,coc行为与前者类似,但是功能不如前者多。
-
使用vim-visual-multi
Plug 'mg979/vim-visual-multi'
-
使用coc自带多光标
Plug 'neoclide/coc.nvim', { 'branch': 'release' }
快捷键
按键 | 模式 | 描述 | 提供者 |
---|---|---|---|
tab | visual-multi-mode | 光标和扩展模式直接切换 | vim-visual-multi |
shift-左右方向键 | normal | 选中区域并进入visual-multi-mode | vim-visual-multi |
ctrl-c | normal | 在当前位置插入一个光标(然后使用上下左右键移动到指定未知添加下一个光标,hjkl键会移动添加的光标) | vim-visual-multi |
ctrl-down/up | normal | 垂直方向插入多光标 | vim-visual-multi |
ctrl-s | normal/visual | 1. 选中当前光标下的所有单词 2. visual模式下选中所有的当前选中的内容 |
vim-visual-multi |
ctrl-n/N | normal | 在visual模式下选中内容之后,按下ctrl-n会在下一处与当前选中内一样的地方插入光标。非visual模式下,与ctrl-s表现差不多,不过是依次选择当前光标下的单词。 | vim-visual-multi |
q | visual-multi-mode | 取消当前光标或者选中的区域 |
vim-visual-multi |
vim-visual-multi | |||
]/[ | visual-multi-mode | 在多个选中的光标之间进行跳转 | vim-visual-multi |
n/N | visual-multi-mode | 跳到下一个/上一个匹配的模式,可以代替]/[进行使用 | vim-visual-multi |
S | visual-multi-mode | 在多光标模式下,将多个选中的内容以某种符号进行进行包围 | vim-visual-multi |
o | visual-multi-mode | 交换光标位置 | vim-visual-multi |
m | vim-visual-multi | ||
\/ | normal | 以正则匹配的方式设置多光标 | vim-visual-multi |
快速跳转
可选插件
快速跳转使用的是vim-easymotion或者clever-f,easymotion中只使用了两个功能,一个是使用char进行跳转,另一个是跳转到行。
-
选择vim-easymotion
Plug 'easymotion/vim-easymotion'
-
选择clever-f
Plug 'rhysd/clever-f.vim'
快捷键
按键 | 模式 | 描述 | 提供者 |
---|---|---|---|
f | normal | 根据输入的char进行跳转,按下f后会提示要跳转到哪个char, 需要再输入一个char然后回车确认 |
clever-f/vim-easymotion |
gl | normal | 跳转到行 | vim-easymotion |
F | normal | 直接根据单词跳转 | vim-easymotion |
注释与文档
可选插件
文档生成器使用kkoomen/vim-doge,注释插件使用nerdcomment或者tyru/caw.vim,caw功能没有nerdcomment多,但是简洁。
-
使用vim-doge
Plug 'kkoomen/vim-doge'
-
使用nerdcomment
Plug 'preservim/nerdcommenter'
-
使用caw.vim
Plug 'tyru/caw.vim'
快捷键
按键 | 模式 | 描述 |
---|---|---|
<leader>d | normal | 生成函数文档 |
caw快捷键
按键 | 模式 | 描述 |
---|---|---|
<leader>cc | nomal/visual | 注释/取消注释 |
<leader>ci | nomal/visual | 在当前光标处加入注释 |
<leader>cI | nomal/visual | 在当前行的最开始加入注释 |
<leader>ca | nomal/visual | 在当前行最后加入注释 |
<leader>cw | nomal | 给单词加注释 |
<leader>cb | nomal/visual | 给选中的区域弄一个块注释 |
<leader>co | nomal | 在下一行加入注释 |
<leader>cO | nomal | 在上一行加入注释 |
下面的是nerdcomment的快捷键
按键 | 模式 | 描述 |
---|---|---|
<leader>cc | normal/visual | 注释 |
<leader>cu | normal/visual | 取消注释选中的内容 |
<leader>cs | normal/visual | 用一种比较好看的方式注释当前行或选中的内容 |
<leader>ci | normal/visual | 注释/取消注释 |
<leader>cm | normal/visual | 用一种最简单的方式注释当前行或选中的内容 |
<leader>cl | normal/visual | 按行的方式注释选中的内容 |
<leader>cb | normal/visual | 注释选中的内容 |
<leader>ca | normal | 切换到另一种注释符号 |
<leader>cA | normal | 在当前行最后增加注释符号并进入插入模式 |
<leader>c$ | normal | 从当前光标处注释到当前行的最后 |
<leader>c<space> | ||
<leader>cn |
终端
可选插件
终端使用的是voldikss/vim-floaterm
-
使用vim-floaterm
Plug 'voldikss/vim-floaterm'
快捷键
按键 | 模式 | 描述 |
---|---|---|
alt = | normal | 打开/关闭当前终端 |
alt + | normal/tnormal | 新建一个终端 |
alt h | tnormal | 打开终端后,切换到上一个终端 |
alt l | tnormal | 打开终端后,切换到下一个终端 |
代码折叠
可选插件
代码折叠使用的插件是pseewald/vim-anyfold
Plug 'pseewald/vim-anyfold'
快捷键
按键 | 模式 | 描述 |
---|---|---|
zc | normal | 关闭光标下的折叠 |
zC | normal | 关闭光标下的折叠以及嵌套的折叠 |
zo | normal | 打开光标下的折叠 |
zO | normal | 打开光标下的折叠以及嵌套的折叠 |
za | normal | 光标下折叠若是关闭则打开若是打开则关闭 |
zA | normal | 光标下折叠若是关闭则打开包括嵌套若是打开则关闭包括嵌套 |
zm | normal | 一层一层的关闭折叠 |
zM | normal | 关闭所有折叠 |
zr | normal | 一层一层的打开折叠 |
zR | normal | 打开所有折叠 |
zn | normal | 禁用折叠 |
zN | normal | 启用折叠 |
zj | normal | 移动到下一个折叠 |
zk | normal | 移动到上一个折叠 |
<enter> | normal | 打开或者关闭折叠 |
格式化
可选插件
格式化主要是使用coc中的格式化功能,当然你也可以自己增加格式化插件比如sbdchd/neoformat等,另外格式化部分还有junegunn/vim-easy-align这个插件,该插件主要用于对齐。
Plug 'junegunn/vim-easy-align'
快捷键
快捷键 | 模式 | 描述 |
---|---|---|
Format | 命令 | 格式化代码 |
EasyAlign | visual模式下的命令 | 代码对齐,按下enter可以选择对齐方式(居左,居右,居中) |
笔记
可选插件
笔记使用的是插件vimwiki/vimwiki,可以记笔记可以写日记,支持markdown。
可以使用junegunn/fzf.vim、Yggdroot/LeaderF进行笔记文件和笔记内容的搜索,这个已经配置好了可以直接使用。
快捷键
按键 | 模式 | 描述 |
---|---|---|
===>笔记<=== | ||
alt s | normal | 搜索vimwiki中的内容 |
<leader>ww | normal | 打开vimwiki |
<leader>wt | normal | 在新的tab打开vimwiki |
<leader>wd | normal | 删除当前page |
<leader>wr | normal | 重命名当前的page |
===>日记<=== | ||
<leader>wi | 打开日记列表 | |
<leader>w<leader>i | 更新当前的日记列表 | |
<leader>w<leader>w | 打开今天的日记 | |
<leader>w<leader>t | 在新的tab中打开今天的日记 | |
ctrl up/down | 打开昨天/明天的日记 | |
===>导航<=== | ||
enter | 创建链接 | |
ctrl shift enter | ||
back | 回到上一级目录 | |
tab | 跳转到下一处链接 | |
shift tab | 跳转到上一处链接 | |
===>编辑快捷键<=== | ||
= | 增加标题 | |
- | 减少标题 | |
+ | 创建链接 | |
glm | 增加list item的缩进 | |
gll | 减少list item的缩进 | |
gl* 或 gl8 | 将该行变为*条目 | |
gl# 或 gl3 | 将该行变为# | |
gl- | 将该行变为- | |
gl1 | 将改行变为1. | |
===>表格模式<=== | ||
cr | insert | 插入模式 |
tab | instert | 插入模式,跳到下一个输入框 |
gqq 或 gww | normal | 格式化表格 |
Latex
可选插件
latex可以选择使用lervag/vimtex
Plug 'lervag/vimtex'
快捷键
按键 | 模式 | 描述 |
---|---|---|
<leader>ll | normal | 准备编译文档 |
<leader>lv | normal | 在pdf文档中定位到当前位置 |
<leader>ll or lk | normal | 停止编译 |
<leader>le | normal | 删除log,errors以及warnings |
<leader>lc | normal | 删除多余的文档 |
% | normal | 在定界符之间跳转 |
<c-i> | insert | 打开inkscape绘图,然后插入到latex中 |
<c-i> | normal | normal模式下打开inkscape绘图,修改当前的图形 |
其他
关于neovim+vimtex+zathura的反向搜索,也就是在从zathura定位到vim中的代码位置,首先需要安装一些依赖,neovim-remote
、xdotool
,然后需要编辑zathura的配置文件~/.config/zathura/zathurarc
,加入如下内容:
set synctex true
set synctex-editor-command "gvim --remote-silent +%l %f"
这样在zathura中就可以使用ctrl+鼠标左键直接定位到对应的代码位置了。
tmux
可选插件
与tmux相关的插件有如下几个:
- 窗口导航 vim-tmux-navigator
Plug 'christoomey/vim-tmux-navigator'
- vim-tmux-focus-events
" 需要在tmux的配置文件~/.tmux.conf中添加 set -g focus-events on Plug 'tmux-plugins/vim-tmux-focus-events'
- tmux与vim之间复制粘贴
Plug 'roxma/vim-tmux-clipboard'
- 提示tmux终端中的内容
Plug 'wellle/tmux-complete.vim'
书签
可选插件
标记使用vim-bookmarks或者coc-bookmark,因为coc-explorer支持显示coc-bookmark中的书签,所以我使用coc-bookmark,不过可以在config/plug.vim
中加入vim-bookmarks两者快捷键一致。
-
使用coc-bookmark
let g:coc_global_extensions = ['coc-bookmark']
-
使用vim-bookmarks
Plug 'MattesGroeger/vim-bookmarks'
快捷键
按键 | 模式 | 描述 |
---|---|---|
ma | normal | 增加一个带有备注的书签 |
mm | normal | 增加一个标签 |
ml | nromal | 打开书签列表 |
mc | nromal | 清除标签 |
mj/k | normal | 跳转标签 |
session
默认使用了vim-startify这个插件作为开始界面,该插件的可以自定义起始界面,配置在./config/plugins/vim-startify.vim
下,可以自定义配置。session使用轮换方式,第一次存储一个session0,第二次还是存储session0,不过上一次的session0变为了session1,第三次存储session0,前面的session0变为session1,session1变为session2。
Surround
可选插件
Surround是使用快捷键来给指定的字符串添加包围,比如引号等。使用的插件是tpope/vim-surround以及vim-sanwich
- 使用vim-surround
Plug 'tpope/vim-surround'
- 使用vim-sandwich
Plug 'machakann/vim-sandwich'
快捷键
按键 | 模式 | 描述 |
---|---|---|
cs"'' | normal | changed surround "' 将双引号改为单引号 |
cs'<q> | normal | 将单引号改变为<q>包围 |
cst" | normal | 将tag改变为双引号,比如<q>hello</q>变为"hello" |
ds" | normal | 删除双引号 |
ysiw] | normal | iw是选择一个单词,在选中的单词处增加中括号 |
ysiw[ | normal | 同上,不过两侧会增加空格 |
yss) | normal | 整行增加括号 |
ysiw<em> | normal | 在一个单词处增加<em></em>包围 |
下面是vim-sanwich的快捷键,不过我增加了与vim-surround一致的快捷键配置,可以直接使用vim-surround的快捷键。
按键 | 模式 | 描述 |
---|---|---|
sa{motion/textobject}{addition} | normal | 增加,例如saiw' |
sdb or sd{deletion} | normal | 删除,例如sdb sd' |
srb{addition} sr{deletion}{addition} | normal | 替换,例如srb',sr'< |
数据库
数据库可以选择使用tpope/vim-dadbod
绘图
绘图使用vim-scripts/DrawIt,命令行输入DrawIt
进入绘图模式。
Debug
debug可以选择使用puremourning/vimspector,暂时没有需求,所以还没有配置。
Run
代码run使用韦大的插件,但是我现在还没有需求,做一暂时没有配置。
翻译
翻译之前使用voldikss/coc-translator,接下来又换成了voldikss/vim-translator然后感觉都稍微有些许问题,最后选择了iamcco/dict.vim,但是该插件不支持悬浮窗口,我需要对其更改下支持悬浮窗口。
按键 | 模式 | 描述 |
---|---|---|
<leader>w | normal/visual | 翻译当前光标下的内容/选中的内容,在新窗口展示 |
<leader>e | normal/visual | 在命令栏输出解释 |
<leader>r | normal/visual | 用翻译内容替换当前光标或选中的内容 |
其他
按键 | 模式 | 描述 |
---|---|---|
alt q | normal | 进入宏录制,因为q映射为了关闭窗口,所以使用alt q作为宏录制 |
alt x | normal | 使用系统默认应用打开当前buffer文件 |
<space><space> | normal | 保存当前的buffer,不包括terminal,目录树等 |
TODO
- [✓] 更新ycm的配置,使其与coc行为一致
- [✓] 更新nerdtree的配置(已更新部分),使其与defx, coc-explorer行为一致
- [✓] 录制GIF放到issue中
- [✓] 更新tagbar的配置
- [✓] 更新clap,leaderf配置,使其与fzf行为一致
- [✓] 重新规划一下目录结构
- [✓] 重新编写readme,每个部分都应该加上所使用的插件,例:
Plug 'user/plug_name'
- [✓] 将一些通用函数提取出来