Vi & Vim

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

3
ฉันจะใช้ชุดการกดแป้นพิมพ์กับทุกคำที่เกิดขึ้นได้อย่างไร
หากฉันต้องการลบทุกคำนั่นเป็นเรื่องง่ายเพราะฉันจะทำสิ่งนี้: :s%/WORD//g แต่ถ้าฉันต้องการจะทำอะไรxyzกับ "WORD" ทุกครั้ง ตัวอย่างเช่นสมมติว่าฉันต้องการลบทุกบรรทัดที่มี "WORD" ฉันสามารถคิดถึงวิธีที่จะทำสิ่งนี้ได้สองสามอย่าง แต่ไม่มีวิธีใดที่เหมาะ 1) /WORD จากนั้นกดด้วยตนเองddnddnddnddn...จนกระทั่งไม่มีเหตุการณ์เกิดขึ้นอีก แต่นี่จะใช้เวลานานถ้ามีหลายบรรทัดในการทำเช่นนี้ 2) qd/WORD<enter>ddq และจากนั้นคาดเดาว่ามีคำกี่คำที่เกิดขึ้นจากนั้นเช่น: 500@d แต่สิ่งนี้จะทำให้ A) พลาดเส้นหนึ่งหรือ B) ลบเส้นพิเศษออก มีวิธีที่ดีกว่าในการทำเช่นนี้?
13 search  macro 

6
ลบรายการที่ซ้ำกันทั้งหมด
ฉันมีไฟล์ที่มีลักษณะเช่นนี้ Move to 230.00 Hold Hold Hold Hold Hold Hold Move to 00.00 Hold Hold Hold Hold Hold FooBar Hold Spam Hold ฉันอยากให้มันเป็นแบบนี้: Move to 230.00 Hold Move to 00.00 Hold FooBar Hold Spam Hold ฉันแน่ใจว่าจะต้องมีวิธีที่เป็นกลุ่มได้อย่างรวดเร็วสามารถทำเช่นนี้ แต่ฉันไม่สามารถห่อหัวของฉันได้อย่างไร สิ่งนี้เกินความสามารถของมาโครและต้องการ vimscript ไหม? นอกจากนี้ยังตกลงถ้าฉันต้องใช้แมโครเดียวกันกับแต่ละบล็อกของ "การพัก" ไม่จำเป็นต้องเป็นแมโครเดียวที่ได้รับทั้งไฟล์แม้ว่ามันจะยอดเยี่ยม

2
วิธีรับค่าไบต์ปัจจุบันในไฟล์ทั้งหมด
ฉันเห็นว่าคุณสามารถแสดงออฟเซตไบต์ปัจจุบันในสถานะการใช้%oงาน แต่ฉันไม่พบฟังก์ชันหรือคำสั่งที่ทำเช่นเดียวกัน มีวิธีการรับไบต์ปัจจุบันชดเชยอย่างจริงจัง?

3
ฉันจะรู้ได้อย่างไรว่า Vi หรือ Vim ได้รับการติดตั้งบนการกระจาย Linux ของฉันหรือไม่
ฉันใช้ Kubuntu 14.04 กับการติดตั้งเริ่มต้น (ทุบตี Konsole) ฉันต้องการเรียนรู้คีย์บอร์ดที่ทรงพลังตัวแก้ไขข้อความและตั้งอยู่บนหนึ่งในสิ่งเหล่านี้: Vi, Vim, Emacs (และฉันจะเรียนรู้ Nano เพราะมันง่าย) ฉันมีประสบการณ์เล็กน้อยเกี่ยวกับบรรทัดคำสั่ง: Bash และ Python ดังนั้นฉันพร้อมที่จะเพิ่มทักษะอื่นในการแสวงหาการใช้งาน Linux โดยไม่มีระบบ Windows จาก Bash พิมพ์vimหรือemacsแจ้งให้ฉันติดตั้งแพ็คเกจ viงานพิมพ์ดีด มันเป็นบรรณาธิการดังนั้นฉันคิดว่ามันต้องเป็น Vi แต่หน้าจอถ้าคุณเรียกมันว่าในทุบตีกล่าวและว่ามันเป็นVIM Vi Improved Running in Vi compatible modeดังนั้นตอนนี้ฉันคิดว่ามันต้องเป็นกลุ่ม ดังนั้นมันคืออะไรและทำไมการพิมพ์vimใน bash จึงไม่สามารถรันโปรแกรมแก้ไขได้?


1
การแทนที่เครื่องหมายทับ (/) ด้วยเครื่องหมายอัศเจรีย์ (!) ในคำสั่งทดแทนหมายถึงอะไร
ฉันเพิ่งเห็นคำสั่งทดแทนที่ผู้เขียนมีการ/แทนที่ด้วย!เช่นนี้::s!abc!ABC!g ฉันพยายามค้นหาเอกสารบางอย่างเกี่ยวกับการใช้งานนี้ แต่ฉันไม่พบสิ่งใดที่เกี่ยวข้อง ดังนั้นฉันจึงพยายามทดสอบด้วยตัวเองและอีกครั้งฉันไม่สามารถหาความแตกต่างที่แท้จริงระหว่างสองสัญญาณได้ นี่คือสิ่งที่ฉันพบ: มันเป็นไปไม่ได้ที่จะผสม!และ/ในคำสั่ง ตัวอย่างเช่น:s!abc/ABCล้มเหลว มันอาจมีประโยชน์ที่จะใช้!เพื่อหลีกเลี่ยงการหลบหนี/ในรูปแบบ ตัวอย่างเช่นถ้าผมต้องการที่จะเปลี่ยน</กับ%ฉันสามารถใช้แทน:%s!</!%!g:%s/<\//%/g ดูเหมือนว่าในบางกรณี regex บางอย่างจะไม่ทำงาน/และทำงานอย่างถูกต้องด้วย!แต่ฉันไม่ได้เป็นผู้เชี่ยวชาญ regex จริงๆฉันไม่แน่ใจ ดังนั้นคำถามของฉันเป็นเรื่องง่าย: ประโยชน์ของการใช้คืออะไร!ในคำสั่งแทนและเมื่อฉันควรจะตัดสินใจที่จะใช้มันแทน/?
13 substitute 

1
เหตุใด MacVim จึงเริ่มแตกต่างกันในการเรียกใช้อื่น ๆ
ฉันสังเกตุเมื่อฉันนั่งลงเพื่อทำงานบน MacBook ของฉันในวันนี้ว่าเมื่อเร็ว ๆ นี้มีบางสิ่งบางอย่าง.gvimrcที่ทำให้ฉันรู้สึกแย่เมื่อเทียบกับการตั้งค่าของฉัน: เมื่อฉันเปิดตัว MacVim ทุกอย่างดูปกติยกเว้นหน้าต่างของฉันเล็กมาก ) อยากรู้อยากเห็นผมพยายามverbose set columns?ที่บอกผมว่า "180, ชุดสุดท้ายจาก ~ / .gvimrc" แม้ว่าหน้าต่างก็เห็นได้ชัดว่าไม่ 180 คอลัมน์กว้าง set columns=180คืนค่าหน้าต่างเป็นความกว้างที่คาดไว้ หลังจากการดีบักและแบ่งไฟล์ RC ตามปกติฉันสังเกตเห็นสิ่งผิดปกติ ฉันไม่แน่ใจว่าสิ่งนี้เกี่ยวข้องกับขนาดคอลัมน์ของฉันที่ไม่ได้นำไปใช้หรือไม่ไม่ว่าด้วยวิธีใดก็อยากรู้อยากเห็นและฉันไม่สามารถเข้าใจได้ ถ้าฉันใช้: mvim -u NONE -c "set columns=100"ฉันจะได้หน้าต่างดังนี้: หากฉันรันคำสั่งเดียวกันทั้งหมดอีกครั้งฉันจะได้รับสิ่งนี้: verbose set co?รายงาน 100 และ 66 ตามลำดับในทั้งสองกรณีระบุว่า "ชุดล่าสุดจากอาร์กิวเมนต์ -c" การทำซ้ำคำสั่ง launch ทำให้สถานะหน้าต่างเป็นทางเลือก ฉันพยายามที่จะ nuking .viminfoระหว่างวิ่ง; มันไม่มีผลกระทบ …
13 macvim  startup 

2
ยับยั้งเอาต์พุตจาก vim autocomand
ฉันมีคำสั่งอัตโนมัติและกำหนดไว้ใน vimrc ของฉัน: au BufWritePost * !./make.sh สคริปต์make.shรวบรวม.texไฟล์ 3 ครั้งและฉันไม่ต้องการให้แสดงผลลัพธ์ มีวิธีระงับเอาต์พุตหรือไม่? ฉันพยายามเพิ่มsilentหนึ่งบรรทัดก่อนauคำสั่ง แต่มันไม่ทำงาน ฉันก็ลองแบบนี้โดยไม่ประสบความสำเร็จ
13 autocmd 

2
ไฮไลต์ข้อความบรรทัดที่เหมือนกันโดยอัตโนมัติ
ฉันเห็นนินจาที่มีฝีมือทำในขณะนี้กลับมา แต่ฉันก็ไม่รู้จะเริ่ม A) มีวิธีการตั้งค่าสีพื้นหลังของขอบเพื่อให้เส้นที่ต่อเนื่องกันที่มีเนื้อหาเหมือนกันถูกเน้น B) หากใครบางคนรู้วิธีการทำเช่นนี้การปรับแต่งที่ดีสำหรับสิ่งนี้จะเกิดขึ้นหากการไฮไลต์เกิดขึ้นในบรรทัดที่ต่อเนื่องกัน แต่ให้พิจารณาเฉพาะคำแรก (ไม่ใช่ทั้งบรรทัด) การปรับแต่งครั้งที่สองหากการไฮไลต์สามารถกำหนดค่าให้กับสีที่แตกต่างกันนั้นขึ้นอยู่กับจำนวนบรรทัดที่ตรงกัน (หรือคำที่ขึ้นอยู่กับ AB นั้นทำงานอยู่) ดังนั้นเราจึงมีเพียงสองบรรทัดติดต่อกันที่ตรงกับสีเขียว, 3-5 บรรทัดติดต่อกันแล้วสีส้ม, 6+ แล้วสีแดง

4
ทำไมการจับคู่โหมดปกติ <Esc> นี้ส่งผลกระทบต่อการเริ่มต้น
ฉันกำลังประสบปัญหาแปลก ๆ Escกับการทำแผนที่ของโหมดปกติ หากคุณสร้างไฟล์escmapvimrcด้วยเนื้อหา: set nocompatible set showcmd " Doesn't affect the problem: just makes it easier to see nnoremap &lt;Esc&gt; :noh&lt;CR&gt;&lt;esc&gt; จากนั้นเริ่มเป็นกลุ่มโดยใช้ vimrc นี้: vim --noplugin -u escmapvimrc จากนั้นเป็นกลุ่มจะเริ่มต้นในโหมดผู้ประกอบการที่รอการมีคำสั่งรอสำหรับการป้อนข้อมูลเพิ่มเติมการแสดงไฟล์ที่ว่างเปล่าและมีบรรทัดคำสั่งแสดงc:noh หากคุณลบnnoremapบรรทัดปัญหาจะหายไป หากคุณทำการดีบั๊กและทำตามขั้นตอนทุกอย่างที่คุณได้รับผลลัพธ์ต่อไปนี้: Entering Debug mode. Type "cont" to continue. /[...]/escmapvimrc line 1: set nocompatible &gt;s /[...]/escmapvimrc line 2: set showcmd …

3
ฉันสามารถยกเลิกหลาย ๆ ครั้งใน nvi และ / หรือ vi เดิมได้หรือไม่
บางครั้งฉันอยู่ในระบบที่ไม่มี Vim และใช้ค่าเริ่มต้นnvi(ระบบ BSD) หรือดั้งเดิมvi(Arch Linux) ค่อนข้างมีความแตกต่างน้อยมี แต่แกล้งใหญ่ที่สุดคือว่าผมสามารถยกเลิก เฉพาะการดำเนินงานที่ผ่านมาของฉัน การกดuครั้งที่สองทำงานเป็น "ทำซ้ำ" มีวิธีการทำงานนี้หรือไม่?

3
ฉันจะแสดงบัฟเฟอร์ในหน้าต่าง quickfix ใน Vim ได้อย่างไร
การใช้ vim editor งานทั่วไปคือการเรียกดูบัฟเฟอร์ ตอนนี้ผมใช้คำสั่งมาตรฐานเช่นหรือ:ls :bnextอันที่จริงฉันตั้งไว้ใน. vimrc ของฉัน: "move amongs buffers with CTRL map &lt;C-J&gt; :bnext&lt;CR&gt; map &lt;C-K&gt; :bprev&lt;CR&gt; ฉันต้องการเรียกดูบัฟเฟอร์เป็นรายการในหน้าต่าง Quickfix ในวิธีที่ง่าย (= ยอดเยี่ยม) ปลั๊กอิน MRUใช้ มีปลั๊กอินที่ง่ายเหมือน MRU แต่ทำหน้าที่ในบัฟเฟอร์? ตกลงวิธีแก้ปัญหาที่เป็นไปได้คือการใช้:CtrlpBuffersคำสั่งส่วนหนึ่งของปลั๊กอิน Ctrlpแต่ฉันไม่ใช่แฟนตัวยงของ Ctrlp เพราะบางครั้งมีพฤติกรรมแปลก ๆ ที่ฉันไม่เข้าใจอย่างสมบูรณ์ (การเลือกโหมดฟัซซี ... ); ดังนั้นฉันจึงมองหาบางสิ่งที่ง่ายมากในฐานะ MRU plugin BTW ฉันพูดติดตลกด้วย:cexpr {expr}คำสั่งพยายามเติมหน้าต่าง quickfix ด้วยเนื้อหาของ:buffersรายการโดยไม่ประสบความสำเร็จ (อาจเป็นเพราะ vimscripts การเขียนโปรแกรมของฉันไม่รู้ ข้อเสนอแนะใด …
13 buffers  quickfix 

2
ยุบ vim จะพับเป็นบรรทัดเดียวคล้ายกับ Atom หรือ Sublime Text
ฉันเป็นแฟนตัวยงของวิธีที่การพับบรรทัด Atom และ Sublime Text ซึ่งบรรทัดแรกของแต่ละการพับสามารถมองเห็นได้ (พร้อมการเน้นไวยากรณ์) และเครื่องหมายจะต่อท้ายบรรทัดที่บ่งชี้การพับ ดูภาพหน้าจอด้านล่างเปรียบเทียบการเยื้องการพับของ Vim (บนสุด) และ Atom (ล่าง): Vim อุทิศสองบรรทัดสำหรับแต่ละเท่า บรรทัดแรกทำหน้าที่เป็นหัวเรื่องและบรรทัดที่สองอธิบายข้อมูลบางอย่างเกี่ยวกับการพับ (จำนวนบรรทัดและข้อความที่อยู่ในการพับ) Atom ใช้เพียงหนึ่งบรรทัดและใช้เครื่องหมายเล็ก ๆ ที่ท้ายบรรทัดเพื่อระบุการพับพร้อมด้วยสีที่เพิ่มไปยังหมายเลขบรรทัดทางด้านซ้าย สไตล์การพับของ Atom ใช้อสังหาริมทรัพย์บนหน้าจอน้อยลง แต่ยังคงสื่อสารข้อมูลทั้งหมดที่ฉันต้องการ ฉันชอบสไตล์การพับของ Atom ดูเหมือนว่าฉันจะดูสะอาดและมีความสอดคล้องกันมากขึ้นโดยเฉพาะอย่างยิ่งเมื่อแสดงรายการวิธีการหรือแอตทริบิวต์หลายอย่างในแถว (เช่นในภาพหน้าจอด้านบน) มีวิธีประมาณคร่าวๆสไตล์การพับของ Atom ใน Vim หรือไม่?
13 folding 

1
การเติมคำให้สมบูรณ์
&lt;C-p&gt;และ&lt;C-n&gt;อนุญาตให้เสร็จสิ้นคำที่พบในเอกสารปัจจุบัน ฉันกำลังจดบันทึกและเขียนคำพูด{0,1}^nและ(E,D)หลาย ๆ ครั้ง คำเหล่านี้ประกอบด้วยคำหลายคำ มีวิธีการที่จะกรอกคำด้วย&lt;C-p&gt;และ&lt;C-n&gt;(หรือins-completionคำสั่งอื่น ๆ ที่เกี่ยวข้อง) หรือไม่?

2
วิธีแปลงไฟล์รหัสต้นฉบับเป็น HTML
ฉันเป็นไฟล์ซอร์สโค้ดที่เขียนด้วยภาษาการเขียนโปรแกรม (เช่น PHP) และฉันต้องการแปลงเป็นไฟล์ HTML เพื่อให้ฉันสามารถเผยแพร่ทางเว็บเพื่อแบ่งปันรหัสของฉัน โดยการแปลงฉันหมายถึงการแปลงบรรทัดใหม่เป็น&lt;br&gt;แท็กเพื่อให้ข้อความจะคงรูปแบบเดิมทั้งในตัวแก้ไขข้อความและในเว็บเบราว์เซอร์ เป็นการดีที่มันควรจะรักษาเน้นไวยากรณ์เพื่อให้สามารถพิมพ์ได้ สามารถทำได้ใน Vim หรือไม่? ถ้าเป็นเช่นนั้นได้อย่างไร

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