shell-config/.vimrc

273 lines
9.0 KiB
VimL
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

"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>