"====================================================================== " " init-plugins.vim " " Created by skywind on 2018/05/31 " Last Modified: 2018/06/10 23:11 " "====================================================================== " vim: set ts=4 sw=4 tw=78 noet : call plug#begin('~/.vim/plugged') """""""""""""""""""""""""""""" " => Set statusline """""""""""""""""""""""""""""" Plug 'itchyny/lightline.vim' let g:lightline = { 'colorscheme': 'wombat' } """""""""""""""""""""""""""""" " => MRU plugin """""""""""""""""""""""""""""" Plug 'yegappan/mru' let MRU_Max_Entries = 400 nnoremap f :MRU """""""""""""""""""""""""""""" " => Goyo for focus """""""""""""""""""""""""""""" Plug 'junegunn/goyo.vim' nnoremap z :Goyo let g:goyo_width = 80 let g:goyo_height = "85%" let g:goyo_linenr = 0 function! s:goyo_enter() let b:quitting = 0 let b:quitting_bang = 0 autocmd QuitPre let b:quitting = 1 cabbrev q! let b:quitting_bang = 1 q! endfunction function! s:goyo_leave() " Quit Vim if this is the only remaining buffer if b:quitting && len(filter(range(1, bufnr('$')), 'buflisted(v:val)')) == 1 if b:quitting_bang qa! else qa endif endif endfunction autocmd! User GoyoEnter call goyo_enter() autocmd! User GoyoLeave call goyo_leave() """""""""""""""""""""""""""""" " => bufExplorer plugin """""""""""""""""""""""""""""" Plug 'jlanzarotta/bufexplorer' let g:bufExplorerDefaultHelp=0 let g:bufExplorerShowRelativePath=1 let g:bufExplorerFindActive=1 let g:bufExplorerSortBy='name' map q ::BufExplorer map Q ::BufExplorerVerticalSplit """""""""""""""""""""""""""""" " => Auto set tabline (tal) """""""""""""""""""""""""""""" Plug 'webdevel/tabulous' """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " => Nerd Tree """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" Plug 'preservim/nerdtree' let g:NERDTreeWinPos = "left" let NERDTreeShowHidden=0 let NERDTreeQuitOnOpen=1 let NERDTreeIgnore = ['\.pyc$', '__pycache__'] let g:NERDTreeWinSize=35 map :NERDTreeToggle map nb :NERDTreeFromBookmark map nf :NERDTreeFind """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " => vim-surrounded """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" Plug 'tpope/vim-surround' vmap [ S[ """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " => Markdown """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" Plug 'godlygeek/tabular' Plug 'preservim/vim-markdown' """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " => ALE (Asynchronous Lint Engine) """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" Plug 'dense-analysis/ale' let g:ale_sign_column_always = 1 let g:ale_sign_error = '>>' let g:ale_sign_warning = '--' " show errors or warnings in my statusline let g:airline#extensions#ale#enabled = 1 " use quickfix list instead of the loclist let g:ale_set_loclist = 0 let g:ale_set_quickfix = 1 ""---------------------------------------------------------------------- "" 默认情况下的分组,可以再前面覆盖之 ""---------------------------------------------------------------------- "if !exists('g:bundle_group') " let g:bundle_group = ['basic', 'tags', 'enhanced', 'filetypes', 'textobj'] " let g:bundle_group += ['tags', 'airline', 'nerdtree', 'ale', 'echodoc'] " let g:bundle_group += ['leaderf'] "endif " " ""---------------------------------------------------------------------- "" 计算当前 vim-init 的子路径 ""---------------------------------------------------------------------- "let s:home = fnamemodify(resolve(expand(':p')), ':h:h') " "function! s:path(path) " let path = expand(s:home . '/' . a:path ) " return substitute(path, '\\', '/', 'g') "endfunc " " ""---------------------------------------------------------------------- "" 在 ~/.vim/bundles 下安装插件 ""---------------------------------------------------------------------- "call plug#begin(get(g:, 'bundle_home', '~/.vim/bundles')) " " ""---------------------------------------------------------------------- "" 默认插件 ""---------------------------------------------------------------------- " "" 全文快速移动,f{char} 即可触发 "Plug 'easymotion/vim-easymotion' " "" 文件浏览器,代替 netrw "Plug 'justinmk/vim-dirvish' " "" 表格对齐,使用命令 Tabularize "Plug 'godlygeek/tabular', { 'on': 'Tabularize' } " "" Diff 增强,支持 histogram / patience 等更科学的 diff 算法 "Plug 'chrisbra/vim-diff-enhanced' " " ""---------------------------------------------------------------------- "" Dirvish 设置:自动排序并隐藏文件,同时定位到相关文件 "" 这个排序函数可以将目录排在前面,文件排在后面,并且按照字母顺序排序 "" 比默认的纯按照字母排序更友好点。 ""---------------------------------------------------------------------- "function! s:setup_dirvish() " if &buftype != 'nofile' && &filetype != 'dirvish' " return " endif " if has('nvim') " return " endif " " 取得光标所在行的文本(当前选中的文件名) " let text = getline('.') " if ! get(g:, 'dirvish_hide_visible', 0) " exec 'silent keeppatterns g@\v[\/]\.[^\/]+[\/]?$@d _' " endif " " 排序文件名 " exec 'sort ,^.*[\/],' " let name = '^' . escape(text, '.*[]~\') . '[/*|@=|\\*]\=\%($\|\s\+\)' " " 定位到之前光标处的文件 " call search(name, 'wc') " noremap ~ :Dirvish ~ " noremap % :e % "endfunc " "augroup MyPluginSetup " autocmd! " autocmd FileType dirvish call s:setup_dirvish() "augroup END " " ""---------------------------------------------------------------------- "" 基础插件 ""---------------------------------------------------------------------- "if index(g:bundle_group, 'basic') >= 0 " " " 展示开始画面,显示最近编辑过的文件 " Plug 'mhinz/vim-startify' " " " 一次性安装一大堆 colorscheme " Plug 'flazz/vim-colorschemes' " " " 支持库,给其他插件用的函数库 " Plug 'xolox/vim-misc' " " " 用于在侧边符号栏显示 marks (ma-mz 记录的位置) " Plug 'kshenoy/vim-signature' " " " 用于在侧边符号栏显示 git/svn 的 diff " Plug 'mhinz/vim-signify' " " " 根据 quickfix 中匹配到的错误信息,高亮对应文件的错误行 " " 使用 :RemoveErrorMarkers 命令或者 ha 清除错误 " Plug 'mh21/errormarker.vim' " " " 使用 ALT+e 会在不同窗口/标签上显示 A/B/C 等编号,然后字母直接跳转 " Plug 't9md/vim-choosewin' " " " 提供基于 TAGS 的定义预览,函数参数预览,quickfix 预览 " Plug 'skywind3000/vim-preview' " " " Git 支持 " Plug 'tpope/vim-fugitive' " " " 使用 ALT+E 来选择窗口 " nmap (choosewin) " " " 默认不显示 startify " let g:startify_disable_at_vimenter = 1 " let g:startify_session_dir = '~/.vim/session' " " " 使用 ha 清除 errormarker 标注的错误 " noremap ha :RemoveErrorMarkers " " " signify 调优 " let g:signify_vcs_list = ['git', 'svn'] " let g:signify_sign_add = '+' " let g:signify_sign_delete = '_' " let g:signify_sign_delete_first_line = '‾' " let g:signify_sign_change = '~' " let g:signify_sign_changedelete = g:signify_sign_change " " " git 仓库使用 histogram 算法进行 diff " let g:signify_vcs_cmds = { " \ 'git': 'git diff --no-color --diff-algorithm=histogram --no-ext-diff -U0 -- %f', " \} "endif " " ""---------------------------------------------------------------------- "" 增强插件 ""---------------------------------------------------------------------- "if index(g:bundle_group, 'enhanced') >= 0 " " " 用 v 选中一个区域后,ALT_+/- 按分隔符扩大/缩小选区 " Plug 'terryma/vim-expand-region' " " " 快速文件搜索 " Plug 'junegunn/fzf' " " " 给不同语言提供字典补全,插入模式下 c-x c-k 触发 " Plug 'asins/vim-dict' " " " 使用 :FlyGrep 命令进行实时 grep " Plug 'wsdjeg/FlyGrep.vim' " " " 使用 :CtrlSF 命令进行模仿 sublime 的 grep " Plug 'dyng/ctrlsf.vim' " " " 配对括号和引号自动补全 " Plug 'Raimondi/delimitMate' " " " 提供 gist 接口 " Plug 'lambdalisue/vim-gista', { 'on': 'Gista' } " " " ALT_+/- 用于按分隔符扩大缩小 v 选区 " map (expand_region_expand) " map (expand_region_shrink) "endif " " ""---------------------------------------------------------------------- "" 自动生成 ctags/gtags,并提供自动索引功能 "" 不在 git/svn 内的项目,需要在项目根目录 touch 一个空的 .root 文件 "" See https://zhuanlan.zhihu.com/p/36279445 ""---------------------------------------------------------------------- "if index(g:bundle_group, 'tags') >= 0 " " " 提供 ctags/gtags 后台数据库自动更新功能 " Plug 'ludovicchabant/vim-gutentags' " " " 提供 GscopeFind 命令并自动处理好 gtags 数据库切换 " " 支持光标移动到符号名上:cg 查看定义,cs 查看引用 " Plug 'skywind3000/gutentags_plus' " " " 设定项目目录标志:除了 .git/.svn 外,还有 .root 文件 " let g:gutentags_project_root = ['.root'] " let g:gutentags_ctags_tagfile = '.tags' " " " 默认生成的数据文件集中到 ~/.cache/tags 避免污染项目目录,好清理 " let g:gutentags_cache_dir = expand('~/.cache/tags') " " " 默认禁用自动生成 " let g:gutentags_modules = [] " " " 如果有 ctags 可执行就允许动态生成 ctags 文件 " if executable('ctags') " let g:gutentags_modules += ['ctags'] " endif " " " 如果有 gtags 可执行就允许动态生成 gtags 数据库 " if executable('gtags') && executable('gtags-cscope') " let g:gutentags_modules += ['gtags_cscope'] " endif " " " 设置 ctags 的参数 " let g:gutentags_ctags_extra_args = [] " 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'] " " " 使用 universal-ctags 的话需要下面这行,请反注释 " " let g:gutentags_ctags_extra_args += ['--output-format=e-ctags'] " " " 禁止 gutentags 自动链接 gtags 数据库 " let g:gutentags_auto_add_gtags_cscope = 0 "endif " " ""---------------------------------------------------------------------- "" 文本对象:textobj 全家桶 ""---------------------------------------------------------------------- "if index(g:bundle_group, 'textobj') >= 0 " " " 基础插件:提供让用户方便的自定义文本对象的接口 " Plug 'kana/vim-textobj-user' " " " indent 文本对象:ii/ai 表示当前缩进,vii 选中当缩进,cii 改写缩进 " Plug 'kana/vim-textobj-indent' " " " 语法文本对象:iy/ay 基于语法的文本对象 " Plug 'kana/vim-textobj-syntax' " " " 函数文本对象:if/af 支持 c/c++/vim/java " Plug 'kana/vim-textobj-function', { 'for':['c', 'cpp', 'vim', 'java'] } " " " 参数文本对象:i,/a, 包括参数或者列表元素 " Plug 'sgur/vim-textobj-parameter' " " " 提供 python 相关文本对象,if/af 表示函数,ic/ac 表示类 " Plug 'bps/vim-textobj-python', {'for': 'python'} " " " 提供 uri/url 的文本对象,iu/au 表示 " Plug 'jceb/vim-textobj-uri' "endif " " ""---------------------------------------------------------------------- "" 文件类型扩展 ""---------------------------------------------------------------------- "if index(g:bundle_group, 'filetypes') >= 0 " " " powershell 脚本文件的语法高亮 " Plug 'pprovost/vim-ps1', { 'for': 'ps1' } " " " lua 语法高亮增强 " Plug 'tbastos/vim-lua', { 'for': 'lua' } " " " C++ 语法高亮增强,支持 11/14/17 标准 " Plug 'octol/vim-cpp-enhanced-highlight', { 'for': ['c', 'cpp'] } " " " 额外语法文件 " Plug 'justinmk/vim-syntax-extra', { 'for': ['c', 'bison', 'flex', 'cpp'] } " " " python 语法文件增强 " Plug 'vim-python/python-syntax', { 'for': ['python'] } " " " rust 语法增强 " Plug 'rust-lang/rust.vim', { 'for': 'rust' } " " " vim org-mode " Plug 'jceb/vim-orgmode', { 'for': 'org' } "endif " " ""---------------------------------------------------------------------- "" airline ""---------------------------------------------------------------------- "if index(g:bundle_group, 'airline') >= 0 " Plug 'vim-airline/vim-airline' " Plug 'vim-airline/vim-airline-themes' " let g:airline_left_sep = '' " let g:airline_left_alt_sep = '' " let g:airline_right_sep = '' " let g:airline_right_alt_sep = '' " let g:airline_powerline_fonts = 0 " let g:airline_exclude_preview = 1 " let g:airline_section_b = '%n' " let g:airline_theme='deus' " let g:airline#extensions#branch#enabled = 0 " let g:airline#extensions#syntastic#enabled = 0 " let g:airline#extensions#fugitiveline#enabled = 0 " let g:airline#extensions#csv#enabled = 0 " let g:airline#extensions#vimagit#enabled = 0 "endif " " ""---------------------------------------------------------------------- "" NERDTree ""---------------------------------------------------------------------- "if index(g:bundle_group, 'nerdtree') >= 0 " Plug 'scrooloose/nerdtree', {'on': ['NERDTree', 'NERDTreeFocus', 'NERDTreeToggle', 'NERDTreeCWD', 'NERDTreeFind'] } " Plug 'tiagofumo/vim-nerdtree-syntax-highlight' " let g:NERDTreeMinimalUI = 1 " let g:NERDTreeDirArrows = 1 " let g:NERDTreeHijackNetrw = 0 " noremap nn :NERDTree " noremap no :NERDTreeFocus " noremap nm :NERDTreeMirror " noremap nt :NERDTreeToggle "endif " " ""---------------------------------------------------------------------- "" LanguageTool 语法检查 ""---------------------------------------------------------------------- "if index(g:bundle_group, 'grammer') >= 0 " Plug 'rhysd/vim-grammarous' " noremap rg :GrammarousCheck --lang=en-US --no-move-to-first-error --no-preview " map rr (grammarous-open-info-window) " map rv (grammarous-move-to-info-window) " map rs (grammarous-reset) " map rx (grammarous-close-info-window) " map rm (grammarous-remove-error) " map rd (grammarous-disable-rule) " map rn (grammarous-move-to-next-error) " map rp (grammarous-move-to-previous-error) "endif " " ""---------------------------------------------------------------------- "" ale:动态语法检查 ""---------------------------------------------------------------------- "if index(g:bundle_group, 'ale') >= 0 " Plug 'w0rp/ale' " " " 设定延迟和提示信息 " let g:ale_completion_delay = 500 " let g:ale_echo_delay = 20 " let g:ale_lint_delay = 500 " let g:ale_echo_msg_format = '[%linter%] %code: %%s' " " " 设定检测的时机:normal 模式文字改变,或者离开 insert模式 " " 禁用默认 INSERT 模式下改变文字也触发的设置,太频繁外,还会让补全窗闪烁 " let g:ale_lint_on_text_changed = 'normal' " let g:ale_lint_on_insert_leave = 1 " " " 在 linux/mac 下降低语法检查程序的进程优先级(不要卡到前台进程) " if has('win32') == 0 && has('win64') == 0 && has('win32unix') == 0 " let g:ale_command_wrapper = 'nice -n5' " endif " " " 允许 airline 集成 " let g:airline#extensions#ale#enabled = 1 " " " 编辑不同文件类型需要的语法检查器 " let g:ale_linters = { " \ 'c': ['gcc', 'cppcheck'], " \ 'cpp': ['gcc', 'cppcheck'], " \ 'python': ['flake8', 'pylint'], " \ 'lua': ['luac'], " \ 'go': ['go build', 'gofmt'], " \ 'java': ['javac'], " \ 'javascript': ['eslint'], " \ } " " " " 获取 pylint, flake8 的配置文件,在 vim-init/tools/conf 下面 " function s:lintcfg(name) " let conf = s:path('tools/conf/') " let path1 = conf . a:name " let path2 = expand('~/.vim/linter/'. a:name) " if filereadable(path2) " return path2 " endif " return shellescape(filereadable(path2)? path2 : path1) " endfunc " " " 设置 flake8/pylint 的参数 " let g:ale_python_flake8_options = '--conf='.s:lintcfg('flake8.conf') " let g:ale_python_pylint_options = '--rcfile='.s:lintcfg('pylint.conf') " let g:ale_python_pylint_options .= ' --disable=W' " let g:ale_c_gcc_options = '-Wall -O2 -std=c99' " let g:ale_cpp_gcc_options = '-Wall -O2 -std=c++14' " let g:ale_c_cppcheck_options = '' " let g:ale_cpp_cppcheck_options = '' " " let g:ale_linters.text = ['textlint', 'write-good', 'languagetool'] " " " 如果没有 gcc 只有 clang 时(FreeBSD) " if executable('gcc') == 0 && executable('clang') " let g:ale_linters.c += ['clang'] " let g:ale_linters.cpp += ['clang'] " endif "endif " " ""---------------------------------------------------------------------- "" echodoc:搭配 YCM/deoplete 在底部显示函数参数 ""---------------------------------------------------------------------- "if index(g:bundle_group, 'echodoc') >= 0 " Plug 'Shougo/echodoc.vim' " set noshowmode " let g:echodoc#enable_at_startup = 1 "endif " " ""---------------------------------------------------------------------- "" LeaderF:CtrlP / FZF 的超级代替者,文件模糊匹配,tags/函数名 选择 ""---------------------------------------------------------------------- "if index(g:bundle_group, 'leaderf') >= 0 " " 如果 vim 支持 python 则启用 Leaderf " if has('python') || has('python3') " Plug 'Yggdroot/LeaderF' " " " CTRL+p 打开文件模糊匹配 " let g:Lf_ShortcutF = '' " " " ALT+n 打开 buffer 模糊匹配 " let g:Lf_ShortcutB = '' " " " CTRL+n 打开最近使用的文件 MRU,进行模糊匹配 " noremap :LeaderfMru " " " ALT+p 打开函数列表,按 i 进入模糊匹配,ESC 退出 " noremap :LeaderfFunction! " " " ALT+SHIFT+p 打开 tag 列表,i 进入模糊匹配,ESC退出 " noremap :LeaderfBufTag! " " " ALT+n 打开 buffer 列表进行模糊匹配 " noremap :LeaderfBuffer " " " ALT+m 全局 tags 模糊匹配 " noremap :LeaderfTag " " " 最大历史文件保存 2048 个 " let g:Lf_MruMaxFiles = 2048 " " " ui 定制 " 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.30 " let g:Lf_CacheDirectory = expand('~/.vim/cache') " " " 显示绝对路径 " let g:Lf_ShowRelativePath = 0 " " " 隐藏帮助 " let g:Lf_HideHelp = 1 " " " 模糊匹配忽略扩展名 " let g:Lf_WildIgnore = { " \ 'dir': ['.svn','.git','.hg'], " \ 'file': ['*.sw?','~$*','*.bak','*.exe','*.o','*.so','*.py[co]'] " \ } " " " MRU 文件忽略扩展名 " let g:Lf_MruFileExclude = ['*.so', '*.exe', '*.py[co]', '*.sw?', '~$*', '*.bak', '*.tmp', '*.dll'] " let g:Lf_StlColorscheme = 'powerline' " " " 禁用 function/buftag 的预览功能,可以手动用 p 预览 " let g:Lf_PreviewResult = {'Function':0, 'BufTag':0} " " " 使用 ESC 键可以直接退出 leaderf 的 normal 模式 " let g:Lf_NormalMap = { " \ "File": [["", ':exec g:Lf_py "fileExplManager.quit()"']], " \ "Buffer": [["", ':exec g:Lf_py "bufExplManager.quit()"']], " \ "Mru": [["", ':exec g:Lf_py "mruExplManager.quit()"']], " \ "Tag": [["", ':exec g:Lf_py "tagExplManager.quit()"']], " \ "BufTag": [["", ':exec g:Lf_py "bufTagExplManager.quit()"']], " \ "Function": [["", ':exec g:Lf_py "functionExplManager.quit()"']], " \ } " " else " " 不支持 python ,使用 CtrlP 代替 " Plug 'ctrlpvim/ctrlp.vim' " " " 显示函数列表的扩展插件 " Plug 'tacahiroy/ctrlp-funky' " " " 忽略默认键位 " let g:ctrlp_map = '' " " " 模糊匹配忽略 " let g:ctrlp_custom_ignore = { " \ 'dir': '\v[\/]\.(git|hg|svn)$', " \ 'file': '\v\.(exe|so|dll|mp3|wav|sdf|suo|mht)$', " \ 'link': 'some_bad_symbolic_links', " \ } " " " 项目标志 " let g:ctrlp_root_markers = ['.project', '.root', '.svn', '.git'] " let g:ctrlp_working_path = 0 " " " CTRL+p 打开文件模糊匹配 " noremap :CtrlP " " " CTRL+n 打开最近访问过的文件的匹配 " noremap :CtrlPMRUFiles " " " ALT+p 显示当前文件的函数列表 " noremap :CtrlPFunky " " " ALT+n 匹配 buffer " noremap :CtrlPBuffer " endif "endif " " ""---------------------------------------------------------------------- "" 结束插件安装 ""---------------------------------------------------------------------- "call plug#end() " " " ""---------------------------------------------------------------------- "" YouCompleteMe 默认设置:YCM 需要你另外手动编译安装 ""---------------------------------------------------------------------- " "" 禁用预览功能:扰乱视听 "let g:ycm_add_preview_to_completeopt = 0 " "" 禁用诊断功能:我们用前面更好用的 ALE 代替 "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 = '' "set completeopt=menu,menuone,noselect " "" noremap " "" 两个字符自动触发语义补全 "let g:ycm_semantic_triggers = { " \ 'c,cpp,python,java,go,erlang,perl': ['re!\w{2}'], " \ 'cs,lua,javascript': ['re!\w{2}'], " \ } " " ""---------------------------------------------------------------------- "" Ycm 白名单(非名单内文件不启用 YCM),避免打开个 1MB 的 txt 分析半天 ""---------------------------------------------------------------------- "let g:ycm_filetype_whitelist = { " \ "c":1, " \ "cpp":1, " \ "objc":1, " \ "objcpp":1, " \ "python":1, " \ "java":1, " \ "javascript":1, " \ "coffee":1, " \ "vim":1, " \ "go":1, " \ "cs":1, " \ "lua":1, " \ "perl":1, " \ "perl6":1, " \ "php":1, " \ "ruby":1, " \ "rust":1, " \ "erlang":1, " \ "asm":1, " \ "nasm":1, " \ "masm":1, " \ "tasm":1, " \ "asm68k":1, " \ "asmh8300":1, " \ "asciidoc":1, " \ "basic":1, " \ "vb":1, " \ "make":1, " \ "cmake":1, " \ "html":1, " \ "css":1, " \ "less":1, " \ "json":1, " \ "cson":1, " \ "typedscript":1, " \ "haskell":1, " \ "lhaskell":1, " \ "lisp":1, " \ "scheme":1, " \ "sdl":1, " \ "sh":1, " \ "zsh":1, " \ "bash":1, " \ "man":1, " \ "markdown":1, " \ "matlab":1, " \ "maxima":1, " \ "dosini":1, " \ "conf":1, " \ "config":1, " \ "zimbu":1, " \ "ps1":1, " \ } call plug#end()