คุณใช้คุณลักษณะ Quickfix ของกลุ่มอย่างไร


125

ฉันเป็นผู้ใช้ Vim หน้าใหม่และฉันพบว่าเส้นโค้งการเรียนรู้ค่อนข้างสูงชัน (อย่างน้อยสำหรับฉัน) ฉันเพิ่งติดตั้งสคริปต์กลุ่มนี้สำหรับการตรวจสอบข้อผิดพลาด JavaScriptLint ซึ่งแสดงข้อผิดพลาดในหน้าต่าง Quickfix ของกลุ่มเมื่อฉันบันทึกบัฟเฟอร์

อย่างไรก็ตามฉันไม่รู้ว่าจะทำอย่างไรต่อไป .. ฉันจะ 'เลื่อน' ดูข้อผิดพลาดทั้งหมดได้อย่างไร? ฉันจะปิดหน้าต่าง Quickfix ได้อย่างไร ฉันจะตรวจสอบข้อผิดพลาดหลังจากทำการเปลี่ยนแปลงรหัสของฉันได้อย่างไร

ฉันได้ดูเอกสาร vim quickfix แล้ว แต่จำนวนคำสั่งนั้นล้นมากและดูเหมือนจะไม่พบสิ่งที่ต้องการ ความช่วยเหลือใด ๆ จะได้รับการชื่นชม

คำถามข้างเคียง: มีวิธีใดบ้างที่จะให้ javascriptlint ตรวจสอบข้อผิดพลาด js สำหรับโค้ดที่อยู่ในไฟล์. html

ขอบคุณ!

คำตอบ:


148

มีคำสั่งมากมายสำหรับการแก้ไขด่วนตามที่คุณได้กล่าวไว้ แต่ฉันมักจะพบว่าฉันใช้ชุดย่อยเพียงเล็กน้อยเท่านั้น:

:copen " Open the quickfix window
:ccl   " Close it
:cw    " Open it if there are "errors", close it otherwise (some people prefer this)
:cn    " Go to the next error in the window
:cp    " Go to the previous error in the window
:cnf   " Go to the first error in the next file
:.cc   " Go to error under cursor (if cursor is in quickfix window)

ฉันมักจะใช้สิ่งนี้กับ:makeและ:vimgrepดังนั้นฉันจึงไม่สามารถแสดงความคิดเห็นเกี่ยวกับตัวตรวจสอบผ้าสำลี Javascript ได้ แต่สิ่งนี้จะช่วยให้คุณเริ่มต้นได้

เกี่ยวกับการใช้งานทั่วไปของ JavascriptLint ฉันไม่ใช่โปรแกรมเมอร์จาวาสคริปต์ แต่ดูเหมือนว่าสคริปต์จะแสดงฟังก์ชันที่เรียกว่า "JavascriptLint" ดังนั้นหากคุณต้องการเรียกด้วยตนเองคุณสามารถ:call JavascriptLint()ใช้ได้ อย่างไรก็ตามมันใช้งานได้กับดิสก์สำเนาของไฟล์ดังนั้นจึงต้องบันทึกไว้ก่อน หาก (และเฉพาะในกรณีที่) บรรทัดคำสั่งjslทำงานกับไฟล์ html คุณควรจะสามารถใช้:call JavascriptLint()กับไฟล์ html เพื่อตรวจสอบจาวาสคริปต์ภายในได้ คุณยังสามารถทำได้:

autocmd BufWritePost,FileWritePost *.html call JavascriptLint()

เพื่อทำให้เป็นอัตโนมัติ หากjslไม่รองรับไฟล์ html (ย่อมาจากการแก้ไขแอปพลิเคชันหรือขอให้ผู้เขียนแก้ไข) อาจเป็นสาเหตุที่หายไป ...


ขอบคุณคำสั่งเหล่านั้นเป็นการเริ่มต้นที่ดีฉันจะต้องเล่นอีกสักหน่อยและคุ้นเคยกับวิธีการทำงาน ถ้าฉันใช้: cn เพื่อไปที่ข้อผิดพลาดในหน้าต่าง qf ฉันสามารถข้ามไปที่หน้าต่างพร้อมรหัสโดยไม่ต้องออกจากหน้าต่าง qf ได้หรือไม่ มันสามารถข้ามไปยังบรรทัดที่มีข้อผิดพลาดได้หรือไม่? และข้อเสนอแนะของคุณในการใช้: call ใช้งานได้อย่างไรก็ตามตามลิงก์ <script src> ซึ่งไม่ใช่สิ่งที่ฉันต้องการ
hora

@hora: :cnไม่ควรปิดหน้าต่าง qf แต่จะเปลี่ยนเป็นหน้าต่างที่มีข้อผิดพลาด: นี่คือสิ่งที่คุณหมายถึง "กระโดด" หรือไม่? คุณสามารถเปลี่ยนกลับโดยใช้Ctrl-W pหรือ:wincmd pเพื่อให้คุณสามารถทำ:command! CN :cn | wincmd p<CR>หรืออะไรทำนองนั้น (ยังไม่ทดลอง) สิ่งนี้ควรให้:CNคำสั่งที่ไปยังข้อผิดพลาดถัดไปโดยไม่ต้องออกจากหน้าต่าง Quickfix หรือคุณสามารถทำบางสิ่งเช่น:au BufWinEnter quickfix nmap <buffer> <Enter> :.cc | wincmd p<CR>(ยังไม่ทดสอบอีกครั้ง) และใช้ Enter เพื่อเลือกข้อผิดพลาดโดยไม่ต้องออกจากหน้าต่าง Quickfix
DrAl

1
สำหรับมือใหม่ "You can also do:" somecodehere "to automate it" ไม่ได้มีความหมายมากนัก หมายความว่าต้องวางบรรทัดโค้ดที่แสดงไว้ใน ~ / .vimrc (_VIMRC บน windows AFAIK) และจากการเริ่มต้นครั้งถัดไปของ VIM ทุกครั้งที่บันทึกไฟล์คำสั่งนี้จะถูกเรียกใช้ ขวา?
Беров

63

วิธีที่ง่ายที่สุดที่จะนำทางรายการ QuickFIX (หรือรายการสถานที่สำหรับเรื่องที่) เป็นปลั๊กอินunimpaired

เมื่อหน้าต่าง QuickFIX เป็นประชากร[qและ]qก้าวไปข้างหน้าและด้านหลัง (ตามลำดับ) ในรายการ QuickFIX [Qและ]Qไปที่จุดเริ่มต้นและจุดสิ้นสุด (ซึ่งมีประโยชน์อย่างยิ่งหากคุณมีเพียงรายการเดียวในรายการสิ่งนี้ทำให้กลุ่มคนบ่น[qและ]q) ดังนั้นขั้นตอนการทำงานคือ:

  1. เรียกใช้คำสั่งใด ๆ จะเติมรายการแก้ไขด่วน
  2. พิมพ์[Qเพื่อไปที่รายการแรก
  3. เลื่อนดูรายการต่อไป (ถ้ามี) ด้วย[qและ]q

หากคุณใช้ Syntastic คุณจะได้รับรายชื่อสถานที่ตั้งแทนรายการแก้ไขด่วน ไม่มีปัญหา; เพียงแค่การใช้งาน[L, ]L, [lและ]lในทางเดียวกัน

unimpairedมีการแมปที่ใช้งานง่ายอื่น ๆ มากมายเช่นกัน - [eและ]e"ฟอง" ขึ้นและลง[<Space>และ]<Space>แทรกบรรทัดว่างด้านบนและด้านล่าง ฯลฯ ฉันแปลกใจที่ไม่มีใครพูดถึงที่นี่มาก่อน นั่นอาจเป็นเพราะไม่มีอยู่จนถึงเดือนมกราคม 2010 แม้ว่าคำถามจะถูกถามในปี 2009


27

ใส่สองบรรทัดต่อไปนี้ในไฟล์. vimrc ของคุณ:

map <C-j> :cn<CR>
map <C-k> :cp<CR>

ตอนนี้คุณสามารถนำทางผ่านข้อผิดพลาดโดยใช้ ctrl-j และ ctrl-k ซึ่งเลียนแบบคำสั่งการเคลื่อนไหวลงและขึ้นมาตรฐาน j และ k


1
<c-j>บางครั้ง (ขึ้นอยู่กับขั้ว ?!) เป็นความผิดพลาดหรือทั้งหมดไม่ทำงานเพราะมันหมายถึงเช่นเดียวกับ <NL> // ist ที่ง่ายที่สุดในการที่จะใช้<c-n>และ<c-p>แทน // มิฉะนั้น: stackoverflow.com/questions/8304421/...
eli

ฉันตัดสินใจใช้ F8 และ F9 แบบนี้noremap <F7> :cprevious<CR>และnoremap <F8> :cnext<CR>ใน.vimrc
Flimm

ฉันใช้<C-j>และ<C-k>เพื่อนำทางระหว่างกลุ่มแยกและ tmux บานหน้าต่างกับกลุ่ม tmux นำทาง การผสมผสาน<C-M-j>และ<C-M-k>อาจเป็นอีกทางเลือกหนึ่ง
Paul Rougieux

24

คุณยังสามารถใช้:cc 2(หรือหมายเลขอื่น ๆ ) เพื่อข้ามไปได้ในกรณีนี้ข้อผิดพลาดที่สองในหน้าต่างแก้ไขด่วน การนำทางด้วย:cn, :cc 4ฯลฯ จะวางเคอร์เซอร์บนบรรทัดในคำถาม


8

แนวทางปฏิบัติที่ดีที่สุดในการรวมการตรวจสอบไวยากรณ์ JavaScript คือการใช้ปลั๊กอินSyntastic Vimซึ่งใช้หน้าต่างรายการตำแหน่งของ Vim (ซึ่งขนานกับหน้าต่างQuickfix )

ฉันได้เขียนคำตอบสำหรับคำถามนี้แล้วและคำถามนี้อธิบายถึงวิธีการทำรวมถึงวิธีรับซอร์สโค้ดเรียกดู / แท็กรายการสำหรับกลุ่มโดยใช้jshint.com ที่ขับเคลื่อนโดยชุมชน(ซึ่งดีกว่า JSLint IMO) และDoctorJSของ Mozilla (เดิมชื่อjsctags )


8

บางทีตัวเลือกนี้ไม่ได้อยู่เมื่อคำถามนี้ถูกเขียน (หรือบางทีฉันอายตัวเองเพราะมีบางสิ่งบางอย่างในของฉัน.vimrcที่ทำให้เรื่องนี้เกิดขึ้น) แต่เมื่อฉันได้รับQuickfix Listฉันเพียงแค่นำทางด้วยjและkจากนั้นกด<CR>(เช่นปุ่ม Enter) เพื่อข้ามไปยังตำแหน่งนั้นในไฟล์

จากนั้นกลับไปที่Quickfix ListI พิมพ์Ctrl+ W jสำหรับ "move down a window" แล้วฉันก็กลับมา

ในที่สุดเมื่อฉันทำเสร็จแล้วฉันก็พิมพ์:qเหมือนจะปิดหน้าต่างปกติ


นั่นคือสิ่งที่ฉันต้องการจะทำ แต่ฉันได้รับ "ไม่สามารถทำการเปลี่ยนแปลงได้" แก้ไขได้ "ปิดอยู่"
rtf

1
คุณอาจใส่คีย์ Enter ของคุณมากเกินไป ตัวอย่างเช่นฉันมีnmap <CR> o<Esc>ดังนั้นฉันสามารถเพิ่มบรรทัดใหม่ในโหมดปกติ
Taavi Ilves

6

หน้าต่าง Quickfix ทำงานเป็นส่วนใหญ่เหมือนกับหน้าต่าง vim อื่น ๆ : j ลงบรรทัด k ขึ้นบรรทัด: cn เพื่อข้ามไปยังข้อผิดพลาด / คำเตือนถัดไป ฯลฯ

ทดลอง!


1
+1 สำหรับการทดลองนั่นเป็นวิธีที่ฉันเรียนรู้ทุกอย่างมาก
hora

4

นอกเหนือจากคำตอบที่ยอดเยี่ยมของ @DrAl เกี่ยวกับวิธีเปิดและปิดหน้าต่างด่วนและนำทางระหว่างรายการต่างๆฉันได้สร้างภาพเพื่อแสดงคำสั่งการนำทางแก้ไขด่วนอื่น ๆ

กลุ่มของไฟล์ 3 ไฟล์ด้านล่างแสดงถึงชุดของผลลัพธ์การแก้ไขด่วนเช่นจาก vimgrep ใหม่กว่าและเย็นกว่าสำหรับการผ่านชุดผลการแข่งขันในประวัติศาสตร์ ใส่คำอธิบายภาพที่นี่

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