vim - เปิดไฟล์และหมายเลขบรรทัด goto โดยใช้ <filename>: <line nbr>:


21

เครื่องมือต่างๆเช่นgrep, py.testฯลฯ ... ใช้รูปแบบ<FileName>:<line number>:ไปยังจุดเกิดข้อผิดพลาด ตัวอย่างเช่น:

; grep -Hn Common setup.cfg
setup.cfg:11:    Common

ฉันจะแก้ไข vim และ gvim ได้อย่างไรเพื่อที่ฉันจะสามารถเรียกใช้เช่นนั้นได้:

gvim setup.cfg:11:

แทน

gvim setup.cfg +11

ฉันรู้ว่าฉันสามารถเขียนเชลล์สคริปต์ขนาดเล็กที่จะแยกวิเคราะห์สิ่งต่าง ๆ แต่ฉันสงสัยว่ามีวิธีที่ง่ายขึ้น


2
สิ่งนี้ไม่ได้เป็นแบบอะนาล็อก แต่ vim มีคุณสมบัติในการโหลดเอาต์พุตจาก grep หรือ (ตัวอย่าง) ข้อผิดพลาดคอมไพเลอร์จาก make และนำทางระหว่างพวกเขา ดู:help quickfixข้อมูลเพิ่มเติม
Random832

คำตอบ:


16

คุณสามารถใช้ไฟล์: ปลั๊กอินบรรทัดใช้ได้ที่นี่ซึ่งทำสิ่งที่คุณต้องการ ...


1
แน่นอนว่ามันทำและด้วยโบนัสเพิ่มที่คุณสามารถใช้vundleเพื่อติดตั้ง
Sardathrion - Reinstate Monica

1
ปลั๊กอินบรรทัดไฟล์อ้างอิงมีปัญหาบางอย่างรวมถึงความเสียหายเมื่อใช้งานหน้าแท็บ vim-fetchทำในสิ่งที่ไฟล์บรรทัดทำ แต่ดีกว่า
Lekensteyn

9

ไม่มีทางและฉันคิดว่าสคริปต์เป็นวิธีเดียว สาเหตุที่เกิดอะไรขึ้นถ้าคุณมีไฟล์ชื่อ setup.cfg: 11 และต้องการแก้ไขมัน?

นี่คือสคริปต์ด่วนที่ทำในสิ่งที่คุณต้องการในฐานะผู้เผยแพร่ทางอินเทอร์เน็ต ...

editline() { vim ${1%%:*} +${1##*:}; }

ขออภัยนี่ไม่ถูกต้อง: จะเกิดอะไรขึ้นถ้าคุณมีไฟล์ชื่อ+11? แน่นอนคุณสามารถใช้--สำหรับการที่
Sardathrion - Reinstate Monica

2
คุณสามารถแก้ไขไฟล์ +11 ได้โดยพูดคำสั่ง vim ./+11
Julian

3

ด้วยVundle.vimเพิ่มสิ่งนี้ใน.vimrc:

Plugin 'bogado/file-line'

@ Sardathrion: คุณมีปัญหาใดบ้าง
Dorian

ฉันย้ายไปที่ neovim และมีปัญหามากมายที่ทำเครื่องหมายโมดูลอื่น ๆ (หรือสิ่งที่ neovim เรียกพวกเขา) ว่าเข้ากันไม่ได้
Sardathrion - Reinstate Monica

0

คุณยังสามารถใช้นามแฝงดังกล่าว:

alias gd 'set number=`echo \!:1 | perl -pe "s/([0-9]*:)?(.+)[,:]([0-9]+).*/\3/"`; set file=`echo \!:1 | perl -pe "s/([0-9]*:)?(.+)[,:]([0-9]+).*/\2/"`; eval "if ($number == $file) then \\
   gvim $file \\
else \\
   gvim $file +$number \\
endif"'
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.