Vi & Vim

คำถามและคำตอบสำหรับผู้ที่ใช้ตระกูล vi และ Vim ของเครื่องมือแก้ไขข้อความ

4
เมื่อใดควรใช้: grep และ: vimgrep in vim?
ในกลุ่ม:makeทำให้ง่ายต่อการสร้างและแก้ไขข้อผิดพลาดและ:grepและพฤติกรรมเช่น:vimgrep :makeแต่ทำไมคุณถึงต้องการคำสั่งทั้งสองนี้? ทำไมไม่เพียงค้นหารูปแบบและเพียงกดn? อะไรคือข้อดีของพวกเขามากกว่าเพียงแค่การค้นหา?

4
ฉันจะป้องกันกลุ่มจากการซ่อนสัญลักษณ์ใน markdown และ json ได้อย่างไร
นี่ทำให้ฉันบ้าคลั่ง :set ft=text หากต้องการดูบางอย่างลิงก์ทั้งหมดจะหายไปใน markdown และเครื่องหมายคำพูดใน JSON จะปิดการใช้งานนี้ครั้งเดียวและทั้งหมดได้อย่างไร

1
ทำไม Vim regex ไม่อนุญาตการจับมากกว่า 9 กลุ่ม
จาก:h E65นั้นเราจะเห็นว่า Vim ไม่อนุญาตให้มีกลุ่มการดักจับมากกว่า 9 กลุ่มในคำสั่งการแทนที่ ตัวอย่างเช่นคำสั่งต่อไปนี้จะทำงาน: s/\v(a)(b)(c)(d)(e)(f)(g)(h)(i)/\9\8\7\6\5\4\3\2\1 แต่อันนี้ที่มีกลุ่มการดักจับมากกว่าหนึ่งกลุ่มจะล้มเหลว: s/\v(a)(b)(c)(d)(e)(f)(g)(h)(i)(j)/\10\9\8\7\6\5\4\3\2\1 คำถามของฉันไม่เกี่ยวกับสาเหตุที่มันล้มเหลว (มันเป็นขีด จำกัด ของ Vim) แต่ทำไม Vim ถึงมีขีด จำกัด นี้อยู่ด้วย? นอกจากนี้ฉันทราบว่า regex ชีวิตจริงที่มีกลุ่มดักจับมากกว่า 9 กลุ่มน่าจะเป็นเรื่องที่น่าประหลาดใจที่จะอ่านและดูแล แต่ฉันก็ยังสงสัยอยู่

3
คุณเยื้องอย่างไร> <โดยไม่ออกจากโหมดภาพและสูญเสียการเลือกปัจจุบันของคุณ?
ฉันมักจะต้องเยื้องด้วยตนเอง แต่เมื่อฉันเข้าสู่โหมดภาพให้เลือกบรรทัดของฉันเพื่อเยื้องและกด&lt;หรือ&gt;ฉันออกจากโหมดภาพไม่ว่าฉันต้องการหรือไม่ ฉันอยากได้มันดังนั้นฉันจึงยังคงอยู่ในโหมดภาพและรักษาตัวเลือกและตำแหน่งเคอร์เซอร์ไว้เหมือนเดิม ฉันจะบรรลุสิ่งนี้ได้อย่างไร

1
ฉันจะออกจากโหมดป้อนข้อมูล ex ได้อย่างไร
:iผมติดอยู่ในโหมดการป้อนข้อมูลอดีตโดยการพิมพ์ ตอนนี้ฉันไม่สามารถใช้คำสั่งใด ๆ ทั้งหมดมีเพียงข้อความ การกดหลบหนีไม่ทำให้ฉันหลุดออกจากการพิมพ์:visualไม่ได้ทำให้ฉันหลุดพ้นจากการพิมพ์และvisualจะไม่ทำให้ฉันหลุดพ้น ฉันจะออกจากมันได้อย่างไร
16 ex-mode 

5
แทนที่ชุดสัญลักษณ์แสดงหัวข้อย่อยของเครื่องหมายดอกจันด้วยรายการหมายเลข
ลองนึกภาพฉันมีข้อความต่อไปนี้: some random stuff * asdf * foo * bar some other random stuff ฉันต้องการแทนที่สัญลักษณ์ดอกจันด้วยตัวเลขเช่น: some random stuff 1. asdf 2. foo 3. bar some other random stuff สิ่งนี้สามารถทำได้ในกลุ่ม?

2
วิธีทำให้ทั้งสอง windows มีความกว้างเท่ากันเมื่อทำการเปรียบเทียบไฟล์?
วิธีทำให้ทั้งสอง windows มีความกว้างเท่ากันเมื่อเปรียบเทียบไฟล์กับคำสั่ง vim -d file1 file2? วิธีทำให้หน้าต่างทั้งสองมีความกว้างเท่ากัน?

2
แก้ไขปุ่มลูกศรที่แสดง A, B, C, D ใน vi (ไม่ใช่ในกลุ่ม)
ฉันรู้ว่าในกลุ่มฉันสามารถเพิ่มได้ set nocompatible ใน.vimrcเพื่อหลีกเลี่ยงปุ่มลูกศรที่แสดง A, B, C, D ในโหมดแทรก แต่ฉันใช้ vi เวอร์ชัน 4.0 (gritter) 12/25/06 ฉันจะได้รับพฤติกรรมเดียวกันได้อย่างไร == แก้ไข == (1) ฉันใช้รุ่น vi จาก Arch Linuxซึ่งสร้างจากที่เก็บ CVSนี้(ส่งมอบครั้งล่าสุด 24 กุมภาพันธ์ 2550) ด้วยคำสั่งต่อไปนี้: make PREFIX=/usr LIBEXECDIR=/usr/lib/ex PRESERVEDIR=/var/lib/ex \ TERMLIB=ncurses FEATURES="-DCHDIR -DFASTTAG -DUCVISUAL -DMB -DBIT8" และวิทยานิพนธ์สามแพทช์: การแก้ไข tubesize-สั้น overflow.patch , navkeys.patchและรักษา-dir.patch == แก้ไข (2) …


2
ลำดับของ WinEnter, BufEnter, BufRead, Syntax, FileType คืออะไร
ฉันได้รับautocmd.txtความช่วยเหลือแล้ว แต่ข้อมูลเกี่ยวกับเรื่องนี้กระจัดกระจายและไม่ได้นำเสนอเสมอ (เช่นกับBufRead) ใครบางคนที่เข้าใจสิ่งนี้ดีสามารถเรียงลำดับเหตุการณ์เหล่านี้ได้ - ด้วยเงื่อนไขที่ระบุไว้ใน parantheses เช่น WinEnter BufEnter (if this window is for a different buffer than the current) และอื่น ๆ สำหรับการอ้างอิงได้ง่าย? หมายเหตุ(คัดลอกมาจากความคิดเห็นของฉันด้านล่าง) : ฉันไม่ได้พูดถึงคำอธิบายของแต่ละคนซึ่งก็โอเค แต่เกี่ยวกับวิธีที่พวกเขาโต้ตอบกันและในสิ่งที่พวกเขาเกิดขึ้น สำหรับตัวอย่างเช่นWinEnterพูดว่า "Vim เรียกใช้ Autocommands ของ BufEnter หลังจาก Autocommands ของ WinEnter" TabEnterกล่าวว่า "หลังจากเรียก WinEnter และก่อนที่จะเรียกใช้เหตุการณ์ BufEnter" มันทั้งหมดกระจัดกระจายไปในหลาย ๆ ที่ และบางครั้งก็ไม่ได้กล่าวถึงเลย (เช่นBufReadไม่ได้พูดถึงว่ามันทำงานหลังจาก BufEnter หรือก่อนหน้านี้ …

2
ขยาย f และ t เคลื่อนไหวไปยังบรรทัดถัดไป
มีวิธีที่t{char}และf{char}จะทำงานต่อไปในบรรทัดถัดไปหาก{char}ไม่ปรากฏในบรรทัดที่กำหนดหรือไม่ ฉันต้องการที่จะหลีกเลี่ยงการใช้/{char}&lt;CR&gt;ในการบันทึกการกดแป้นพิมพ์ 1 และได้มีการเน้นค้นหาโดยเฉพาะอย่างยิ่งเมื่อฉันต้องนี้ร่วมกับคำกริยา (เช่นdfa, ct.)

1
ฉันสามารถแมป Ctrl + ตัวอักษรตัวพิมพ์ใหญ่แยกต่างหากจาก Ctrl + ตัวพิมพ์เล็กหรือไม่
ฉันกำลังพยายามหาวิธีนำทางหน้าต่างได้เร็วขึ้นเล็กน้อยดังนั้นฉันจึงต้องการแมปต่อไปนี้: :nmap &lt;silent&gt; &lt;C-F&gt; :wincmd f&lt;CR&gt; ปัญหาคือสิ่งนี้แมป^f(ตัวพิมพ์เล็กf) ซึ่งแมปลง มีวิธีใดที่จะทำการแมปใหม่อีกครั้ง^F(ตัวพิมพ์ใหญ่F) และปล่อยให้^fเหมือนเดิมหรือไม่

1
เสร็จสิ้นชื่อไฟล์สำหรับไฟล์ระยะไกล
เพื่อนของฉันแสดงให้ฉันเห็นถึงเคล็ดลับดีๆเกี่ยวกับ Emacs เมื่อไม่นานมานี้ซึ่งเขาสามารถเปิดไฟล์บนเซิร์ฟเวอร์ระยะไกลได้และฉันก็คิดทันทีว่า ฉันสามารถใช้:e scp://user@server//filepathเพื่อทำอย่างนั้นไม่มีปัญหา;) อย่างไรก็ตามเขาสามารถพิมพ์ชื่อเซิร์ฟเวอร์จากนั้นรับไฟล์พา ธ และชื่อ (พร้อมแท็บ) ให้เสร็จสมบูรณ์สิ่งที่ฉันไม่สามารถทำได้ มีใครบางคนรู้ว่าสิ่งนี้สามารถทำได้ในกลุ่ม?

3
วิธีพับความคิดเห็น
ไวยากรณ์foldmethodดีมาก แต่บางครั้งฉันต้องการพับความคิดเห็นในไฟล์ต้นฉบับ การพับไวยากรณ์ของความคิดเห็นใช้ได้กับความคิดเห็น C-Style เท่านั้นเช่น: /* ... */ แต่ไม่ใช่สำหรับคอมเมนต์สำเร็จรูปที่ชอบ: // // // ... // หรือแม้กระทั่งสำหรับบล็อกความคิดเห็นในภาษาที่ไม่เหมือน C เช่น: # # # ... # ฉันจะกำหนดค่าสิ่งนี้ด้วย vim ได้อย่างไร?
16 folding 

3
ความเร็วของการชนบน <Esc> O (แทรกเป็นปกติเพื่อแทรกบรรทัดใหม่เหนือเคอร์เซอร์)
บ่อยครั้งที่ฉันอยู่ในโหมดแทรกฉันจะกดEscเพื่อเข้าสู่โหมดปกติจากนั้นกดปุ่มOเพื่อเริ่มบรรทัดใหม่เหนือเคอร์เซอร์และเข้าสู่โหมดแทรกที่นั่น แต่เมื่อฉันทำเช่นนั้นมีความล่าช้า 1 วินาทีหลังจากที่ฉันกดปุ่มOก่อนที่จะมีการตอบสนองใด ๆ ที่มองเห็นได้ นอกจากนี้ถ้าผมเริ่มพิมพ์ข้อความใหม่ในช่วงที่ล่าช้า 1 วินาที, หากข้อความใหม่ที่เริ่มต้นด้วยการใด ๆ ของบางชุดของตัวละคร (เช่นj, k, m, n, o) ผมจบลงในช่วงกลางของการดำเนินการบางอย่างอื่น ๆ ที่ผมทำไม่ได้ ตั้งใจมักจะทำเลอะเทอะ ณ จุดที่ฉันต้องหยุดและคลำหารอบด้วยการเลิกทำและทำซ้ำจนกว่าฉันจะแน่ใจว่าฉันได้ยกเลิกความเสียหายแล้ว Oเพื่อหลีกเลี่ยงความไม่ราบรื่นที่ผมเคยอยู่ในนิสัยของการหยุดสำหรับหนึ่งที่สองหลังจากที่ทุกครั้งที่ฉันพิมพ์ แต่สิ่งนี้ทำให้ฉันช้าลงและป้องกันไม่ให้ฉันเป็นปีศาจความเร็วที่ฉันต้องการ อะไรทำให้เกิดสิ่งนี้ มีวิธีแก้ไขหรือวิธีแก้ปัญหาหรือไม่?

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