900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > VIM插件离线安装与配置(taglist airliner gutentags LeaderF gtags AutoComplPop omnicppcomplete fzf Rg)

VIM插件离线安装与配置(taglist airliner gutentags LeaderF gtags AutoComplPop omnicppcomplete fzf Rg)

时间:2020-10-16 02:37:33

相关推荐

VIM插件离线安装与配置(taglist airliner gutentags LeaderF gtags AutoComplPop omnicppcomplete fzf Rg)

VIM插件离线安装与配置

1.VIM 插件离线安装与配置1.1 离线包 2.vim8安装2.1.查看vim版本2.2.vim下载2.3 vim安装步骤 3. vimrc通用配置4.插件管理([vim-plug](/junegunn/vim-plug.git))4.1.插件下载4.2.插件安装步骤4.2.1 解压vim-plug-master.zip4.2.2 将下载好的plug.vim放到autoload4.2.3 在.vimrc中添加配置4.2.4 打开vim在命令行模式下输入:PluginInstall(离线的同学可以忽略,不需要管) 5.标签列表插件([taglist](/vim-scripts/taglist.vim))5.1.效果预览5.2.安装步骤5.2.1 下载5.2.2 解压安装包5.2.3 部署5.2.3 添加vimrc配置 6.快速注释插件([nerdcommenter](/preservim/nerdcommenter))6.1 效果预览6.2 安装步骤6.2.1 下载6.2.2 解压安装包6.2.3 部署6.2.4 添加vimrc配置 7. 状态栏([airline](/vim-airline/vim-airline))7.1 效果预览7.2 安装步骤7.2.1 下载7.2.2 解压安装包7.2.4 添加环境变量7.2.3 部署7.2.4 添加vimrc配置 8. 自动异步生成tags插件([gutentags](/ludovicchabant/vim-gutentags))8.1 效果预览8.2 安装步骤8.2.1 下载8.2.2 解压安装包8.2.3 部署8.2.4 添加vimrc配置 9. 异步模糊查找([LeaderF](/Yggdroot/LeaderF))9.1 效果预览9.2 安装步骤9.2.1 下载9.2.2 解压安装包9.2.3 部署9.2.4 添加vimrc配置 10. 索引跳转插件([gtags](/software/global/))10.1 效果预览10.2 安装步骤10.2.1 下载10.2.2 解压global-6.6.4.tar.gz安装包10.2.3 编译安装10.2.4 添加环境变量10.2.5 global-6.6.4部署10.2.6 添加global-6.6.4,vimrc配置10.2.7 global跳过目录或文件不扫描&跟踪10.2.8 解压gutentags_plus安装包10.2.9 gutentags_plus部署10.2.10 添加gutentags_plus,vimrc配置10.2.11 生成GPATH,GRTAGS,GTAGS三个文件过程中意外退出出现如下报错 11. c/c++ 语法高亮([cpp-enhanced-highlight](/octol/vim-cpp-enhanced-highlight))11.1 效果预览11.2 安装步骤11.2.1 下载11.2.2 解压安装包11.2.3 部署11.2.4 添加vimrc配置 12. 自动补全([AutoComplPop](/vim-scripts/AutoComplPop))12.1 效果预览12.2 安装步骤12.2.1 下载12.2.2 解压安装包12.2.3 部署 13. 结构体补全([omnicppcomplete](/scripts/script.php?script_id=1520))13.1 效果预览13.2 安装步骤13.2.1 下载13.2.2 解压安装包13.2.3 部署 13.3 添加vimrc配置 14 字符串/文件模糊查找([ripgrep](/BurntSushi/ripgrep),[fzf.vim](/junegunn/fzf.vim))14.1 效果预览14.1.1 模糊查找文件14.1.2 模糊查找字符串 14.2 安装步骤14.2.1 fzf下载14.2.2 fzf解压安装包14.2.3 fzf安装与部署14.2.4 fzf离线安装卡在`Running fzf installer ...`的问题14.2.5 ripgrep下载14.2.6 ripgrep.deb包安装与部署14.2.7 ripgrep使用 14.3 添加vimrc配置 15. 括号匹配插件([auto-pairs](/jiangmiao/auto-pairs))15.1 效果预览15.2 安装步骤15.2.1 auto-pairs下载15.2.2 auto-pairs解压15.2.3 安装与部署 15.3 添加vimrc配置 16. 自动保存([auto-save](/907th/vim-auto-save))16.1 效果预览16.2 安装步骤16.2.1 auto-save下载16.2.2 auto-save解压安装包16.2.3 部署 16.3 添加vimrc配置

1.VIM 插件离线安装与配置

看了很多vim的安装贴(这里特别感谢知乎韦易笑大部分文献都参考于他),基本都是基于github或者网络才能安装。对于一些离线安装的同学非常不友好,小白就更别说了。本贴将提供安装包和安装步骤,以及配置尽量手把手的教大家安装vim插件。本帖提供git(白嫖方式)和安装包(投币方式)安装方式

环境:Ubuntu 16.04

VIM:vim 8.x

1.1 离线包

更新于:离线全安装包1.0 包含: vim82.zipvim-plug-master.zip,异步插件管理taglist.vim.zip,标签列表插件nerdcommenter-master.zip,快速注释插件vim-airline-master.zip,状态栏插件vim-gutentags-master.zip,异步生成tags插件LeaderF-master_4991.zip,异步模糊查找插件global-6.6.4.tar.gz,gutentags_plus-master.zip,索引跳转插件vim-cpp-enhanced-highlight-master.zip,语法高亮插件AutoComplPop-master.zip,自动补全插件 更新于:离线全安装包2.0 新增: omnicppcomplete-0.41.zip,结构体补全插件ripgrep_11.0.2_amd64.deb,fzf.vim-master.zip,fzf-master.zip异步模糊查找文件,字符串插件 更新于:离线全安装包3.0 新增: vim-auto-save-master.zip, 自动保存插件auto-pairs-master.zip,括号匹配插件新增vimrc通用配置: 自动去除尾行空格和tab。搜索时默认不区分大小写,只有搜索关键字中出现一个大字母时才区分大小写。在vim中打开终端。 更新于0320: 新增: 开QuickFix窗口选择后自动关闭的方法(详情查看,3.vimrc通用配置或添加gutentags_plus,vimrc配置)。解决global(gtags)不跟踪某些目录和文件的方法(详情查看,global跳过目录或文件不扫描&跟踪)。解决异步生成GTAGS时,退出在进入报gutentags: gutentags: gtags-cscope job failed, returned: 1,导致gtags无法使用。(详情查看,生成GPATH,GRTAGS,GTAGS三个文件过程中意外退出出现如下报错)。

2.vim8安装

VIM:vim 8.x

2.1.查看vim版本

:~# vim --version

版本必须大于 vim 8.0(因为我曾经apt update过,不过我经常用的版本是8.2),小于这个版本有些插件可能不兼容,特别是如果需要安装YouCompleteMe,vim需要7.4.**(具体是几忘了)以上,并支持python2.6 or 3.4以上,索性直接安装vim8.2。离线下载方式:vim-8.2安装包,

2.2.vim下载

git下载方式:

git clone /vim/vim.git

apt方式下载:

sudo add-apt-repository ppa:jonathonf/vim sudo apt update sudo apt install vim

2.3 vim安装步骤

解压vim-plugin

cd ~ && unzip ~/vim_plugin.zipunzip ~/vim_plugin/vim_plugin.zip

解压vim82zip

unzip ~/vim_plugin/vim82.zip

解压vim-8.2.tar.bz2:

tar -jxvf vim-8.2.tar.bz2

根据自己习惯新建一个文件夹放vim82源码:

mkdir -p ~/.code_vim82

配置环境以及指定安装目录,注意这里不能用相对路径不然会报错。

cd ./vim82make distclean//python配置./configure --prefix=/home/weidonghui/.code_vim82 \--enable-pythoninterp=yes \--with-python-config-dir=/usr/lib/python2.7/config-x86_64-linux-gnu//python3配置./configure --enable-multibyte \--enable-python3interp=yes \--with-python3-config-dir=/usr/lib/python3.5/config-3.5m-x86_64-linux-gnu \--enable-perlinterp=yes \--with-python3-command=/usr/bin/python3 \--prefix=/home/weidonghui/.code_vim82

configure 其他配置可以参看:INSTALL

如果出现以下报错说明缺少ncurses库请,sudo apt-get install libncurses5-dev安装。

checking for tgetent()... configure: error: NOT FOUND!You need to install a terminal library; for example ncurses.Or specify the name of the library with --with-tlib.

这个安装包已经把决大多数依赖包对放在里面了。但是不同的环境可能依赖会不一样,请认真的查看报错,百度解决。

Python安装配置情况

if compile and link flags for Python are sane... yes出现这句话证明支持python,没有这句话,则安装出来的vim不支持python。

编译与安装

makesudo make install

这个时候其实已经可以用了可以通过~/.code_vim82/bin/vim验证

配置环境变量,我们直接vim --version发现还是自己原来的vim,这是没有配置环境变量导致的。这里给出一种解决办法。适用于非root用户和root用户。在~/.bashrc中添加vim的环境路径,注意必须添加到$PATH的前面,这样打开vim就优先找自己安装的版本。注意:关闭窗口在打开才有效

vim ~/.bashrcexport PATH="/home/weidonghui/.code_vim82/bin/:$PATH"

这个时候你会发现vi和vim打开的版本可能不一样我们可以利用软连接将vi和vim开的版本变成一致的。注意:关闭窗口在打开才有效

cd ~/.code_vim82/binln -s vim vi

3. vimrc通用配置

"通用配置syntax on " 开启语法高亮colorscheme peachpuff "vim配置方案set number " 显示行号set hls "搜索时高亮显示被找到的文本set scrolloff=3 " 上下可视行数set incsearch " 搜索时高亮显示被找到的文本set ignorecase smartcase "搜索时默认不区分大小写,只有搜索关键字中出现一个大字母时才区分大小写set enc=utf-8 "编码设置set fileencodings=ucs-bom,utf-8,cp936,gb18030,big5,euc-jp,euc-kr,latin1 "编码自动识别set mouse=n "鼠标普通模式" set cursorline "选中行出现下划线set autowriteall "可使切换文件时,修改的文件被自动保存set autoread "打开文件监视。如果在编辑过程中文件发生外部改变(比如被别的编辑器编辑了),就会发出提示。set hidden " 允许在有未保存的修改时切换缓冲区,此时的修改由 vim 负责保存map qq :qa!<CR> "多窗口不保存关闭map ww :wqa!<CR> "多窗口保存关闭"vim自动打开跳到上次的光标位置if has("autocmd")au BufReadPost * if line("'\"") > 1 && line("'\"") <= line("$") | exe "normal! g'\"" | endifendifset nocompatible "设置backspace的工作方式set backspace=indent,eol,start " 设置backspace的工作方式" 自动去除尾行空格和tab" From: Vigil <vim5632@>function RemoveTrailingWhitespace()if &ft != "diff"let b:curcol = col(".")let b:curline = line(".")"去掉每一尾行的空格和Tabsilent! %s/\s\+$//"去掉文件最后无内容的行尾" silent! %s/\(\s*\n\)\+\%$//call cursor(b:curline, b:curcol)endifendfunction" autocmd BufWritePre * call RemoveTrailingWhitespace()" TAB会被显示成 >— 而行尾多余的空白字符显示成 -map <silent> <C-L> :ter<CR> "在vim内终端set listchars=tab:>-,trail:-map <silent> <F5> :set list<CR> " 显示空格和tabmap <silent> <F6> :set list!<CR> " 取消显示空格和tabmap <silent> <F3> <leader>cq<CR> " 手动关闭QuickFix窗口autocmd FileType qf nnoremap <silent> <CR> <CR>:cclose<CR> "打开QuickFix窗口选择后自动关闭

4.插件管理(vim-plug)

4.1.插件下载

git下载方式

git clone /junegunn/vim-plug.git ~/.vim/autoload

离线的同学点这里vim-plug安装包

4.2.插件安装步骤

4.2.1 解压vim-plug-master.zip

cd ~ && unzip ~/vim_plugin.zipunzip ~/vim_plugin/vim-plug-master.zip

4.2.2 将下载好的plug.vim放到autoload

mkdir -p ~/.vim/autoloadcp -rf vim-plug-master/plug.vim ~/.vim/autoload/

4.2.3 在.vimrc中添加配置

call plug#begin('~/.vim/plugged')"plug插件管理,全异步安装,不仅支持在线安装,更支持下载好的离线包直接安装。"且安装完后,可以注释掉相关指令很方便的关闭对应插件。下面基本都是离线安装的例子"Plug 'vim-scripts/vim-gutentags'call plug#end()

4.2.4 打开vim在命令行模式下输入:PluginInstall(离线的同学可以忽略,不需要管)

5.标签列表插件(taglist)

taglist 依赖ctags。离线的同学搜一下自行安装。

sudo apt-get install ctags

5.1.效果预览

优点可以在列表中看到函数定义,函数声明,全局变量,宏定义。可以通过鼠标或者ctrl +ww跳转到Tlist列表选择函数跳转到该函数定义。

5.2.安装步骤

5.2.1 下载

git下载方式

git clone /vim-scripts/taglist.vim

安装包方式(taglist安装包)

5.2.2 解压安装包

cd ~ && unzip ~/vim_plugin.zipcd ~/.vim/pluggedunzip ~/vim_plugin/taglist.vim.zip

5.2.3 部署

打开.vimrc添加以下指令

call plug#begin('~/.vim/plugged')Plug 'vim-scripts/taglist.vim' "Tlist标签列表插件call plug#end()

5.2.3 添加vimrc配置

"Tlist插件配置let Tlist_Show_One_File = 1 " 只显示当前文件的tags"let Tlist_Auto_Open = 1 " 打开vim自动打开Tlist"let Tlist_GainFocus_On_ToggleOpen = 1 " 打开Tlist窗口时,光标跳到list窗口let Tlist_Exit_OnlyWindow = 1 " 如果Tlist窗口是最后一个窗口则退出Vimlet Tlist_Use_Left_Window = 1 " 在左侧窗口中显示let Tlist_File_Fold_Auto_Close = 1 " 自动折叠let Tlist_Auto_Update = 1 " 自动更新" <F4> 打开 Tlist 窗口,在左侧栏显示map <F4> :TlistToggle<CR>

6.快速注释插件(nerdcommenter)

.c,Makefile,vimrc等都有效

6.1 效果预览

6.2 安装步骤

6.2.1 下载

git下载方式

git clone /preservim/nerdcommenter

(nerdcommenter)安装包下载

6.2.2 解压安装包

cd ~ && unzip ~/vim_plugin.zipcd ~/.vim/pluggedunzip ~/vim_plugin/nerdcommenter-master.zip

6.2.3 部署

打开.vimrc添加以下指令

call plug#begin('~/.vim/plugged')Plug 'vim-scripts/nerdcommenter-master' "nerdcommenter快速注释插件call plug#end()

6.2.4 添加vimrc配置

"nerdcommenter插件快速注释let g:NERDSpaceDelims = 1" 在注释符号后加一个空格let g:NERDCompactSexyComs = 1" 紧凑排布多行注释let g:NERDDefaultAlign = 'left' " 逐行注释左对齐let g:NERDAltDelims_java = 1" JAVA 语言使用默认的注释符号let g:NERDCustomDelimiters = {'c': {'left': '/*', 'right': '*/'}} " C 语言注释符号let g:NERDCommentEmptyLines= 1" 允许空行注释let g:NERDTrimTrailingWhitespace = 1" 取消注释时删除行尾空格let g:NERDToggleCheckAllLines = 1" 检查选中的行操作是否成功map <F12> <plug>NERDCommenterSexy " 选中注释map <c-F12> <plug>NERDCommenterUncomment " 选中取消注释

7. 状态栏(airline)

显示当前文件名及路径,总行数,当前光标行数等多文件间切换

7.1 效果预览

文件切换注意看上半部分

7.2 安装步骤

7.2.1 下载

git下载方式

git clone /vim-airline/vim-airline.git

(airline)安装包下载

7.2.2 解压安装包

cd ~ && unzip ~/vim_plugin.zipcd ~/.vim/pluggedunzip ~/vim_plugin/vim-airline-master.zip

7.2.4 添加环境变量

export TERM=xterm-256color

7.2.3 部署

打开.vimrc添加以下指令

call plug#begin('~/.vim/plugged')Plug 'vim-scripts/vim-airline-master' "airline状态栏call plug#end()

7.2.4 添加vimrc配置

"airline状态栏配置"这个是安装字体后 必须设置此项"let g:airline_powerline_fonts = 1"打开tabline功能,方便查看Buffer和切换,省去了minibufexpl插件let g:airline#extensions#tabline#enabled = 1let g:airline#extensions#tabline#buffer_nr_show = 1let g:airline#extensions#tabline#formatter = 'unique_tail'" " 关闭状态显示空白符号计数let g:airline#extensions#whitespace#enabled = 0let g:airline#extensions#whitespace#symbol = '!'" " 设置consolas字体"前面已经设置过" " set guifont=Consolas\ for\ Powerline\ FixedD:h11if !exists('g:airline_symbols')let g:airline_symbols = {}endif"" " unicode symbolslet g:airline_left_sep = '▶'let g:airline_right_sep = '◀'let g:airline_symbols.crypt = '🔒'let g:airline_symbols.linenr = '¶'let g:airline_symbols.maxlinenr = '☰'let g:airline_symbols.branch = '⎇'let g:airline_symbols.paste = '∥'let g:airline_symbols.spell = 'Ꞩ'let g:airline_symbols.notexists = '∄'let g:airline_symbols.whitespace = 'Ξ'"设置切换Buffer快捷键"map <c-Left> :bp<CR> " 切换到上一个map <c-Right> :bn<CR> " 切换到下一个map <F2> :bd<CR> " 关闭当前窗口map 11 :b1<CR>" 切换到编号1map 22 :b2<CR>" 切换到编号2map 33 :b3<CR>" 切换到编号3map 44 :b4<CR>" 切换到编号4map 55 :b5<CR>" 切换到编号5map 66 :b6<CR>" 切换到编号6map 77 :b7<CR>" 切换到编号7map 88 :b8<CR>" 切换到编号8map 99 :b9<CR>" 切换到编号9map 00 :b10<CR> " 切换到编号10

8. 自动异步生成tags插件(gutentags)

gutentags自动异步生成tags,并管理在~/.cache目录下不污染当前目录依赖vim8和ctags

8.1 效果预览

进行tags跳转时不需要手动生成tags,在阅读linux源码时有很大帮助。可以看到当前目录下没有tags,而是异步生成在~/.cache目录下

8.2 安装步骤

8.2.1 下载

git下载方式

git clone /ludovicchabant/vim-gutentags.git

gutentags安装包下载

8.2.2 解压安装包

cd ~ && unzip ~/vim_plugin.zipcd ~/.vim/pluggedunzip ~/vim_plugin/vim-gutentags-master.zip

8.2.3 部署

打开.vimrc添加以下指令

call plug#begin('~/.vim/plugged')Plug 'vim-scripts/vim-gutentags-master' "gutentags异步tags插件call plug#end()

8.2.4 添加vimrc配置

ctags --vesrion查看自己的ctags版本

" " 配置 ctags 的参数 "map <c-]> g<c-]> "ctags跳转不自动选择" gutentags 搜索工程目录的标志,当前文件路径向上递归直到碰到这些文件/目录名let g:gutentags_project_root = ['.root', '.svn', '.git', '.hg', '.project']" 所生成的数据文件的名称let g:gutentags_ctags_tagfile = '.tags'" 同时开启 ctags 和 gtags 支持:let g:gutentags_modules = []if executable('ctags')let g:gutentags_modules += ['ctags']endifif executable('gtags-cscope') && executable('gtags')let g:gutentags_modules += ['gtags_cscope']endif" 将自动生成的 ctags/gtags 文件全部放入 ~/.cache/tags目录中,避免污染工程目录let g:gutentags_cache_dir = expand('~/.cache/tags')" 配置 ctags 的参数,老的 Exuberant-ctags 不能有--extra=+q,注意let g:gutentags_ctags_extra_args = ['--fields=+niazS']let g:gutentags_ctags_extra_args += ['--c++-kinds=+px']let g:gutentags_ctags_extra_args += ['--c-kinds=+px']" 如果使用 universal ctags 需要增加下面一行,老的Exuberant-ctags 不能加下一行"let g:gutentags_ctags_extra_args += ['--output-format=e-ctags']" 禁用 gutentags 自动加载 gtags 数据库的行为let g:gutentags_auto_add_gtags_cscope = 0

9. 异步模糊查找(LeaderF)

本人已弃用,使用fzf(第14章)代替,坚持用leaderF可以继续部署。LeaderF参考链接

9.1 效果预览

异步快速搜索文件

异步快速搜索函数,变量,宏(内存要够不然会卡)

9.2 安装步骤

9.2.1 下载

git下载方式

git clone /Yggdroot/LeaderF.git

(LeaderF)安装包下载

9.2.2 解压安装包

cd ~ && unzip ~/vim_plugin.zipcd ~/.vim/pluggedunzip ~/vim_plugin/LeaderF-master_4991.zip

9.2.3 部署

打开.vimrc添加以下指令

call plug#begin('~/.vim/plugged')Plug 'vim-scripts/LeaderF-master' "LeaderF模糊查找插件call plug#end()

9.2.4 添加vimrc配置

"LeaderF 模糊文件查找配置let g:Lf_ShortcutF = '<c-p>' " 文件快速搜索" 函数,宏,变量快速搜索noremap <c-f> :LeaderfTag<cr>let g:Lf_StlSeparator = {'left': '', 'right': '', 'font': '' }let g:Lf_RootMarkers = ['.project', '.root', '.svn', '.git']let g:Lf_WorkingDirectoryMode = 'Ac'let g:Lf_WindowHeight = 0.30let g:Lf_CacheDirectory = expand('~/.vim/cache')let g:Lf_ShowRelativePath = 0let g:Lf_HideHelp = 1let g:Lf_StlColorscheme = 'powerline'let g:Lf_PreviewResult = {'Function':0, 'BufTag':0}

10. 索引跳转插件(gtags)

gtags参数链接配合vim-gutentags,vim-gutentags_plus插件,LeaderF插件

10.1 效果预览

10.2 安装步骤

10.2.1 下载

需要下gtags,vim-gutentags

/pub/gnu/global/global-6.6.4.tar.gzgit clone /skywind3000/gutentags_plus.git

gtags-6.6.4安装包,gutentags_plus安装包

10.2.2 解压global-6.6.4.tar.gz安装包

cd ~ && unzip ~/vim_plugin.zipcd ~/.vim/pluggedtar -xf ~/vim_plugin/global-6.6.4.tar.gz

10.2.3 编译安装

./configure --with-sqlite3 --prefix=/home/weidonghui/.gtags_code# gtags可以使用Sqlite3作为数据库, 在编译时需要加这个参数# 将global安装到指定路径,必须是绝对路径make -jsudo make install

10.2.4 添加环境变量

vim ~/.bashrcexport PATH="/home/weidonghui/.gtags_code/bin:/home/weidonghui/.gtags_code/lib/gtags:/home/weidonghui/.gtags_code/share/gtags:/home/weidonghui/.gtags_code/share/info:$PATH"

关闭窗口在打开新窗口

virtual-machine:~$ global --versionglobal (GNU GLOBAL) 6.6.4Powered by Berkeley DB 1.85 and SQLite3 3.8.7.1.Copyright (c) 1996- Tama Communications CorporationLicense GPLv3+: GNU GPL version 3 or later </licenses/gpl.html>This is free software; you are free to change and redistribute it.There is NO WARRANTY, to the extent permitted by law.virtual-machine:~$

10.2.5 global-6.6.4部署

在global-6.6.4新建一个plugin目录,将*.vim,copy到plugin

mkdir -p ~/.vim/plugged/global-6.6.4/plugincd ~/.vim/plugged/global-6.6.4cp -rf *.vim plugin/

打开.vimrc添加以下指令

call plug#begin('~/.vim/plugged')Plug 'vim-scripts/global-6.6.4' "gtags引用跳转call plug#end()

10.2.6 添加global-6.6.4,vimrc配置

这是Gtags,配合LeaderF进行LeaderF gtags参考链接

let g:Lf_GtagsAutoGenerate = 1let g:Lf_Gtagslabel = 'native-pygments'" let g:Lf_Gtagsconf = '/usr/local/share/gtags/gtags.conf'let g:Lf_Gtagsconf = '/home/weidonghui/.gtags_code/share/gtags/gtags.conf'noremap <leader>fr :<C-U><C-R>=printf("Leaderf! gtags -r %s --auto-jump", expand("<cword>"))<CR><CR>noremap <leader>fd :<C-U><C-R>=printf("Leaderf! gtags -d %s --auto-jump", expand("<cword>"))<CR><CR>noremap <leader>fo :<C-U><C-R>=printf("Leaderf! gtags --recall %s", "")<CR><CR>noremap <leader>fn :<C-U><C-R>=printf("Leaderf gtags --next %s", "")<CR><CR>noremap <leader>fp :<C-U><C-R>=printf("Leaderf gtags --previous %s", "")<CR><CR>

10.2.7 global跳过目录或文件不扫描&跟踪

linux环境中有各种各样的问题,导致一些文件无法跟踪一直报错,致使global无法生成GPATH,GRTAGS,GTAGS三个文件。而从gtags --help中并没有提供好的办法使其跳过某些文件或者目录。

weidh@xxx:~$ gtags --helpUsage: gtags [-ciIOqvw][-d tag-file][-f file][dbpath]Options:--accept-dotfilesAccept files and directories whose names begin with a dot.By default, gtags ignores them.-c, --compactMake GTAGS in compact format.This option does not influence GRTAGS,because that is always made in compact format.--config[=name]Print the value of config variable name.If name is not specified then print all names and values.In addition to the variables listed in the ENVIRONMENT section,you can refer to install directories by read only variables:bindir, libdir, datadir, localstatedir and sysconfdir.-d, --dump tag-fileDump a tag file as text to the standard output.Output format is 'key<tab>data'. This is for debugging.--explainExplain handling files.-f, --file fileGive a list of candidates of target files.Files which are not on the list are ignored.The argument file can be set to - to accept a list offiles from the standard input.File names must be separated by newline.To make the list you may use find(1), which has rich optionsfor selecting files.--gtagsconf fileSet environment variable GTAGSCONF to file.--gtagslabel labelSet environment variable GTAGSLABEL to label.-I, --idutilsIn addition to tag files, make ID database for idutils(1).-i, --incrementalUpdate tag files incrementally.It's better to use global(1) with the -u command.-O, --objdirUse BSD-style obj directory as the location of tag files.If GTAGSOBJDIRPREFIX is set and $GTAGSOBJDIRPREFIX directory exists,gtags creates $GTAGSOBJDIRPREFIX/<current directory> directoryand makes tag files in it.Though you can use MAKEOBJDIRPREFIX instead of GTAGSOBJDIRPREFIX,it is deprecated.If dbpath is specified, this option is ignored.--single-update fileUpdate tag files for a single file.It is considered that file was added, updated or deleted,and there is no change in other files.This option implies the -i option.--skip-unreadableSkip unreadable files.--skip-symlink [=type]Skip symbolic links. If type is 'f' then skip only symbolic links forfile, else if 'd' then skip only symbolic links for directory.The default value of type is 'a' (all symbolic links).--sqlite3Use Sqlite 3 API to make tag files. By default, BSD/DB 1.85 API is used.To use this option, you need to invoke configure script with--with-sqlite3 in the build phase.--statisticsPrint statistics information.-q, --quietQuiet mode.-v, --verboseVerbose mode.-w, --warningPrint warning messages.dbpathThe directory in which tag files are generated.The default is the current directory.See also:GNU GLOBAL web site: /software/global/weidh@xxx:~$

还好我们有global的源码可以去修改它,下面是我跳过"busybox-", “centos”, “debian”, "ubuntu"为关键词的目录的修改,仅做参考。注意:修改后需要重新编译

weidh@xxxx:~/.vim/plugged/global-6.6.4$ git diff libutil/find.cdiff --git a/libutil/find.c b/libutil/find.cindex 69ccbb0..c0d516f 100644--- a/libutil/find.c+++ b/libutil/find.c@@ -851,6 +851,9 @@ find_read_filelist(void)**@return path*/++char skip_dir_list[][32] = {"busybox-", "centos", "debian", "ubuntu"};+static char *find_read_traverse(void){@@ -860,6 +863,7 @@ find_read_traverse(void)for (;;) {while (curp->p < curp->end) {+skip_dir:char type = *(curp->p);const char *unit = curp->p + 1;@@ -872,6 +876,12 @@ find_read_traverse(void)strlimcpy(path, makepath(dir, unit, NULL), sizeof(path));if (type == 'd')strcat(path, "/");+ for (int i = 0; i < sizeof(skip_dir_list)/sizeof(skip_dir_list[0]); i++) {+ if (strstr(path, skip_dir_list[i]) != NULL) {+ warning("'%s' is a directory. skip.", trimpath(path));+ goto skip_dir;+ }+ }if (skipthisfile(path))continue;if (type == 'f') {weidh@xxxx:~/.vim/plugged/global-6.6.4$

10.2.8 解压gutentags_plus安装包

cd ~ && unzip ~/vim_plugin.zipcd ~/.vim/pluggedunzip ~/vim_plugin/gutentags_plus-master.zip

10.2.9 gutentags_plus部署

打开.vimrc添加以下指令

call plug#begin('~/.vim/plugged')Plug 'vim-scripts/gutentags_plus-master' "gutentags_plus异步ctags插件call plug#end()

10.2.10 添加gutentags_plus,vimrc配置

"启用gtags模块let g:gutentags_modules = ['ctags', 'gtags_cscope']"配置项目根标记。let g:gutentags_project_root = ['.root']"在我的缓存目录中生成日期数据库,防止gtags文件污染我的项目let g:gutentags_cache_dir = expand('~/.cache/tags')"搜索后将焦点更改为quickfix窗口(可选)。let g:gutentags_plus_switch = 1map <F3> :cclose<CR> "关闭quickfix窗口autocmd FileType qf nnoremap <silent> <CR> <CR>:cclose<CR> "打开QuickFix窗口选择后自动关闭"在vim内终端

10.2.11 生成GPATH,GRTAGS,GTAGS三个文件过程中意外退出出现如下报错

gutentags: gutentags: gtags-cscope job failed, returned: 1

可以直接删除对应的tag目录,如下:

rm -rf ~/.cache/tags/home-weidh-*

也可以添加自动删除代码,自动删除,之后重新触发保存即可。

weidh@xxx:~/.vim/plugged/vim-gutentags-master$ git diffdiff --git a/autoload/gutentags/gtags_cscope.vim b/autoload/gutentags/gtags_cscope.vimindex 1131066..f4864f6 100644--- a/autoload/gutentags/gtags_cscope.vim+++ b/autoload/gutentags/gtags_cscope.vim@@ -88,7 +88,7 @@ function! gutentags#gtags_cscope#generate(proj_dir, tags_file, gen_opts) abortlet l:proj_options = readfile(l:proj_options_file)let l:cmd += l:proj_optionsendif- let l:cmd += ['--incremental', '"'.l:db_path.'"']+ let l:cmd += ['--skip-unreadable', '-q', '--incremental', '"'.l:db_path.'"']let l:cmd = gutentags#make_args(l:cmd)call gutentags#trace("Running:gtags_cscope.vim: " . string(l:cmd))@@ -113,6 +113,7 @@ function! gutentags#gtags_cscope#on_job_exit(job, exit_val) abortendifif a:exit_val != 0 && !g:__gutentags_vim_is_leaving+ execute '!rm -rf ' . string(l:dbfile_path)call gutentags#warning(\"gtags-cscope job failed, returned: ".\string(a:exit_val))weidh@xxx:~/.vim/plugged/vim-gutentags-master$

'--skip-unreadable', '-q'为gtags参数,用户可以根据需要添加,详情可参看gtags --help。

11. c/c++ 语法高亮(cpp-enhanced-highlight)

11.1 效果预览

11.2 安装步骤

11.2.1 下载

git下载方式

git clone /octol/vim-cpp-enhanced-highlight.git

(vim-cpp-enhanced-highlight)安装包下载

11.2.2 解压安装包

cd ~ && unzip ~/vim_plugin.zipcd ~/.vim/pluggedunzip ~/vim_plugin/vim-cpp-enhanced-highlight-master.zip

11.2.3 部署

打开.vimrc添加以下指令

call plug#begin('~/.vim/plugged')Plug 'vim-scripts/vim-cpp-enhanced-highlight-master' "c/c++ 语法高亮call plug#end()

11.2.4 添加vimrc配置

" cpp-enhanced-highlight c/c++ 语法高亮配置" 默认情况下,不突出显示类范围。启用设置let g:cpp_class_scope_highlight = 1" 默认情况下,成员变量突出显示为禁用状态。启用设置let g:cpp_member_variable_highlight = 1" 默认情况下,在声明中高亮显示类名。启用设置let g:cpp_class_decl_highlight = 1" POSIX功能的突出显示默认情况下处于禁用状态。启用设置let g:cpp_posix_standard = 1" 有两种突出显示模板功能的方法。要么let g:cpp_experimental_simple_template_highlight = 1" 在大多数情况下都可以使用,但是在大文件上可能会有点慢。替代设置let g:cpp_experimental_template_highlight = 1" 这是一个较快的实现,但是在某些极端情况下它不起作用。" 注意:众所周知,C ++模板语法很难解析,因此不要指望此功能是完美的。" 库概念的突出显示由let g:cpp_concepts_highlight = 1" 这将突出显示关键字的概念,要求以及标准库中的所有命名要求(例如DefaultConstructible)" 可以通过以下方式禁用突出显示用户定义的功能let g:cpp_no_function_highlight = 1

12. 自动补全(AutoComplPop)

vim的自动补全有很多种强大入YouCompleteMe不过在离线状态下比较难安装目前还在研究目前找到一个替代品AutoComplPop效果也不错,安装方便效果也不错。

12.1 效果预览

12.2 安装步骤

12.2.1 下载

git下载方式

git clone /vim-scripts/AutoComplPop.git

(AutoComplPop-master)安装包下载

12.2.2 解压安装包

cd ~ && unzip ~/vim_plugin.zipcd ~/.vim/pluggedunzip ~/vim_plugin/AutoComplPop-master.zip

12.2.3 部署

打开.vimrc添加以下指令

call plug#begin('~/.vim/plugged')Plug 'vim-scripts/AutoComplPop-master' "查字典补全call plug#end()

13. 结构体补全(omnicppcomplete)

这个需要依赖ctags

13.1 效果预览

omnicppcomplete可以配合AutoComplPop,AutoComplPop不能再输入“::”“->”“.”进行补全,而omnicppcomplete可以达到这个目的。

13.2 安装步骤

13.2.1 下载

下载方式

/scripts/script.php?script_id=1520

(omnicppcomplete)安装包下载

13.2.2 解压安装包

cd ~ && unzip ~/vim_plugin.zipcd ~/.vim/pluggedunzip ~/vim_plugin/omnicppcomplete-0.41.zip

13.2.3 部署

打开.vimrc添加以下指令

call plug#begin('~/.vim/plugged')Plug 'vim-scripts/omnicppcomplete-0.41' "全能补全call plug#end()

13.3 添加vimrc配置

使用omnicppcomplete前使用,需要设置set tags,如果使用gutentags自动生成tags,只需要set tags+=g:gutentags_cache_dir即可,如果没有使用自动生成tags,则需要手动添加tags绝对路径。使用gutentags自动生成tags时,需要在vimrc加以下配置

let g:gutentags_ctags_extra_args = ['--fields=+niazS']let g:gutentags_ctags_extra_args += ['--c++-kinds=+px']let g:gutentags_ctags_extra_args += ['--extra=+q']

手动生成tags时,需要带以下参数:ctags -R . --c++-kinds=+p --fields=+iaS --extra=+q

--c++-kinds=+p: 为标签添加函数原型(prototype)信息 。

--fields=+iaS: 为标签添加继承信息(inheritance),访问控制(access)信息,函数特征(function Signature,如参数表或原型等) 。

--extra=+q: 为类成员标签添加类标识。

"-- omnicppcomplete setting --" 按下F7自动补全代码,注意该映射语句后不能有其他字符,包括tab;否则按下F3会自动补全一些乱码" imap <F7> <C-X><C-O>"按下F8根据头文件内关键字补全" imap <F8> <C-X><C-I>set tags+=g:gutentags_cache_dir "添加ctags绝对路径set completeopt=menu,menuone " 关掉智能补全时的预览窗口let OmniCpp_MayCompleteDot = 1 " autocomplete with .let OmniCpp_MayCompleteArrow = 1 " autocomplete with ->let OmniCpp_MayCompleteScope = 1 " autocomplete with ::let OmniCpp_SelectFirstItem = 2 " select first item (but don't insert)let OmniCpp_NamespaceSearch = 2 " search namespaces in this and included fileslet OmniCpp_ShowPrototypeInAbbr = 1 " show function prototype in popup windowlet OmniCpp_GlobalScopeSearch=1 " enable the global scope searchlet OmniCpp_DisplayMode=1 " Class scope completion mode: always show all members"let OmniCpp_DefaultNamespaces=["std"]let OmniCpp_ShowScopeInAbbr=1 " show scope in abbreviation and remove the last columnlet OmniCpp_ShowAccess=1

14 字符串/文件模糊查找(ripgrep,fzf.vim)

fzf.vim覆盖了LeaderF的功能,而且更强大,响应速度更快比vim-clap慢但是不是百万千万级别的文件查找几乎看不出差距。但是vim-clap需要依赖rust(离线状态下把rust及其依赖搭建起来,对我来说几乎做不到)才能发挥其真正的优势。(默认使用vimscript解析)响应的速度实在拉胯,有时候我甚至觉得是电脑卡了。rust环境搭建就不说了。我甚至把最重要的二进制文件maple都编译出来了。看下图:

然而依然不能使用。搞了一天决定放弃,有哪位大神安装成功了,请指教。我先转战fzf.vim

14.1 效果预览

14.1.1 模糊查找文件

左下框为待选框,右下框为预览框,在字符串搜索的时候将更明显。

14.1.2 模糊查找字符串

14.2 安装步骤

14.2.1 fzf下载

下载方式,注意两个都有下载

/junegunn/fzf/junegunn/fzf.vim

(fzf-vim)安装包下载

14.2.2 fzf解压安装包

cd ~ && unzip ~/vim_plugin.zipcd ~/.vim/pluggedunzip ~/vim_plugin/fzf-master.zipunzip ~/vim_plugin/fzf.vim-master.zip

14.2.3 fzf安装与部署

打开.vimrc添加以下指令

call plug#begin('~/.vim/plugged')"异步安装Plug 'vim-scripts/fzf-master', {'do': {-> fzf#install() } }"fzf异步模糊查找插件Plug 'vim-scripts/fzf.vim-master'call plug#end()

14.2.4 fzf离线安装卡在Running fzf installer ...的问题

plug是异步安装的我们进入vim,输入命令行模式:Files就会跳出以下对话,进行安装。

此时联网的同学会很快的过去,但是离线的同学就会发现一直卡在这Running fzf installer ...,当然使用的我的离线包的同学是不会卡在这的。这里主要针对的是那些白嫖加离线同学,顺便也是为了记录当时怎么解决这个问题的。原因是fzf需要下载一个二进制包,这个二进制包是根据系统来选择的比如的我的电脑是Ubuntu64位就会去下载对应的二进制包。

首先我们要明确既然是下载文件Ubuntu在线下载命令常用的几个要知道wget,url。我们进入fzf的源码找到install打开,搜索一下wgeturl就可以看以下代码。

在尝试去找一下try_wget()调用的地方

这里我们很容易的发现其实$url就是需要下载的文件。我们可以根据try_wget()可以看出将要下载的文件包可能是tgz

zip格式的。预期自己将要下哪种格式的文件包我们可以看180~202的代码。对于Ubuntu64位系统下的是187行的文件包。这里不考虑zip格式的情况。

此时我们要知道的就是两点,1.知道下载的路径2.下载下来的文件包要放哪。我们需要在代码里加两句打印确认以上两点。

运行install就得到以下信息。

我们只需要将/junegunn/fzf-bin/releases/download/0.22.0/fzf-0.22.0-linux_amd64.tgz复制出来贴到浏览器上即可下载(由于是外网,下不了的同学请自行解决),然后将文件包放到/home/wdh/.vim/plugged/fzf-master/bin

搞定完上一步之后再次运行install还是会进入下载。这个时候就需要对install进行一些改写了。

download() {echo "Downloading bin/fzf ..."if [[ ! "$version" =~ alpha ]]; thenif [ -x "$fzf_base"/bin/fzf ]; thenecho " - Already exists"check_binary && returnfilink_fzf_in_path && returnfimkdir -p "$fzf_base"/bin && cd "$fzf_base"/binif [ $? -ne 0 ]; thenbinary_error="Failed to create bin directory"returnfiecho "download_dir:$fzf_base/bin"if [ ! -f $fzf_base/bin/$1 ]; thenlocal url[[ "$version" =~ alpha ]] &&url=/junegunn/fzf-bin/releases/download/alpha/${1} ||url=/junegunn/fzf-bin/releases/download/$version/${1}set -o pipefailecho "url:$url"if ! (try_curl $url || try_wget $url); thenset +o pipefailbinary_error="Failed to download with curl and wget"returnfiset +o pipefailelsetar -xzf $1fiif [ ! -f fzf ]; thenbinary_error="Failed to download ${1}"returnfichmod +x fzf && check_binary}

退出在运行一次install就可以使用啦。

进入vim在输入一次:Files

打开~/.fzf.bash添加如下配置

export FZF_CTRL_T_OPTS="--preview '(highlight -O ansi -l {} 2> /dev/null || cat {} || tree -C {}) 2> /dev/null | head -200'"

就可以使用Ctrl + t时打开预览框

如果想输入Ctrl + t选中需要的文件后用vi打开可以修改~/.vim/plugged/fzf-master/shell/key-bindings.bash配置实现:

将:printf '%q' "$item"修改成:printf 'vi %q' "$item"

14.2.5 ripgrep下载

此时已经可以使用模糊查找文件但是模糊查找字符串还需要依赖ripgrep才可以使用,也可以使用其他的如Ag,ack等搜索引擎(其实Ubuntu自带的grep也可以用,就是大工程的搜索时比较卡)。这里放出这些搜索引擎的速度对比。

不装ripgrep的可以直接跳到vimrc配置那里把Ubuntu自带的grep配置用起来,也可以使用。

sudo apt-get install ripgrep

14.2.6 ripgrep.deb包安装与部署

sudo dpkg -i ripgrep_11.0.2_amd64.deb

14.2.7 ripgrep使用

ripgrep是vim字符串查找中速度最快的。可以配合.gitignore略过不需要查找的文件详细使用请看看README。使用rg查找字符串试试。

14.3 添加vimrc配置

fzf支持多种grep,下面是rg的配置

"调用Rg进行搜索,包含隐藏文件command! -bang -nargs=* Rg\ call fzf#vim#grep(\ 'rg --column --line-number --no-heading --color=always --smart-case --hidden '.shellescape(<q-args>), 1,\ <bang>0 ? fzf#vim#with_preview('up:60%')\ : fzf#vim#with_preview('right:50%'),\ <bang>0)"模糊查找文件map <C-P> :Files<CR>"模糊查找字符串map <C-F> :Rg<CR>

使用git的同学可以试试git grep

command! -bang -nargs=* GGrep\ call fzf#vim#grep(\ 'git grep --line-number '.shellescape(<q-args>), 0,\ <bang>0 ? fzf#vim#with_preview('up:60%')\ : fzf#vim#with_preview('right:50%'),\ <bang>0)"模糊查找文件map <C-P> :GFiles<CR>" 模糊查找字符串map <C-F> :GGrep<CR>

用ubuntu自带的grep

command! -bang -nargs=* Grg\ call fzf#vim#grep(\ 'grep -nri --exclude=tags '.shellescape(<q-args>), 1,\ <bang>0 ? fzf#vim#with_preview('up:60%')\ : fzf#vim#with_preview('right:50%'),\ <bang>0)"模糊查找文件map <C-P> :Files<CR>"模糊查找字符串map <C-F> :Grg<CR>

15. 括号匹配插件(auto-pairs)

该插件在输入/删除左括号时,能自动补上/删除右括号。

15.1 效果预览

15.2 安装步骤

15.2.1 auto-pairs下载

/jiangmiao/auto-pairs

15.2.2 auto-pairs解压

cd ~ && unzip ~/vim_plugin.zipcd ~/.vim/pluggedunzip ~/vim_plugin/auto-pairs-master.zip

15.2.3 安装与部署

call plug#begin('~/.vim/plugged')"括号匹配插件Plug 'vim-scripts/auto-pairs-master'call plug#end()

15.3 添加vimrc配置

根据自己的情况选择,我的配置一个都不开用默认的就好。

" 设置要自动配对的符号" let g:AutoPairs = {'(':')', '[':']', '{':'}',"'":"'",'"':'"'} " 添加要自动配对的符号<>" let g:AutoPairs['<']='>' " 设置要自动配对的符号,默认为g:AutoPairs,可以通过自动命令来对不同文件类型设置不同自动匹配对符号。" let b:AutoPairs = g:AutoParis" 设置插件打开/关闭的快捷键,默认为ALT+p。" let g:AutoPairsShortcutToggle = '<M-p>'" 设置自动为文本添加圆括号的快捷键,默认为ALT+e。" let g:AutoPairsShortcutFastWrap = '<M-e>'" 设置调到下一层括号对的快捷键,默认为ALT+n。" let g:AutoPairsShortcutJump = '<M-n>'" 设置撤销飞行模式的快捷键,默认为ALT+b。" let g:AutoPairsShortcutBackInsert = '<M-b>'" 把BACKSPACE键映射为删除括号对和引号,默认为1。" let g:AutoPairsMapBS = 1" 把ctrl+h键映射为删除括号对和引号,默认为1。" let g:AutoPairsMapCh = 1" 把ENTER键映射为换行并缩进,默认为1。" let g:AutoPairsMapCR = 1" 当g:AutoPairsMapCR为1时,且文本位于窗口底部时,自动移到窗口中间。" let g:AutoPairsCenterLine = 1" 把SPACE键映射为在括号两侧添加空格,默认为1。" let g:AutoPairsMapSpace = 1" 启用飞行模式,默认为0。" let g:AutoPairsFlyMode = 0" 启用跳出多行括号对,默认为1,为0则只能跳出同一行的括号。let g:AutoPairsMultilineClose = 1

16. 自动保存(auto-save)

我是个比较懒的人。不喜欢按:w但又喜欢没事保存的人,切来切去真的很烦。在用vscode的时候发现vscode可以设置没有操作的后的一段时间自动保存。于是我发现了auto-save。

16.1 效果预览

下图可以看出在插入状态下,在输入停止了一段时间后(这里我设置为5秒)左上框的蓝色变成了黄色,+号也消失了。

16.2 安装步骤

16.2.1 auto-save下载

/907th/vim-auto-save.git

16.2.2 auto-save解压安装包

cd ~ && unzip ~/vim_plugin.zipcd ~/.vim/pluggedunzip ~/vim_plugin/vim-auto-save-master.zip

16.2.3 部署

打开.vimrc添加以下指令

call plug#begin('~/.vim/plugged')Plug 'vim-scripts/vim-auto-save-master' "自动保存插件call plug#end()

16.3 添加vimrc配置

" auto-save配置" TextChangedI:在插入模式下对当前缓冲区中的文本进行更改后,TextChangedI将保存。" CursorHold:在正常模式下,CursorHold将保存updatetime选项中定义的每毫秒量。" CursorHoldI:CursorHoldI将在插入模式下执行相同的操作。" CompleteDone:在每个完成事件之后,CompleteDone也将触发保存。let g:auto_save = 1" 开启自动保存let g:auto_save_silent = 1 " 不显示命令let g:auto_save_events = ["CursorHold", "CursorHoldI"] " 添加自动保存触发的事件set updatetime=5000 " 配合CursorHold, CursorHoldI。5000ms后自动保存

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。