เกิดข้อผิดพลาดในการนำทางตำแหน่งใน Vim Syntastic


11

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

สิ่งที่ฉันไม่สามารถหาได้คือวิธีการนำทางโดยตรงระหว่างข้อผิดพลาด

ฉันเข้าใจว่า syntastic กำลังโหลดข้อผิดพลาดลงในรายการตำแหน่ง Vim และฉันสามารถทำให้ปรากฏขึ้นได้:lopenสลับไปที่หน้าต่างนั้นเลือกบรรทัดแล้วกดEnterและถูกนำไปที่หน้าต่างหลักในบรรทัดที่ถูกต้อง

สิ่งที่ฉันต้องการจะทำคือไม่มีรายการที่เปิดอยู่เพียงแค่แก้ไขในไฟล์ที่มีข้อผิดพลาดและกดแป้นพิมพ์ลัดเพื่อข้ามไปที่ใดก็ตามที่คำเตือน / ข้อผิดพลาดถัดไปคือ

เป็นไปได้ไหม เอกสารแนะนำว่า:lNextและ:lpreviousมีความเกี่ยวข้อง E553: No more itemsแต่พวกเขาได้รับฉัน

คำตอบ:


12

:lne[xt]และ:lp[revious]เป็นทางลัดที่ถูกต้อง

แต่:lN[ext]ไม่ได้เป็นเช่นเดียวกับ:lne[xt]: :lp[revious]มันเป็นทางเลือกที่จะ

ข้อความที่คุณได้รับเนื่องจากความจริงที่ว่าคำสั่งเหล่านี้ไม่ได้ล้อมรอบเมื่อคุณไปถึงข้อผิดพลาดสุดท้ายหรือข้อผิดพลาดแรก

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

อ่าน:h location-listรายการคำสั่งทั้งหมด


มีวิธีที่จะทำให้พวกเขาห่อ?
BallpointBen

ไม่ไม่มีวิธีให้พวกเขาห่อ มีวิธีแก้ปัญหาห่อหุ้มที่หลากหลายในหัวข้อนี้และอื่น ๆ ในรูปแบบของปลั๊กอินที่มี ปลั๊กอินตัวเองของฉันเป็นกลุ่ม-QFมีผู้ การใช้งานอยู่ที่นี่หากคุณไม่ต้องการปลั๊กอินที่เต็มเปี่ยมสำหรับการแมปสองสามครั้ง
romainl

6

หากมีปัญหาเดียวในรายการ:llจะนำทางไปยังมัน

นี่คือการแก้ไขสำหรับ. vimrc ของคุณที่จะทำให้แป้นแมป:lnextและ:lprevทำงานอย่างถูกต้องในกรณีที่มีปัญหาเดียวเท่านั้น (โดยการข้ามไปที่) เปลี่ยนการแม็พตอนท้ายเป็นลำดับคีย์ที่คุณต้องการ

(จากhttps://github.com/scrooloose/syntastic/issues/32 )

" Fix syntastic error jumping
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> e[  <Plug>LocationPrevious
nmap <silent> e]  <Plug>LocationNext

นี่คือน่าเกลียดถ้าดำเนินการก่อนที่จะมีการระบุรายชื่อสถานที่แรกหรือหลังจากประชากรที่ไม่มีข้อผิดพลาด ดูคำตอบของฉันสำหรับการแก้ไข
Tom Hale


1

เขียนวันที่ 30 ตุลาคม 2560

ฉันจะแนะนำให้ติดตั้งปลั๊กอินvim-unimpaired

นี่เป็นข้อมูลอ้างอิงที่ดีเกี่ยวกับรายการ vimโดยทั่วไปอีกด้วย

Syntastic ใช้locationsรายการ คำสั่งด้านล่าง (การแมปที่มีเครื่องหมายดอกจันมาจากunimpaired.vimปลั๊กอินที่กล่าวถึงข้างต้น)

ป้อนคำอธิบายรูปภาพที่นี่


0

อนุญาตการล้อมรอบจากตำแหน่งแรกไปยังตำแหน่งข้อผิดพลาดสุดท้าย (และในทางกลับกัน):

" Allow :lprev to work with empty location list, or at first location
function! <SID>LocationPrevious()
  try
    lprev
  catch /:E553:/
    lfirst
  catch /:E\%(42\|776\):/
    echo "Location list empty"
  catch /.*/
    echo v:exception
  endtry
endfunction

" Allow :lnext to work with empty location list, or at last location
function! <SID>LocationNext()
  try
    lnext
  catch /:E553:/
    lfirst
  catch /:E\%(42\|776\):/
    echo "Location list empty"
  catch /.*/
    echo v:exception
  endtry
endfunction

สิ่งนี้จะจับข้อผิดพลาดต่อไปนี้:

E42: No Errors
E776: No location list

และอ่อนโยนพูดว่า: Location list empty

(เครดิตถึงlcd074 )


ที่จริงแล้วมีวิธีแก้ปัญหาที่ซ้ำซ้อนน้อยกว่าแต่ก็สามารถทำได้ด้วย `เสียงก้อง 'รายการตำแหน่งว่างเปล่า' '
Tom Hale

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