"F3文件浏览 F5运行 F10编译 F12行号 leader键为\ \s关闭ale语法检查 \d显示错误/警告详细信息 "visual模式下选中文本\cs注释\cu取消 "中文支持 set encoding=utf-8 set fileencoding=utf-8 set fileencodings=utf-8,ucs-bom,chinese "代码高亮 syntax on "行号设置 set nu noremap :call SetNU() func! SetNU() if &number!=0 exec "set nonu" else exec "set nu" endif endfunc "代码管理 call plug#begin('~/.vim/plugged') "符号补全 Plug 'jiangmiao/auto-pairs' "代码检查 Plug 'dense-analysis/ale' "文件浏览 Plug 'preservim/NERDTree' "运行信息输出 Plug 'skywind3000/asyncrun.vim' "tags自动生成 Plug 'ludovicchabant/vim-gutentags' "代码块注释 Plug 'preservim/nerdcommenter' "中文文档 Plug 'yianwillis/vimcdoc' "vim airline Plug 'vim-airline/vim-airline' "中文输入法 Plug 'ZSaberLv0/ZFVimIM' Plug 'ZSaberLv0/ZFVimJob' Plug 'ZSaberLv0/ZFVimIM_openapi' "git相关命令 Plug 'tpope/vim-fugitive' "coc C/C++代码补全 Plug 'neoclide/coc.nvim', {'branch': 'release'} call plug#end() "tags追加 set tags+=~/.cache/tags " 设置tab补全 inoremap \ coc#pum#visible() ? coc#pum#confirm() : \ CheckBackspace() ? "\" : \ coc#refresh() inoremap \ coc#pum#visible() ? coc#pum#stop():"\" " function! CleverTab() " if strpart( getline('.'), 0, col('.')-1 ) =~ '^\s*$' " return "\" " else " return "\" " endif " endfunction " inoremap =CleverTab() " inoremap " \ coc#pum#visible() ? coc#pum#next(1) : " \ CheckBackspace() ? "\" : " \ coc#refresh() " inoremap coc#pum#visible() ? coc#pum#prev(1) : "\" " Make to accept selected completion item or notify coc.nvim to format " u breaks current undo, please make your own choice inoremap coc#pum#visible() ? coc#pum#confirm() \: "\u\\=coc#on_enter()\" function! CheckBackspace() abort let col = col('.') - 1 return !col || getline('.')[col - 1] =~# '\s' endfunction " NERDTree命令映射 map :NERDTreeMirror map :NERDTreeToggle "ale settings{{ "始终开启标志列 let g:ale_sign_column_always = 1 let g:ale_set_highlights = 0 "自定义error和warning图标 let g:ale_sign_error = '✗' let g:ale_sign_warning = '⚡' "在vim自带的状态栏中整合ale let g:ale_statusline_format = ['✗ %d', '⚡ %d', '✔ OK'] "显示Linter名称,出错或警告等相关信息 let g:ale_echo_msg_error_str = 'E' let g:ale_echo_msg_warning_str = 'W' let g:ale_echo_msg_format = '[%linter%] %s [%severity%]' "普通模式下,sp前往上一个错误或警告,sn前往下一个错误或警告 nmap sp (ale_previous_wrap) nmap sn (ale_next_wrap) "s触发/关闭语法检查 nmap s :ALEToggle "d查看错误或警告的详细信息 nmap d :ALEDetail "打开文件时不进行检查 let g:ale_lint_on_enter = 0 "使用clang对c和c++进行语法检查,对python使用pylint进行语法检查 let g:ale_linters = { \ 'c++': ['clang'], \ 'c': ['clang'], \ 'python': ['pylint'], \ 'java': [''], \} "}} " 自动打开高度为具体值的 quickfix 窗口 let g:asyncrun_open=15 " 运行前保存文件 let g:asyncrun_save=1 " 用编译 noremap :call CompileBuild() func! CompileBuild() exec "w" if &filetype == 'c' exec ':AsyncRun -mode=term -pos=bottom -rows=10 -focus=0 gcc -O3 -ggdb -Wall "$(VIM_FILEPATH)" -o "$(VIM_FILEDIR)/$(VIM_FILENOEXT)"' elseif &filetype == 'cpp' exec ':AsyncRun -mode=term -pos=bottom -rows=10 -focus=0 g++ -O3 -ggdb -Wall "$(VIM_FILEPATH)" -o "$(VIM_FILEDIR)/$(VIM_FILENOEXT)" -lpthread' elseif &filetype == 'go' exec ":AsyncRun -mode=term -pos=bottom -rows=10 -focus=0 go build $(VIM_FILEDIR)/$(VIM_FILENOEXT)" elseif &filetype == 'java' exec ':AsyncRun -mode=term -pos=bottom -rows=10 -focus=0 javac --module-path "/data/data/com.termux/files/usr/opt/javafx-sdk-20.0.2/lib/" --add-modules="javafx.controls" "$(VIM_FILEPATH)"' endif endfunc " 用运行 noremap :call CompileRun() func! CompileRun() exec "w" if &filetype == 'c' exec ":AsyncRun -mode=term -pos=bottom -rows=10 -focus=0 $(VIM_FILEDIR)/$(VIM_FILENOEXT)" elseif &filetype == 'cpp' exec ":AsyncRun -mode=term -pos=bottom -rows=10 -focus=0 $(VIM_FILEDIR)/$(VIM_FILENOEXT)" elseif &filetype == 'python' exec ":AsyncRun -mode=term -pos=bottom -rows=10 -focus=0 python3 $(VIM_FILEPATH)" elseif &filetype == 'html' exec ":AsyncRun -mode=term -pos=hide open $(VIM_FILEPATH)" elseif &filetype == 'go' exec ":AsyncRun -mode=term -pos=bottom -rows=10 -focus=0 go run $(VIM_FILEPATH)" elseif &filetype == 'javascript' exec ":AsyncRun -mode=term -pos=bottom -rows=10 -focus=0 node $(VIM_FILEPATH)" elseif &filetype == 'java' exec ':AsyncRun -mode=term -pos=bottom -rows=10 -focus=0 java --module-path "/data/data/com.termux/files/usr/opt/javafx-sdk-20.0.2/lib/" --add-modules="javafx.controls" -cp $(VIM_FILEDIR) $(VIM_FILENOEXT)' endif endfunc "gutentags settings {{ " gutentags 搜索工程目录的标志,碰到这些文件/目录名就停止向上一级目录递归 let g:gutentags_project_root = ['.root', '.svn', '.git', '.hg', '.project','.sln'] " 所生成的数据文件的名称 let g:gutentags_ctags_tagfile = '.tags' " 将自动生成的 tags 文件全部放入 ~/.cache/tags 目录中,避免污染工程目录 let s:vim_tags = expand('~/.cache/tags') let g:gutentags_cache_dir = s:vim_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'] " 检测 ~/.cache/tags 不存在就新建 if !isdirectory(s:vim_tags) silent! call mkdir(s:vim_tags, 'p') endif "}} "tags setting " set tags=./.tags;,.tags "NERDCommenter settings " Add spaces after comment delimiters by default let g:NERDSpaceDelims = 1 "add tab space set ts=4 set softtabstop=4 set shiftwidth=4 set expandtab set autoindent "vim-airline settings set laststatus=2 "永远显示状态栏 let g:airline#extensions#tabline#enabled = 1 "文件栏设置 noremap :tabnew noremap :tabclose noremap :bn! "save file nmap :w imap :w "undo settings set undolevels=5000 nmap z :undo imap z :call Insert_Undo() func! Insert_Undo() let pos = getpos(".") undo startinsert let pos[2] +=1 call setpos(".",pos) endfunc "设置中文/英文输入法数据库 let g:ZFVimIM_openapi_enable=1 let g:ZFVimIM_openapi_word_type='sentence' function! s:ChineseDb() let db = ZFVimIM_dbInit({ \ 'name' : 'ChineseDb', \ }) call ZFVimIM_cloudRegister({ \ 'mode' : 'local', \ 'dbId' : db['dbId'], \ 'repoPath' : '~/.vim/plugged/misc', \ 'dbFile' : '/pinyin.txt', \ 'dbCountFile' : '/pinyin_count.txt', \ }) endfunction function! s:EnglishDb() let db = ZFVimIM_dbInit({ \ 'name' : 'EnglishDb', \ }) call ZFVimIM_cloudRegister({ \ 'mode' : 'local', \ 'dbId' : db['dbId'], \ 'repoPath' : '~/.vim/plugged/misc', \ 'dbFile' : '/english.txt', \ 'dbCountFile' : '/english_count.txt', \ }) endfunction autocmd User ZFVimIM_event_OnDbInit call s:EnglishDb() autocmd User ZFVimIM_event_OnDbInit call s:ChineseDb() "设置标点符号转换 let g:ZFVimIM_symbolMap = { \ ' ' : [''], \ '`' : ['·'], \ '!' : ['!'], \ '$' : ['¥'], \ '^' : ['……'], \ '-' : [''], \ '_' : ['——'], \ '(' : ['('], \ ')' : [')'], \ '[' : ['【'], \ ']' : ['】'], \ '<' : ['《'], \ '>' : ['》'], \ '\' : ['、'], \ '/' : ['、'], \ ';' : [';'], \ ':' : [':'], \ ',' : [','], \ '.' : ['。'], \ '?' : ['?'], \ "'" : ['‘', '’'], \ '"' : ['“', '”'], \ '0' : [''], \ '1' : [''], \ '2' : [''], \ '3' : [''], \ '4' : [''], \ '5' : [''], \ '6' : [''], \ '7' : [''], \ '8' : [''], \ '9' : [''], \ } "自动补全相关设置 autocmd FileType python set omnifunc=pythoncomplete#Complete autocmd FileType c set omnifunc=ccomplete#Complete autocmd FileType cpp set omnifunc=omni#cpp#complete#Main "使用\+q代替esc imap q vmap q