Vim外掛之syntastic
阿新 • • 發佈:2018-12-14
已經轉投ale,具體看這裡
syntastic是Vim上比較老牌的一款語法檢查外掛,雖然效能不及ale,但相容性要更好一些,配置如下
"syntastic
"設定error和warning的標誌
let g:syntastic_enable_signs = 1
let g:syntastic_error_symbol='✗'
let g:syntastic_warning_symbol='►'
"總是開啟Location List(相當於QuickFix)視窗,如果你發現syntastic因為與其他外掛衝突而經常崩潰,將下面選項置0
let g:syntastic_always_populate_loc_list = 1
" 自動開啟Locaton List,預設值為2,表示發現錯誤時不自動開啟,當修正以後沒有再發現錯誤時自動關閉,置1表示自動開啟自動關閉,0表示關閉自動開啟和自動關閉,3表示自動開啟,但不自動關閉
let g:syntastic_auto_loc_list = 1
"修改Locaton List視窗高度
let g:syntastic_loc_list_height = 5
"開啟檔案時自動進行檢查
let g:syntastic_check_on_open = 1
"自動跳轉到發現的第一個錯誤或警告處
let g:syntastic_auto_jump = 1
"進行實時檢查,如果覺得卡頓,將下面的選項置為1
let g:syntastic_check_on_wq = 0
"高亮錯誤
let g:syntastic_enable_highlighting=1
"讓syntastic支援C++11
let g:syntastic_cpp_compiler = 'clang++'
let g:syntastic_cpp_compiler_options = ' -std=c++11 -stdlib=libc++'
"設定pyflakes為預設的python語法檢查工具
let g:syntastic_python_checkers = ['pyflakes']
"修復syntastic使用:lnext和:lprev 出現的跳轉問題,同時修改鍵盤對映使用sn和sp進行跳轉
function! <SID>LocationPrevious()
try
lprev
catch /^Vim\%((\a\+)\)\=:E553/
llast
endtry
endfunction
function! <SID>LocationNext()
try
lnext
catch /^Vim\%((\a\+)\)\=:E553/
lfirst
endtry
endfunction
nnoremap <silent> <Plug>LocationPrevious :<C-u>exe 'call <SID>LocationPrevious()'<CR>
nnoremap <silent> <Plug>LocationNext :<C-u>exe 'call <SID>LocationNext()'<CR>
nmap <silent> sp <Plug>LocationPrevious
nmap <silent> sn <Plug>LocationNext
"關閉syntastic語法檢查, 滑鼠複製程式碼時用到, 防止把錯誤標誌給複製了
nnoremap <silent> <Leader>ec :SyntasticToggleMode<CR>
function! ToggleErrors()
let old_last_winnr = winnr('$')
lclose
if old_last_winnr == winnr('$')
" Nothing was closed, open syntastic error location panel
Errors
endif
endfunction
因為預設情況下syntastic並不支援對C++11
進行語法檢查,因此上面使用了clang
來解決這個問題,clang相比gcc提供的錯誤資訊更加友好,如果你習慣gcc
的話,將上面的
let g:syntastic_cpp_compiler = 'clang++'
let g:syntastic_cpp_compiler_options = ' -std=c++11 -stdlib=libc++'
替換為
let g:syntastic_cpp_checkers = ['gcc']
let g:syntastic_cpp_compiler = 'gcc'
let g:syntastic_cpp_compiler_options = '-std=c++11'
另外,使用時,如果你想臨時手動關閉syntastic的Location List輸入:lclose
即可