所需功能: 提示补全,定义跳转,关键词搜索,语法高亮,语法检查,缩进折叠,函数展示大纲,文件模板,目录树等等
安装Vim 8.0
- 如果有root权限,直接安装
- 如果没有root权限,可以从源码安装https://www.vim.org/git.php
- https://xmfbit.github.io/2018/10/02/vim-you-complete-me/
安装Vim-Plug
vim-plug支持异步安装和按需加载,建议不要再使用[Vundle]。(https://github.com/VundleVim/Vundle.vim)
下载plug.vim
放到autoload
文件夹
1 | curl -fLo ~/.vim/autoload/plug.vim --create-dirs \ |
用法
在~/.vimrc
里配置安装哪些插件
1 | " Plugins will be downloaded under the specified directory. |
然后重启vim,运行:PlugInstall
安装声明的插件,:PlugStatus
查看安装进度。:PlugUpdate
更新插件,:PlugDiff
跟上一个版本比较,卸载插件的时候,在~/.vimrc
里删除声明,然后重启vim后运行:PlugClean
卸载。
具体参考这里
延迟加载
1 | " 第一次执行 NERDTreeToggle 命令时,NERD tree 插件才加载 |
一些Tips
比如条件激活等,具体参考这里
提示补全
这里只安装针对C family和Python的补全支持。
插件
- YouCompleteMe
- YCM-Generator: 用来解决YouCompleteMe配置文件生成比较麻烦的问题。
- jedi-vim:不一定需要安装,最新版本YCM已经支持python的补全。
- vim omnicomplete: vim自带,作为YCM的补充。可以用
:help ins-completion
查看。
记得确认 Python3, Clang, CMake已经安装,vim --version
确认vim版本支持python3(输出列表里python3前有+
号)。
安装并配置YouCompleteMe和YCM-Generator
后在~/.vimrc
中vim-plug
中的插件列表中加入以下行:
- Plug ‘ycm-core/YouCompleteMe’, { ‘do’: ‘./install.py’ }
- Plug ‘rdnetto/YCM-Generator’, { ‘branch’: ‘stable’}
- 运行
:PlugInstall
安装 - 在
/.vimrc
中配置以后只要在项目根目录打开后执行快捷键 Ctrl - i 后就会自动在当前目录生成配置文件1
2
3
4
5"=========================================
" YCM-Generator 插件配置
"=========================================
" ctrl-I 自动生成 .ycm_extra_conf.py 文件
noremap <C-I> :YcmGenerateConfig -c g++ -v -x c++ -f -b make .<CR> - 参考这里配置YCM
1
2
3
4
5
6
7
8
9
10
11let g:ycm_add_preview_to_completeopt = 0
let g:ycm_show_diagnostics_ui = 0
let g:ycm_server_log_level = 'info'
let g:ycm_min_num_identifier_candidate_chars = 2
let g:ycm_collect_identifiers_from_comments_and_strings = 1
let g:ycm_complete_in_strings=1
let g:ycm_key_invoke_completion = '<c-z>'
set completeopt=menu,menuone
noremap <c-z> <NOP>
- 注意,如果遇到
ycmd server shut down
的错误,一般重新运行下YCM下的install.py
就行。 - 如果遇到
python3 missing file header
的问题,sudo apt-get install python3-dev
安装python3-dev
就行。
安装并配置jedi-vim
pip3 install jedi
git clone --recursive https://github.com/davidhalter/jedi-vim.git ~/.vim/plugged/jedi-vim
- 在
~/.vimrc
里添加Plug 'davidhalter/jedi-vim'
相关快捷键
- omnicomplete
- Ctrl-X Ctrl-L:整行补全
- Ctrl-X Ctrl-N:当前文件内关键字补全
- Ctrl-X Ctrl-i:当前文件及其头文件内的关键字
- Ctrl-X Ctrl-]:tags补全
- Ctrl-X Ctrl-F:文件名补全
- Ctrl-X Ctrl-O:全能 (omni) 补全
- jedi-vim
- leader (默认是
\
键) + d:定义跳转,包括语句和 import 模块 - leader + n:查看用法
- leader + r:重命名
- :Pyimport os:打开模块 os
- Ctrl + space:补全
- leader (默认是
语法高亮
安装vim-polyglot并打开vim的syntax的功能即可
~/.vimrc
中加入Plug 'sheerun/vim-polyglot'
~/.vimrc
中加入syntax on
缩进线
- 安装indentLine并配置
1
2
3
4Plug 'Yggdroot/indentLine'
"打开缩进线
let g:indentLine_enabled = 1
let g:indentLine_char='¦' - 设置tab转化为4个空格
1
2
3
4
5
6
7
8
9
10
11
12"将输入的TAB自动展开成空格。开启后要输入TAB,需要Ctrl-V<TAB>
set expandtab
"使用每层缩进的空格数
set shiftwidth=4
"编辑时一个TAB字符占多少个空格的位置
set tabstop=4
"方便在开启了et后使用退格(backspace)键,每次退格将删除X个空格
set softtabstop=4
" 使回格键(backspace)正常处理indent(缩进位置), eol(行结束符), start(段首), 很奇怪 Vim 默认竟然不允许在这些地方使用 backspace
set backspace=indent,eol,start
"开启时,在行首按TAB将加入 shiftwidth 个空格,否则加入 tabstop 个空格
set smarttab :IndentLinesToggle
打开缩进
语法检查
- 安装ALE
Plug 'dense-analysis/ale'
- 安装cppcheck和pylint
sudo apt install cppcheck pylint
- 配置ALE
1
2
3
4
5
6
7
8
9
10
11
12
13
14let g:ale_echo_msg_format = '[%linter%] %code: %%s'
let g:ale_linters = {
¦ ¦ \ 'cpp': ['cppcheck'],
¦ ¦ \ 'c': ['cppcheck'],
¦ ¦ \ 'python': ['pylint'],
¦ ¦ \}
" normal 模式下文字改变运行 linter
let g:ale_lint_on_text_changed = 'normal'
" 离开 insert 模式的时候运行 linter
let g:ale_lint_on_insert_leave = 1
let g:ale_c_cppcheck_options = '--enable=all'
let g:ale_cpp_cppcheck_options = '--enable=all'
let g:ale_c_gcc_options = '-Wall -O2 -std=c99'
let g:ale_cpp_gcc_options = '-Wall -O2 -std=c++11'搜索文件
- 安装FlyGrep
Plug 'wsdjeg/FlyGrep.vim'
- 映射查找快捷键为Ctrl-F
nnoremap <C-F> :FlyGrep<CR>
- 快捷键
- Ctrl+F 查找
- Esc 退出搜索
- Enter 进入选中的搜索结果
- Tab 下一个搜索结果
- Shift+Tab 上一个搜索结果
- 注意,默认FlyGrep只能搜索当前目录,如果要搜索整个project,需要切换到根目录。
源文件头文件切换
- 安装vim-projectionist
Plug 'tpope/vim-projectionist'
- 用法: TODO
符号索引
python使用jedi-vim的快捷键即可,c++使用ctags.
安装ctags
git clone https://github.com/universal-ctags/ctags.git
,也可以用这个exuberant ctags安装。- 安装依赖
1
2
3
4
5
6
7
8sudo apt install \
gcc make \
pkg-config autoconf automake \
python3-docutils \
libseccomp-dev \
libjansson-dev \
libyaml-dev \
libxml2-dev - 安装ctags
1
2
3
4$ ./autogen.sh
$ ./configure --prefix=/where/you/want # defaults to /usr/local
$ make
$ make install # may require extra privileges depending on where to install - 创建文件
~/.ctags.d/my.ctags
文件用来配置,比如可以加入配置行--output-format=e-ctags
以保持跟exuberant ctags兼容。
安装vim-gutentags
- 安装
Plug 'ludovicchabant/vim-gutentags'
- 配置
1
2
3
4
5
6
7
8
9
10
11" gutentags 搜索工程目录的标志,碰到这些文件/目录名就停止向上一级目录递归
let g:gutentags_project_root = ['.root', '.svn', '.git', '.hg', '.project']
" 所生成的数据文件的名称
let g:gutentags_ctags_tagfile = 'tags'
" 配置 ctags 的参数
let g:gutentags_ctags_extra_args = ['--fields=+niazS', '--extra=+q']
let g:gutentags_ctags_extra_args += ['--c++-kinds=+px']
let g:gutentags_ctags_extra_args += ['--c-kinds=+px']
用法
- 命令
- 命令行下
ctags -R .
或者vim中:!ctags -R .
生成tags文件,-f 参数可以指定生成文件的路径。 - CTRL-]跳转定义
- CTRL-O跳回
- CTRL-W ] 新窗口打开定义
- :ts tag 搜索tag
- :tn 跳转到下一个定义
- :tp 跳转到上一个定义
- :ts 列出所有定义
- :tf 跳转到第一个定义
- :tl 跳转到最后一个定义
- :tselect 选择跳转到哪一个
- CTRL-t 回退到上一个tag stack
- 命令行下
- 参考链接
状态栏
函数列表
- 安装LeaderF
1 | Plug 'Yggdroot/LeaderF', { 'do': './install.sh' } |
- 配置
1 | let g:Lf_ShowRelativePath = 0 |
用法
:LeaderfCommand
进入后按i
可以进入模糊匹配Ctrl-N
搜索最近打开的文件
折叠
安装SimpylFold Plug 'tmhedberg/SimpylFold'
- visual mode选中,
z-F
折叠,然后zc
关闭折叠,zo
打开折叠
文件比较
安装vim-signifyPlug 'mhinz/vim-signify'
:SignifyDiff
可以分屏对比diff
目录
- 安装vim-vinegar
Plug 'tpope/vim-vinegar'
- 使用,基本同netrw
- :Explore - opens netrw in the current window
- :Sexplore - opens netrw in a horizontal split
- :Vexplore - opens netrw in a vertical split
- 按
-
往上走,按Enter
往下走
Tips
- Vim中ALT键都留给用户了,所以多用ALT来映射快捷键
- 额外快捷键配置 https://github.com/tpope/vim-unimpaired