VIM + Syntastic: จะปิดใช้งานตัวตรวจสอบได้อย่างไร


119

ฉันใช้ Syntastic ซึ่งเปิดใช้งานสำหรับไฟล์ HTML ของฉัน เนื่องจากฉันมีไฟล์ขนาดใหญ่มากที่เปิดใช้งานตัวตรวจสอบ "validator w3" GVIM หรือ VIM จึงทำงานช้ามากขณะบันทึกไฟล์ (: w)

เป็นไปได้ไหมที่จะสลับ syntastic ออกชั่วคราวสำหรับเซสชันปัจจุบัน


3
ลองlet g:syntastic_disabled_filetypes=['html']
ยาเกียง

คำตอบ:


166

การใช้:SyntasticToggleModeคุณสามารถสลับ Syntastic เป็นโหมดพาสซีฟซึ่งจะปิดใช้งานการตรวจสอบอัตโนมัติ จากนั้นคุณสามารถตรวจสอบไฟล์โดยเรียกใช้:SyntasticCheckแทน

สำหรับข้อมูลเพิ่มเติมโปรดดู :help syntastic-commands

ในหมายเหตุอื่น: หาก Syntastic ช้าให้คุณลองใช้aleเป็นทางเลือกอื่น ไม่เหมือนกับ Syntastic ที่ทำงานแบบอะซิงโครนัสดังนั้นแม้ว่าจะช้า แต่ก็ไม่ควรขัดขวางคุณ


1
มีวิธีใดในการสร้างนามแฝงเดียวหรือแมปคีย์เพื่อสลับสิ่งนี้หรือไม่ IE, :errorหรือ Ctrl + Shift / Alt + E สลับระหว่างและ:SyntasticCheck :SyntasticToggleMode
yoaquim

2
คุณสามารถสร้างนามแฝงเช่นนี้ใน. vimrc: :command Sd SyntasticToggleMode จากนั้นใน vi กด: Sd และจะปิดการใช้งาน syntastic ข้อมูลเพิ่มเติมเกี่ยวกับวิธีการทำที่นี่: stackoverflow.com/questions/3878692/aliasing-a-command-in-vim
Eric Leschinski

2
ดี นี่คือการทำแผนที่กับ F6 หากมีคนต้องการใช้silent! nmap <F6> :SyntasticToggleMode<CR>
lfender6445

88

ฉันได้ปิดใช้งาน Syntastic โดยค่าเริ่มต้นและเปิด / ปิดการตรวจสอบข้อผิดพลาดด้วยสิ่งต่อไปนี้ใน. vimrc ของฉัน:

let g:syntastic_mode_map = { 'mode': 'passive', 'active_filetypes': [],'passive_filetypes': [] }
nnoremap <C-w>E :SyntasticCheck<CR>

เมื่อฉันต้องการใช้การตรวจสอบข้อผิดพลาดฉันเพียงแค่กด: ctrl-w E


สิ่งนี้มีประโยชน์มากขอบคุณ .. ฉันได้เพิ่มแนวคิดในการกำหนดค่าของฉันแล้ว +1
jdt

3
ฉันได้เพิ่มสิ่งนี้ให้แล้ว.vimrcเช่นกัน อย่างไรก็ตามถ้าฉันกดCtrl-w E Syntastic จะปรากฏขึ้นเป็นวินาทีและหายไปอีกครั้ง มีความคิดเห็นว่าเกิดอะไรขึ้นและ / หรือจะติดตามสิ่งนี้อย่างไร
Anticom

ฉันคิดว่าการทำแผนที่ไม่ควรมี: SyntasticToggleMode <CR> การลบนั้นควรแก้ไขปัญหาของคุณ @Anticom
Achal Dave

@AchalDave ไม่ได้แก้ไขให้ฉัน
Anticom

หืมไม่รู้ นี่คือลักษณะการตั้งค่า syntastic ของฉัน: github.com/achalddave/dotfiles/blob/…
Achal Dave

33

ทางเลือกอื่นสำหรับคำตอบของเจมี่และพระกิตติคุณเราสามารถปิดการใช้งานตัวตรวจสอบได้อย่างสมบูรณ์โดยระบุตัวตรวจสอบดังนี้:

let g:syntastic_html_checkers=['']

ตรวจสอบให้แน่ใจsyntastic_check_on_openว่าไม่ได้ตั้งค่าเป็น 1 ซึ่งจะสวนทางกับบรรทัดด้านบน:

let g:syntastic_check_on_open = 0

10

คุณสามารถปิด Syntastic สำหรับทั้งเซสชันได้ (ตามคำตอบของJamie Schembri ) แต่ถ้าเป็นปัญหากับไฟล์ "ไฟล์ใหญ่มาก" คุณอาจต้องปิดใช้งานบัฟเฟอร์เพียงไฟล์เดียว

ไฟล์บางไฟล์ที่ฉันทำงานในที่ทำงานนั้นไม่สอดคล้องกับ PSR อย่างสิ้นหวัง ส่วนใหญ่ทำงานได้ดี ฉันกำลังมองหาฟังก์ชันเพื่อปิดใช้งาน Syntastic สำหรับไฟล์ปัญหาเหล่านั้นเท่านั้น รูปแบบที่ง่ายกว่าของโซลูชัน ' SyntasticDisableToggle ' ที่อธิบายโดยผู้สนับสนุนหลักเหมาะสำหรับฉัน:

"disable syntastic on a per buffer basis (some work files blow it up)
function! SyntasticDisableBuffer()
    let b:syntastic_skip_checks = 1
    SyntasticReset
    echo 'Syntastic disabled for this buffer'
endfunction

command! SyntasticDisableBuffer call SyntasticDisableBuffer()

เนื่องจากสิ่งนี้ไม่ส่งผลกระทบต่อบัฟเฟอร์อื่น ๆ ฉันสามารถใช้ปลั๊กอินที่ยอดเยี่ยมนี้ต่อไปกับไฟล์อื่น ๆ (บางส่วน) ที่เข้ากันได้ที่ฉันเปิดไว้


6

สิ่งนี้ไม่ได้ตอบคำถามโดยตรง แต่สามารถช่วยได้นอกเหนือจากเซสชันปัจจุบัน หากคุณมีไฟล์ที่คุณต้องแก้ไขบ่อยครั้ง แต่คุณรู้ว่าคุณมักจะต้องการปิดใช้งาน Syntastic (เช่นมีข้อผิดพลาดหลายพันข้อและคุณตั้งใจที่จะไม่แก้ไขและปล่อยทิ้งไว้ซึ่งส่งผลให้ UI ช้าลง) จากนั้นอย่างถาวร การขึ้นบัญชีดำสะดวกมาก

ในการดำเนินการนี้ให้ใช้syntastic_ignore_filesตัวเลือก มันซ่อนอยู่ในความช่วยเหลือ แต่คุณสามารถใช้ regexes กับคุณสมบัตินี้กับไฟล์บัญชีดำได้

                                                    'syntastic_ignore_files'
Default: []
Use this option to specify files that syntastic should never check.  It's a
list of regular-expression patterns.  The full paths of files (see ::p) are
matched against these patterns, and the matches are case sensitive. Use \c
to specify case insensitive patterns.  Example:
    let g:syntastic_ignore_files = ['\m^/usr/include/', '\m\c\.h$']

1
ใช้งานได้ดี! ไม่ใช่สิ่งที่ถามถึงแม้ว่า นี่คือ +1 เพื่อเป็นประโยชน์
bschlueter

5

การตั้งค่าต่อไปนี้ใช้ได้ผลสำหรับฉัน

let g:syntastic_mode_map = { 'mode': 'passive', 'active_filetypes':   [],'passive_filetypes': [] }
noremap <C-w>e :SyntasticCheck<CR>
noremap <C-w>f :SyntasticToggleMode<CR>

Ctrl-w + e shall enable checking
Ctrl-w + f shall disable checking 

To disable warnings use: 
let g:syntastic_quiet_messages={'level':'warnings'}

4

อีกตัวเลือกหนึ่งที่จะปิดการตรวจสอบการบัฟเฟอร์เดียว (โดยไม่คำนึงถึง filetype) :let b:syntastic_mode="passive"คือการใช้งาน เนื่องจากไม่ใช่การสลับจึงจะใช้งานได้แม้ว่าบัฟเฟอร์จะอยู่ในโหมดพาสซีฟก็ตาม

:bufdo let b:syntastic_mode="passive"หากคุณต้องการชั่วคราวปิดการตรวจสอบประเภทไฟล์ทั้งหมดในบัฟเฟอร์ที่ทุกท่านสามารถใช้ ฉันตั้งค่าการแมปเพื่อปิด / เปิดการตรวจสอบบัฟเฟอร์ทั้งหมด:

nnoremap <leader>sN :bufdo let b:syntastic_mode="passive"<cr>
nnoremap <leader>sY :bufdo unlet b:syntastic_mode<cr>

สิ่งนี้มีประโยชน์อย่างยิ่งเมื่อทำ:wqaกับบัฟเฟอร์แบบเปิดจำนวนมาก


4

เช่นเดียวกับที่กล่าวถึงโดยคนอื่น ๆ บางส่วนนี่คือส่วน vimrc ที่จะปิด Syntastic ตามค่าเริ่มต้น แต่จะแมปปุ่ม (ที่นี่คือ F10) เพื่อตรวจสอบไฟล์ปัจจุบันและใช้ปุ่มเดียวกับการสลับเพื่อปิดการตรวจสอบ ช้าหน่อย แต่ได้ผล

let g:syntastic_check_on_open = 0                                                                                 
let g:syntastic_check_on_wq = 0
let g:syntastic_mode_map = {'mode':'passive'}
nnoremap <F10> :SyntasticCheck<CR> :SyntasticToggleMode<CR> :w<CR>


0

ฉันใช้ Ale และ Syntastic เป็นหลักเนื่องจากการรองรับ Rust Ale ยังไม่ค่อยดีนัก ในกรณีของฉันฉันใช้ vim-plug package manager ฉันตั้งค่าเพื่อไม่ให้เปิดใช้งานสิ่งเหล่านี้โดยอัตโนมัติ ฉันใช้กลยุทธ์การสลับแทน

ในกรณีของฉันฉันต้องการ Ale โดยค่าเริ่มต้นและ Syntastic สำหรับ Rust

ในส่วนปลั๊กอินของ vimrc ฉันทำสิ่งนี้

Plug 'w0rp/ale', { 'on': 'ALEToggle' }
Plug 'vim-syntastic/syntastic', { 'on': 'SyntasticToggleMode' }

หลังจากนั้นฉันตั้งค่าการผูกเพื่อเปิดใช้งาน linter (ฉันใช้ l เป็น mnemoic สำหรับ linter)

nnoremap <leader>l :ALEToggle<CR>

สำหรับ Rust ฉันจะแทนที่การผูกเดียวกัน

au FileType rust noremap <buffer> <leader>l :SyntasticToggleMode<CR>

นอกจากนี้ฉันต้องลบข้อมูล statusline ออกจาก vimrc มิฉะนั้นฉันจะได้รับข้อผิดพลาดเมื่อโหลดโดยปิดใช้งาน Syntastic

" Syntastic stuff
"set statusline+=%#warningmsg#
"set statusline+=%{SyntasticStatuslineFlag()}
"set statusline+=%*

let g:rustfmt_autosave = 1
let g:syntastic_always_populate_loc_list = 1
let g:syntastic_auto_loc_list = 1
let g:syntastic_check_on_open = 1
let g:syntastic_check_on_wq = 0
" Syntastic stuff

ความนับถือ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.