vi commandline, goto line และคอลัมน์


17

ฉันได้ผสมการใช้emacsและvi( vim) มาเป็นเวลานาน แต่ละคนมีข้อได้เปรียบ ฉันแยกวิเคราะห์ข้อผิดพลาดจากการคอมไพล์เช่นกระบวนการและรับหมายเลขบรรทัดและคอลัมน์ แต่ฉันสามารถใช้emacsเพื่อไปที่บรรทัดและคอลัมน์โดยตรงเท่านั้น:

emacs +15:25 myfile.xml

กับviฉันมีเพียงหมายเลขบรรทัด (ตามหน้าคน)

vi +15 myfile.xml

มีตัวเลือกในการเลื่อนตำแหน่งเคอร์เซอร์บนรูปแบบ ( vi +/pattern myfile.xml) ซึ่งฉันไม่เคยทำงาน แต่นั่นจะไม่ช่วยฉันเพราะรูปแบบอาจไม่เกิดขึ้นครั้งแรกในไฟล์เสมอ

ฉันจะเริ่มต้นviเพื่อไปที่คอลัมน์ 25 ที่บรรทัด 15 ของไฟล์ของฉันได้อย่างไร ฉันสามารถทำบางอย่างด้วย-cตัวเลือกได้ไหม


3
เนื่องจากคุณติดแท็กเป็นกลุ่มมีคุณถือว่าเป็นquickfixระบบซึ่งไหลเรียบเรียงจากภายในเป็นกลุ่มแยกออกข้อผิดพลาดที่แสดงรายการของข้อผิดพลาด (การสำรวจด้วย:cp, :cn, :clคำสั่ง) และตำแหน่งเคอร์เซอร์ของคุณที่เป็นคนแรก?
Random832

หากคุณเปิดไฟล์ใน vi และพิมพ์:15มันจะข้ามไปที่บรรทัดที่ 15 .. หวังว่านี่จะช่วยคุณได้
code ninja

คำตอบ:


17

คุณสามารถใช้ได้:

vi '+normal 15G25|'  myfile.xml

2
คำอธิบาย: คำสั่งส่วนใหญ่ (เช่นตัวอักษรส่วนใหญ่) ใน vi สามารถนำหน้าด้วยตัวเลข (หรือช่วง) เพื่อเปลี่ยนพฤติกรรมเริ่มต้นหรือเพื่อทำซ้ำ (หรือใช้กับช่วงที่ระบุ) ภายใน vi ในโหมดคำสั่งคุณสามารถ15Gไปที่บรรทัดที่ 15 และ25|ไปที่ col 25 และ Christa จะแสดงวิธีการเดียวกันจาก command-line
Olivier Dulac

7

ด้วยปลั๊กอินไฟล์บรรทัดคุณสามารถผนวกบรรทัดและคอลัมน์เข้ากับชื่อไฟล์ได้ทั้งเมื่อเรียกใช้ Vim และข้างในด้วยคำสั่งเช่น:edit:

vim myfile.xml:15:25

ดีที่จะรู้ที่มีอยู่นี้ แต่ผมคิดว่าผมจะใช้คำตอบที่ไม่ต้องใช้ปลั๊กอินเสริม
Dominique

@Dominique คุณสามารถvim myfile.xml +15เรียงแถวโดยไม่ต้องใช้ปลั๊กอิน แต่ไม่ใช่คอลัมน์เท่าที่ฉันรู้
Izkata

5

เพียงเพื่อความสนุกสนานมีอยู่-c 'normal 14j24l'ซึ่งจะทำให้คุณบรรทัดที่ 15 อักขระ 25


4

ฉันไม่รู้เกี่ยวกับ-cตัวเลือก แต่คุณควรจะทำ:

vi '+cal cursor(15,25)' myfile.xml

(ตรวจสอบให้แน่ใจว่าคุณพูดเพราะวงเล็บ())


cursor()ใช้ดัชนีไบต์สำหรับคอลัมน์ แต่โดยปกติจะนับจำนวนอักขระ
Ingo Karkat

@IngoKarkat นั่นสำคัญจริงๆหรือ ข้อความคือ UTF-8
Dominique

2
มันมีความสำคัญสำหรับอักขระที่ไม่ใช่ ASCII ซึ่งแสดงโดยมากกว่าหนึ่งไบต์ นอกจากนี้อักขระแท็บและตัวควบคุมมักใช้คอลัมน์แสดงผลมากกว่าหนึ่งคอลัมน์
Ingo Karkat

2

เร็ว ๆ นี้:

-c command 

รันคำสั่ง ex ที่กำหนดเมื่อเริ่มต้น อนุญาตให้ใช้หนึ่งอ็อพชัน -c เท่านั้นสำหรับ vi ; Vim ยอมรับมากถึง 10 ตัวเลือกรุ่นเก่ากว่านี้+commandยังคงรองรับ

+commandมีเดียวเดียวกันex commandข้อ จำกัด viเมื่อใช้

+/patternจำกัด viยังเป็นหนึ่งเดียวกับคำสั่ง

(นำมาจากvim and ex editor )


1

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

if has("autocmd")
  au BufReadPost * if line("'\"") > 1 && line("'\"") <= line("$") | exe "normal! g'\"" | endif
endif
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.