ในกลุ่มคำสั่งในการแก้ไขการเยื้องของบรรทัดทั้งหมดคืออะไร
บ่อยครั้งที่ฉันจะคัดลอกและวางรหัสลงในเทอร์มินัลระยะไกลและทำให้ทุกอย่างเกิดความสับสน ฉันต้องการแก้ไขปัญหานี้ในคราวเดียว
ในกลุ่มคำสั่งในการแก้ไขการเยื้องของบรรทัดทั้งหมดคืออะไร
บ่อยครั้งที่ฉันจะคัดลอกและวางรหัสลงในเทอร์มินัลระยะไกลและทำให้ทุกอย่างเกิดความสับสน ฉันต้องการแก้ไขปัญหานี้ในคราวเดียว
คำตอบ:
=
คำสั่งเยื้องสามารถใช้การเคลื่อนไหว ดังนั้นgg
จะได้รับการเริ่มต้นของไฟล์=
ที่จะเยื้องไปยังจุดสิ้นสุดของแฟ้มG
gg=G
''
(คำพูดสองคำเดียว) จะนำคุณกลับไปยังที่ที่คุณอยู่ดังนั้นgg=G''
ควรเยื้องแล้วกลับมา
ก่อนที่จะวางลงในเครื่องลอง:set paste
และจากนั้น:set nopaste
หลังจากเสร็จแล้ว นี่จะเป็นการปิดการเยื้องอัตโนมัติการพันบรรทัดและคุณลักษณะอื่น ๆ ที่ทำให้การวางของคุณยุ่งเหยิง
แก้ไข: นอกจากนี้ฉันควรชี้ให้เห็นว่า=
มักจะได้ผลลัพธ์ที่ดีกว่าการเยื้องโดยใช้โปรแกรมภายนอก ตัวอย่างเช่นฉันวิ่ง:%!perltidy
ตลอดเวลา astyle
, cindent
ฯลฯ นอกจากนี้ยังสามารถนำมาใช้ และแน่นอนคุณสามารถแมปคำสั่งเหล่านั้นกับการกดคีย์และแมปรายการอื่นกับการกดแป้นเดียวกันขึ้นอยู่กับประเภทไฟล์
equalprg
ตัวเลือกใน ftplugin เพื่อใช้ตัวกรองภายนอกสำหรับการ=
เยื้องแทนการผูกคีย์แบบกำหนดเอง
formatpgm
กับเป็นระเบียบเรียบร้อยและ Astyle gq
แล้ว นี่คือตัวอย่างจากของฉัน.vimrc
: au FileType xml set fp=tidy\ -q\ -i\ -xml
และau FileType java set fp=/usr/local/bin/astyle\ --mode=java\ --indent=tab
หากคุณต้องการใส่บล็อกเข้าไปใหม่โดยไม่ต้องพิมพ์คอร์ดใด ๆ คุณสามารถทำได้ดังนี้:
[[=]]
=aB
ซึ่งจะไม่ย้ายเคอร์เซอร์เลย
[[=]]
ต้องใช้ 5 คอร์ด :(
ต้นแบบของคำสั่งทั้งหมดคือ
gg=G
การเยื้องนี้ไฟล์ทั้งหมด!
และด้านล่างคือคำสั่งที่เรียบง่ายและสง่างามที่ใช้ในการเยื้องบรรทัดอย่างรวดเร็วใน Vim หรือ gVim
เพื่อเยื้องบรรทัดทั้งหมดด้านล่างบรรทัดปัจจุบัน
=G
เพื่อเยื้องบรรทัดปัจจุบัน
==
เพื่อเยื้องn
บรรทัดด้านล่างบรรทัดปัจจุบัน
n==
ตัวอย่างเช่นการเยื้อง 4 บรรทัดด้านล่างบรรทัดปัจจุบัน
4==
หากต้องการเยื้องบล็อกของรหัสไปที่หนึ่งในวงเล็บปีกกาและใช้คำสั่ง
=%
คุณสามารถใช้แอพพลิเคชั่น / ยูทิลิตี้ที่เป็นระเบียบเพื่อเยื้องไฟล์ HTML และ XML และทำงานได้ดีในการเยื้องไฟล์เหล่านั้น
ระบุไฟล์ XML ล่วงหน้า
:!tidy -mi -xml %
แสดงไฟล์ HTML ล่วงหน้า
:!tidy -mi -html %
กดหลบหนีแล้วพิมพ์ชุดด้านล่างอย่างรวดเร็ว:
gg=G
1G=G
. ที่ควรเยื้องบรรทัดทั้งหมดในไฟล์ 1G
นำคุณบรรทัดแรก=
จะเริ่มเยื้องอัตโนมัติและสุดท้ายG
จะนำคุณบรรทัดสุดท้ายในไฟล์
1gg=G
:set paste
เป็นเพื่อนของคุณฉันใช้ฉาบและสิ้นสุดการคัดลอกรหัสระหว่าง windows ก่อนที่ฉันจะเปิดใช้งาน:set paste
(และ:set nopaste
) คัดลอก / วางให้ฉันพอดีด้วยเหตุผลอย่างนั้น
:insert
ในกลุ่มใช้ การทำเช่นนี้จะทำให้การจัดรูปแบบทั้งหมดของคุณไม่ใช่การป้อนข้อความอัตโนมัติ help :insert
สำหรับข้อมูลเพิ่มเติม
หากคุณไม่ต้องการใช้:set paste
คลิกกลางset nopaste
คุณสามารถวางเนื้อหาของคลิปบอร์ดได้:
"*p
"+p
ด้วยวิธีนี้คุณไม่ต้องออกจากโหมดปกติ ถ้าคุณมีการวาง+
หรือขึ้นอยู่กับว่าคุณเลือกข้อความที่เห็น*
:help quoteplus
vim-autoformat จัดรูปแบบไฟล์ต้นฉบับของคุณโดยใช้โปรแกรมภายนอกเฉพาะสำหรับภาษาของคุณเช่นอัญมณี "rbeautify" สำหรับไฟล์ทับทิม "js-beautify" แพ็กเกจ npm สำหรับ JavaScript
สำหรับไฟล์ C ++ ที่ซับซ้อนกลุ่มที่ไม่ได้รับการจัดรูปแบบที่ถูกต้องเสมอเมื่อใช้=
คำสั่งตัวกรองของกลุ่ม ดังนั้นสำหรับสถานการณ์เช่นนี้จะเป็นการดีกว่าถ้าใช้ตัวจัดรูปแบบ C ++ ภายนอกเช่นastyle (หรือuncrustify ) เช่น:
:%!astyle
ฟังก์ชัน '=' ของ Vim ใช้การจัดรูปแบบภายในโดยค่าเริ่มต้น (ซึ่งไม่ได้รับสิ่งที่ถูกต้องเสมอไป) แต่เราสามารถตั้งค่าให้ใช้ตัวจัดรูปแบบภายนอกเช่น astyle โดยตั้งค่าอย่างเหมาะสมตามที่กล่าวไว้ในคำถามนี้
สำหรับไฟล์ XML ฉันใช้คำสั่งนี้
:1,$!xmllint --format --recover - 2>/dev/null
คุณต้องติดตั้ง xmllint (แพ็คเกจ libxml2-utils)
(ที่มา: http://ku1ik.com/2011/09/08/formatting-xml-in-vim-with-indent-command.html )
คุณสามารถสร้างแผนที่เพื่อทำสิ่งนี้ให้คุณ
อันนี้จะเยื้องไฟล์ทั้งหมดโดยอัตโนมัติและยังคงเคอร์เซอร์ของคุณในตำแหน่งที่คุณอยู่:
nmap <leader>ai mzgg=G`z
สำหรับ vi Editor ให้ใช้: insert การดำเนินการนี้จะทำให้การจัดรูปแบบทั้งหมดของคุณและไม่แทรกการเยื้องอัตโนมัติเมื่อเสร็จแล้วกด Escape เพื่อดูไฟล์ที่จัดรูปแบบจริงมิฉะนั้นคุณจะเห็นอักขระขยะบางตัว กด ^ I เช่น:
public static void main(String[] args) {
^I
^I System.out.println("Some Garbage printed upon using :insert");
}
เพียงไปที่โหมดภาพในเสียงเรียกเข้าและเลือกจากบรรทัดขึ้นลงหลังจากเลือกเพียงแค่กด =, บรรทัดที่เลือกทั้งหมดจะถูกเยื้อง
ggvG=
gg=G
อะไรคือจุดสำคัญในการทำให้เห็นความเคลื่อนไหว? สำหรับทุกการเคลื่อนไหว