Vi & Vim

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

5
ฉันสามารถทำซ้ำแมโครด้วย“ ตัวดำเนินการ dot” ได้หรือไม่
ฉันสามารถทำซ้ำแมโครด้วย.คำสั่งได้หรือไม่ ตัวอย่างเช่นฉันต้องการพิมพ์: @q... และให้มีประสิทธิภาพการโทร@q4 ครั้ง ด้วยการทำงานเริ่มต้นนี้จะทำงานเฉพาะถ้า 'Q' ถือเป็นคำสั่งเดียวเช่นdw, หรือx iHello<esc>(สิ่งนี้สมเหตุสมผลเนื่องจาก '.' ซ้ำการเปลี่ยนแปลงครั้งสุดท้ายไม่ใช่การกดแป้น / คำสั่งสุดท้าย) ฉันชอบที่จะมีงานนี้ด้วยการนับ ตัวอย่างเช่นการพิมพ์: 3@q. จะมีประสิทธิภาพเช่นเดียวกับการทำงาน@q6 ครั้ง ฉันจะกำหนดค่าพฤติกรรมนี้ได้อย่างไร
15 macro  count 


1
มีวิธีการแปลง VIM regex ให้เป็นโหมดเวทย์มนตร์ที่แตกต่างกันหรือไม่?
หากฉันมี Magic Vim regex ในสตริงตัวอักษรมีวิธีในการแปลง regex ทั้งหมดเป็นการนำเสนอทางเลือกที่ใช้โหมดมายากลที่แตกต่างกันดังนั้นฉันสามารถวาง regex ที่เทียบเท่าลงในซอร์สโค้ดได้หรือไม่ ตัวอย่างเช่นหากฉันต้องการแปลงรูปแบบโหมดเวทย์มนตร์นี้: '\m-\=\<\d\+L\=\>\|0[xX][0-9a-fA-F]\+\>' เป็นโหมดมายากลมากเพื่อให้อ่านง่ายขึ้นเช่น: '\v-=<\d+L=>|0[xX][0-9a-fA-F]+>' ฉันมักจะทำผิดพลาดพยายามแปลงด้วยมือ

2
มีการค้นหาและแทนที่ประวัติในกลุ่ม?
เราสามารถดึงข้อมูลการค้นหาและแทนที่ประวัติบน IDE และโปรแกรมแก้ไขข้อความ ในทำนองเดียวกันจะมีประวัติการค้นหาหรือวิธีการดึงการแสดงออกค้นหาก่อนหน้านี้ในกลุ่ม?
14 search 

1
วิธีการเลื่อนเคอร์เซอร์ไปยังระดับการเยื้องที่ถูกต้องโดยไม่ต้องออกจากโหมดแทรก?
ตัวอย่างเช่นฉันมีรหัส JavaScript นี้ |ตัวละครที่แสดงให้เห็นถึงตำแหน่งของเคอร์เซอร์และมันอยู่ในสายที่ว่างเปล่า function a() { console.log("a"); function b() { console.log("b"); function c() { console.log("c"); } | c(); } b(); } หลังจากการดำเนินการที่ร้องขอเนื้อหาจะมีลักษณะเช่นนี้: function a() { console.log("a"); function b() { console.log("b"); function c() { console.log("c"); } | c(); } b(); } สิ่งที่ฉันขอคือคำสั่งการแมป ขอบคุณมาก! :-)

1
ทำไมหน้าต่างของฉันถึงเลื่อนเข้าหากัน?
ฉันมีสองหน้าต่างเปิดในบัฟเฟอร์เดียวกันและฉันต้องการแก้ไขสองส่วนของไฟล์เดียวกันในเวลาเดียวกัน ฉันทำไม่ได้เพราะหน้าต่างกำลังเลื่อนเข้าหากัน ฉันได้noscrollbindตั้งค่าไว้ดังนั้นฉันจึงสับสนกับสิ่งนี้ มีอะไรอีกที่ทำให้เกิดสิ่งนี้ ถ้าฉันเริ่มเซสชันใหม่ปัญหาจะหายไป ฉันไม่ต้องการปิดเซสชันเพราะฉันจำหมายเลขบัฟเฟอร์ทั้งหมดได้

1
สำหรับ autocmd ใน ftplugin ฉันควรใช้การจับคู่รูปแบบหรือ <buffer> หรือไม่
ฉันมี autocmd สำหรับไฟล์ TeX และ Markdown เพื่อบันทึกไฟล์โดยอัตโนมัติ ไม่มีอะไรผิดปกติ: autocmd CursorHold *.tex,*.md w อย่างไรก็ตามเมื่อการตั้งค่าแบบกำหนดเองสำหรับไฟล์เหล่านี้เพิ่มขึ้นฉันจึงแยกออกเป็นftplugin/tex.vimและftplugin/markdown.vim: " ftplugin/tex.vim autocmd CursorHold *.tex w " ftplugin/markdown.vim autocmd CursorHold *.md w ตอนนี้ไฟล์เหล่านี้มีที่มาเฉพาะสำหรับไฟล์ที่เหมาะสมเท่านั้นดังนั้นการจับคู่รูปแบบจึงซ้ำซ้อน เห็นได้ชัดว่าautocmds สามารถเป็นบัฟเฟอร์ในท้องถิ่น จาก:h autocmd-buffer-local: Buffer-local autocommands are attached to a specific buffer. They are useful if the buffer does not have a name and …
14 autocmd  filetype 

1
เป็นไปได้ที่จะได้รับสายที่ตรงกันหลังจากโทร: ค้นหา ()
ในฟังก์ชั่น vimscript ฉันต้องกำหนดสตริงที่จับคู่ให้กับตัวแปรl:matchedหลังจากการโทรsearch()และฉันสงสัยว่ามีวิธีที่สั้นกว่าสิ่งที่ฉันกำลังทำอยู่: let l:pattern = '\v^Foo: \zs.*' let l:line = search(l:pattern) let l:line_text = getline(l:line) let l:matched = matchstr(l:line, l:pattern) เป็นการดีที่ฉันต้องการบางสิ่งบางอย่าง let l:matched = search_text(l:pattern) withouth getline()หันไป มีฟังก์ชั่นที่เป็นกลุ่มที่ฉันดูเหมือนไม่สามารถหาได้หรือไม่?
14 vimscript  search 

3
วิธีติดฉลากแท็บ tmux ด้วยชื่อของไฟล์ที่แก้ไขในกลุ่ม?
เมื่อใดก็ตามที่ฉันเปิดเซสชั่น tmux vimในขั้วทั้งหมดของแท็บที่มีการประชุมเป็นกลุ่มมีความโดดเด่น คำถามของฉันคือ: วิธีกำหนดค่าให้แท็บป้ายกำกับ tmux ด้วยชื่อของไฟล์ที่แก้ไขหรือสิ่งที่ต้องการvim | test.cppใช้เป็นชื่อของแท็บที่เป็นปัญหา
14 vimrc  terminal  tmux 

3
แก้ไขคำที่แตกต่างพร้อมกันหนึ่งบรรทัดเดียวกันใน Sublime Text พร้อมตัวเลือกทวีคูณ
เป็นไปได้หรือไม่ที่จะแก้ไขมากกว่าหนึ่งคำพร้อมกันซึ่งอยู่ในบรรทัดเดียวกัน ตัวอย่างเช่นสมมติว่าฉันมีสิ่งนี้: Spam and Eggs is all you need for a healthy breakfast และฉันต้องการเปลี่ยนบรรทัดเป็น: organic_Spam and organic_Eggs is all you need for a healthy breakfast ฉันต้องการไฮไลต์ "สแปม" และ "ไข่" และเติม "organic_" พร้อมกันเพื่อ "สแปม" และ "ไข่" เล็กน้อยเช่นการใช้บล็อกภาพเพื่อเขียนพร้อมกันในบรรทัดที่แตกต่างกัน แต่ที่นี่เขียนเนื้อหาในบรรทัดเดียวกัน ฉันเห็นเพื่อนร่วมงานทำสิ่งนี้ด้วย Sublime Text และลองใช้ googling แต่ก็ไม่มีประโยชน์

2
รูปร่างเคอร์เซอร์ภายใต้ vim + tmux
ฉันจะมีรูปร่างเคอร์เซอร์ที่แตกต่างกันอย่างไรเมื่อใช้ vim ใน tmux ภายใต้ cygwin โดยไม่ต้อง tmux บรรทัดเหล่านี้จะเพียงพอที่จะบรรลุสิ่งที่ฉันต้องการ: let &amp;t_SI = "\e[5 q" let &amp;t_EI = "\e[2 q" แต่อย่างใด tmux ของฉันทำลายมัน - เคอร์เซอร์มีรูปร่างบล็อกไม่ว่าโหมด vim ของฉันจะเป็นยังไง รายละเอียดของฉัน: Windows 7 x64 Cygwin x86 TMUX 1.9a VIM 7.4.726 (คอมไพล์ด้วย + เคอร์เซอร์) โปรแกรมจำลองเทอร์มินัล: mintty 1.1.3 ใช้ใน Cygwin Terminal หรือ Cmder (ทั้งสองทาง, รูปร่างของเคอร์เซอร์จะทำงานโดยไม่มี TMUX) …
14 tmux  cygwin 

1
พับบรรทัดที่เลือก
ฉันจะพับและคลายเส้นที่เลือกในโหมดภาพได้อย่างไร? ให้บอกว่าฉันมีสามย่อหน้าและฉันต้องการพับสองหรือย่อหน้าแรกเป็นบรรทัดเดียว: Test ==== Lorem Ipsum es simplemente el texto de relleno de las imprentas y archivos de texto. Lorem Ipsum ha sido el texto de relleno estándar de las industrias.. Lorem Ipsum es simplemente el texto de relleno de las imprentas y archivos de texto. Lorem Ipsum ha sido …

1
ฉันจะเปลี่ยนสีของเส้นที่ไฮไลต์ด้วยตัวเลือก 'เคอร์เซอร์' ได้อย่างไร?
ฉันสามารถเน้นบรรทัดปัจจุบันเช่นนี้:set cursorlineซึ่งขีดเส้นใต้บรรทัดปัจจุบัน อย่างไรก็ตามฉันต้องการเน้นทั้งบรรทัดด้วยสีที่เบากว่า ฉันจะทำสิ่งนี้ให้สำเร็จได้อย่างไร?

1
ฉันจะยกเว้นนามสกุลไฟล์บางไฟล์ไม่เสร็จสิ้นได้อย่างไร
มีวิธีการตั้งค่ากลุ่มที่เกี่ยวข้องกับไฟล์ประเภทใดที่พิจารณาว่า "เหมาะสม" สำหรับการเปิด? ให้ฉันอธิบายด้วยตัวอย่าง ลองนึกภาพคุณกำลังทำงานกับเอกสารลาเท็กซ์ เมื่อคุณสร้างไฟล์คุณจะมีสิ่งต่อไปนี้ในไดเรกทอรีของคุณ (รวมถึงไฟล์อื่น ๆ ที่เกี่ยวข้องกับบิลด์): X.aux X.log X.out X.pdf X.tex ตอนนี้ถ้าคุณกำลังทำงานกับไฟล์อื่น (พูดY.tex) และคุณต้องการ:sp X.texคุณสามารถใช้&lt;Tab&gt;เพื่อวนไฟล์ที่เป็นไปได้เช่น: :sp X&lt;Tab&gt; ดูเหมือนว่ากลุ่มนั้นได้เลือกไฟล์ที่คุณน่าจะเป็นส่วนใหญ่แล้วและเติมข้อความอัตโนมัติให้กับไฟล์เหล่านั้นก่อน นี่คือลำดับที่เสียงเรียกเข้าของฉันคือการเติมข้อความอัตโนมัติ: X.pdf X.tex X.aux X.log X.out อีกครั้งดูเหมือนว่ากลุ่มได้ตัดสินใจว่าฉันอาจต้องการเปิดไฟล์.pdfหรือ.texไฟล์และนำเสนอให้ฉันก่อนและตามลำดับตัวอักษร จากนั้นจะแสดงไฟล์ที่เหลือตามลำดับตัวอักษรอีกครั้ง ประการแรกความเข้าใจของฉันถูกต้องหรือไม่ ถ้าเป็นเช่นนั้นฉันจะบอกกลุ่มได้อย่างไรว่าไม่ควรคิดว่าฉันสนใจเปิด.pdfไฟล์ด้วย? วิธีนี้คนแรก&lt;Tab&gt;จะเอา.texไฟล์มาให้ฉันทันทีที่ไฟล์ที่ฉันกำลังมองหา

3
ฉันสามารถทำให้ Vim บันทึก "การลบขนาดเล็ก" ลงในการลงทะเบียน "1 ได้หรือไม่
ฉันเพิ่งลบปลั๊กอิน YankRing ออกจากการตั้งค่าของฉันส่วนหนึ่งเพราะมันทำให้เกิดปัญหาบางอย่างกับมาโคร แต่ส่วนใหญ่เป็นเพราะฉันตัดสินใจว่าจะเป็นการดีกว่าถ้าฉันจะฝึกตัวเองให้ใช้รีจิสเตอร์ Vim แทน - โดยเฉพาะอย่างยิ่ง"1แล้วขยับตัวขึ้นผ่าน"2, "3ฯลฯ เป็นลบต่อไปจะทำให้เป็นประโยชน์อย่างมาก อย่างไรก็ตามเมื่อการลบ / การเปลี่ยนแปลงลบข้อความน้อยกว่าหนึ่งบรรทัดมันจะถูกเก็บไว้ในการ"-ลบการลงทะเบียนขนาดเล็กแทน(มีข้อยกเว้นเล็กน้อยสำหรับคำสั่งการเคลื่อนไหวบางอย่าง) หากทำการลบขนาดเล็กในลำดับต่อมาข้อความส่วนนั้นจะหายไป เป็นไปได้ไหมที่จะให้ Vim เก็บการลบทั้งหมดในการลงทะเบียน"1? nnoremap d "1d เกือบจะทำงาน แต่คุณท้ายด้วยข้อความทั้งในการลงทะเบียนและ"1 "2 ฉันไม่สนใจว่าการทำงานของการลงทะเบียนการลบขนาดเล็กจะได้รับผลกระทบหรือไม่ การแนะนำให้ฉันเปลี่ยนพฤติกรรมของฉันเพื่อบันทึกการลบเล็ก ๆ น้อย ๆ ในการลงทะเบียนที่ระบุชื่อจะไม่เป็นคำตอบที่เป็นประโยชน์นั่นคือสิ่งที่ฉันกำลังทำอยู่ในปัจจุบัน
14 register 

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