vim configs

This commit is contained in:
lichx 2025-11-28 11:16:31 +08:00
parent b0da5bb30f
commit 5c14c212c7
2 changed files with 3084 additions and 0 deletions

2812
.vim/autoload/plug.vim Normal file

File diff suppressed because it is too large Load Diff

272
.vimrc Normal file
View File

@ -0,0 +1,272 @@
"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 <silent> <F12> :call SetNU()<CR>
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 <silent><expr> <TAB>
\ coc#pum#visible() ? coc#pum#confirm() :
\ CheckBackspace() ? "\<Tab>" :
\ coc#refresh()
inoremap <silent><expr> <ESC>
\ coc#pum#visible() ? coc#pum#stop():"\<ESC>"
" function! CleverTab()
" if strpart( getline('.'), 0, col('.')-1 ) =~ '^\s*$'
" return "\<Tab>"
" else
" return "\<C-N>"
" endif
" endfunction
" inoremap <Tab> <C-R>=CleverTab()<CR>
" inoremap <silent><expr> <TAB>
" \ coc#pum#visible() ? coc#pum#next(1) :
" \ CheckBackspace() ? "\<Tab>" :
" \ coc#refresh()
" inoremap <expr><S-TAB> coc#pum#visible() ? coc#pum#prev(1) : "\<C-h>"
" Make <CR> to accept selected completion item or notify coc.nvim to format
" <C-g>u breaks current undo, please make your own choice
inoremap <silent><expr> <CR> coc#pum#visible() ? coc#pum#confirm()
\: "\<C-g>u\<CR>\<c-r>=coc#on_enter()\<CR>"
function! CheckBackspace() abort
let col = col('.') - 1
return !col || getline('.')[col - 1] =~# '\s'
endfunction
" NERDTree命令映射
map <F3> :NERDTreeMirror<CR>
map <F3> :NERDTreeToggle<CR>
"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 <Plug>(ale_previous_wrap)
nmap sn <Plug>(ale_next_wrap)
"<Leader>s触发/关闭语法检查
nmap <Leader>s :ALEToggle<CR>
"<Leader>d查看错误或警告的详细信息
nmap <Leader>d :ALEDetail<CR>
"打开文件时不进行检查
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
" 用<f10>编译
noremap <silent> <F10> :call CompileBuild()<CR>
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
" 用<F5>运行
noremap <silent> <F5> :call CompileRun()<CR>
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 <silent><S-n> :tabnew<cr>
noremap <silent><S-d> :tabclose<cr>
noremap <silent><S-Tab> :bn!<CR>
"save file
nmap <C-s> :w<cr>
imap <C-s> <esc>:w<cr>
"undo settings
set undolevels=5000
nmap <silent><Leader>z :undo<cr>
imap <silent><Leader>z <esc>:call Insert_Undo()<cr>
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 <Leader>q <esc>
vmap <Leader>q <esc>