@author – zhanjzh
前言
开学头将系统换成了arch,之前在ubuntu上的一套vim配置由于稍微复杂了点,本来已经打算不再继续配置
不料这学期还是要继续学cuda,这样导致我还是要继续用vim。(vscode 上的cuda补全比较差)
这篇博客我会将我使用到的插件和配置内容放上来.
偶尔会更新下如何安装以及为何这样配置的内容。
顺便提一下这段时间可能要升级一下博客的网站,之前只配置了阅读数量,我觉得应该配置下评论内容了。
- 主要使用的插件有:
- YCM (YouCompleteMe)
- delimitMate (括号补全)
- supertab (其实没怎么用到)
- Vundle (插件管理)
- snippet (代码段补全,目前正在探索)
- vim-latexsuite (latex 内容)
配置效果
目前也没有太多花里胡哨的,因此就不放截图,这里先讲一下具体做了哪些改动。
本着实用性和个性至上的原则,我做的配置都是让自己用起来更舒适的操作,这里留起来等以后在新环境里面重新配置时不用太烦恼。
-
一开始先配置后YCM的代码补全这点是没有什么疑问的,arch下最棒的一点是AUR有配置好的YCM,只需要一个命令就可以轻松安装,不像之前在Ubuntu上光是安装合适版本的clang就花了两个下午。YCM需要的 .ycm_extra_conf.py 在上一篇博客里面有,但其实我做了一些改动,之后有时间再放上来吧。
配置好代码补全, 然后需要调整一下YCM自动补全跳出来的列表中选中的按钮。原本默认的是 ,也就是 ctrl + y,修改成了回车键 。当然在 .ycm_extra_conf.py 里面肯定先配置了 .cu 程序的补全识别啦。
然后是调整了下补全代码的触发规则,我这里调整成了按前面两个字就补全的规则,大概就是let g:ycm_semantic_triggers
那部分内容。 -
配置好代码补全,在使用过程中发现没有花括号回车换行缩进补全实在不舒适,于是先试了按键映射,一开始效果还算不错,但是后来发现不行。
不行是因为我发现在行首删除时由于是调用的函数也就是在 normal 模式下进行的操作,导致无论怎么调整在行首删除一个字母总是会跳到后面一个字母的位置。几番尝试,研究了下vimscrip的编写后放弃,直接用现成的插件算了。
这就是后来使用到的delimitMate 插件,功能还算比较全,配置语句也就两三句。 -
调整了delimitMate 与YCM关于回车键映射的冲突。
-
vim-latexsuite 和 snippets 都是正在学习的内容,vundle只是为了管理插件,同时也在使用系统自带的pacman来安装插件。
-
尝试修改终端下标签页的切换映射,本来想换成像是vscode 里面的ctrl + tab 快捷键,不料在vim下的终端是识别不出 和 的(原因是终端下其实 其实是 不信你在终端下按下 ctrl + i, 你会发现缩进了),无奈只能放弃,现在的切换控制是 和 。
-
更换配色。这一点简直是致命的问题。写代码高亮是共识,颜色模糊不全是大忌!由于颜色不够显眼,不够符合口味,我自己修改了几个地方,第一个是YCM的警告配色(YcmWarningSection),第二个是括号的匹配颜色(Matchparen), 还有一个隐藏配色好像没修改成功?暂时不管,代码折叠现在还没有使用太多。(代码折叠, 打开, 折叠)。
-
打开鼠标控制,之前一直是关闭的,因为在笔记本上打字总是会误触触摸板造成点击,现在新系统没有这个问题,因为我还没修好不能触摸点击的这个bug。
-
修改光标形状。这个查资料看到不同的终端配置是不一样的,我这里使用到的终端是 gnome-terminal。效果是插入模式下是竖线,可视模式下和普通模式下是方块。并且普通终端下保持方块形状。
-
在编辑 latex 文件时,一些数学符号会自动进行转义、隐藏,例如
\bigcap
当光标不在其所在行时会显示成 ⋂ \bigcap ⋂。 -
目前正在研究如何将vim配合zathura使用,这个得看时间。
配置文件
最后放上配置文件
" VIM PLUGINS
" zhanjzh
" PACMAN PLUGINS " filetype plugin indent on
set grepprg=grep\ -nH\ $*
let g:tex_flavor = "latex"
set runtimepath=~/.vim,$VIM/vimfiles,$VIMRUNTIME,$VIM/vimfiles/after,~/.vim/after
let g:vimtex_view_method='zathura'
let g:vimtex_quickfix_mode=0
set conceallevel=1
" let g:tex_conceal='abdmg'
" snippet
"let g:UltiSnipsExpandTrigger = '<tab>'
"let g:UltiSnipsJumpForwardTrigger = '<tab>'
"let g:UltiSnipsJumpBackwardTrigger = '<s-tab>'
"let g:UltiSnipsSnippetDirectories=["UltiSnips", "mysnippets"]
" better key bindings for UltiSnipsExpandTrigger
let g:UltiSnipsExpandTrigger="<C-e>"
let g:UltiSnipsJumpForwardTrigger="<C-j>"
let g:UltiSnipsJumpBackwardTrigger="<C-k>"
" <<<<<<<<<<<<< >>>>>>>>>>>>
" VUNDLE PLUGINS
set nocompatible " be iMproved, required
filetype off " required
" set the runtime path to include Vundle and initialize
set rtp+=~/.vim/bundle/Vundle.vim
" let g:ycm_show_diagnostics_ui = 0
call vundle#begin()
" alternatively, pass a path where Vundle should install plugins
"call vundle#begin('~/some/path/here')
" let Vundle manage Vundle, required
Plugin 'VundleVim/Vundle.vim'
Plugin 'Raimondi/delimitMate'
" All of your Plugins must be added before the following line
call vundle#end() " required
filetype plugin on " required
" To ignore plugin indent changes, instead use:
"filetype plugin on
"
" Brief help
" :PluginList - lists configured plugins
" :PluginInstall - installs plugins; append `!` to update or just :PluginUpdate
" :PluginSearch foo - searches for foo; append `!` to refresh local cache
" :PluginClean - confirms removal of unused plugins; append `!` to auto-approve removal
"
" see :h vundle for more details or wiki for FAQ
" Put your non-Plugin stuff after this line
"
"
" #############################################################################
set nu
" 下面是对于vim下的缩进设置,慎重改动
set ts=4
set smartindent
set tabstop=4
set shiftwidth=4
set expandtab "设置空格缩进,4个
set autoindent "回车保持缩进
set softtabstop=4 "在设置了空格缩进的同时让退格键一次删除一个tab(4个空格),vscode 风格
syntax on "打开高亮
set backspace=2 "为了让退格键起作用
set cursorline "设置行线
set mouse=a "设置响应鼠标点击"
"""" Delimate
" DelimitMate 插件用于括号补全和花括号内回车缩进换行。
let delimitMate_expand_cr = 1
" 下面这句能够让在括号内空格左右会出现两个空格
let delimitMate_expand_space = 1
let g:ycm_server_python_interpreter = '/usr/bin/python3'
let g:ycm_global_ycm_extra_conf = '/home/zhanjzh/.vim/.ycm_extra_conf.py'
let g:ycm_seed_identifiers_with_syntax=1
let g:ycm_add_pre_view_to_completeopt=0
let g:ycm_key_invoke_completion='<c-z>'
let g:ycm_semantic_triggers={'c,cpp,python,cuda': ['re!\w{2}'] }
"set completeopt=menu,menuone
" 让YCM的补全行为与IDE保持一致,但是说实话没有什么感觉
set completeopt=longest,menu
"inoremap <expr> <CR> pumvisible() ? "\<C-y>" : "\<CR>" "回车即选中当前项
"inoremap <expr> <CR> pumvisible() ? "\<C-y>" : "\<Plug>delimitMateCR()"
" 在github的issue上找到的一个大佬给的方案,目的是为了保持delimitMate插件与
" YCM插件在对于回车键上的映射上和平共处
imap <expr> <CR> pumvisible() ? "\<c-y>" : "\<Plug>delimitMateCR"
"let g:ycm_key_list_stop_completion = ['<CR>']
" 以下是修改在同一个终端打开多个标签页时的快捷键以及页数限制
set tabpagemax=15
nnoremap <C-LEFT> :tabprevious<CR>
nnoremap <C-RIGHT> :tabnext<CR>
" 颜色配置
" highlight PMenu ctermfg=0 ctermbg=242 guifg=black guibg=darkgrey
highlight PMenuSel ctermfg=242 ctermbg=8 guifg=darkgrey guibg=black
highlight Conceal guifg=White guibg=Red
" 由于YCM的警告语句在黑色终端下配色很模糊,修改成较为高亮的蓝底黑字
highlight link YcmWarningSection Pmenu
" #############################
" 说明,以下代码是用于修改插入模式的光标为竖线,普通模式下为方块状
" 这主要是因为想保留普通终端下的方块输入形状。
if has("autocmd")
au VimEnter,InsertLeave * silent execute '!echo -ne "\e[1 q"' | redraw!
au InsertEnter,InsertChange *
\ if v:insertmode == 'i' |
\ silent execute '!echo -ne "\e[5 q"' | redraw! |
\ elseif v:insertmode == 'r' |
\ silent execute '!echo -ne "\e[3 q"' | redraw! |
\ endif
au VimLeave * silent execute '!echo -ne "\e[ q"' | redraw!
endif