1. 程式人生 > >Vim外掛之syntastic

Vim外掛之syntastic

已經轉投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即可