ฉันจะแก้ไขการเยื้องของไฟล์ทั้งหมดใน Vi ได้อย่างไร


625

ในกลุ่มคำสั่งในการแก้ไขการเยื้องของบรรทัดทั้งหมดคืออะไร

บ่อยครั้งที่ฉันจะคัดลอกและวางรหัสลงในเทอร์มินัลระยะไกลและทำให้ทุกอย่างเกิดความสับสน ฉันต้องการแก้ไขปัญหานี้ในคราวเดียว


ที่คล้ายกัน: การเยื้องโค้ดซ้ำที่ไม่ดีที่ Vi SE
kenorb

8
การป้องกันดีกว่ารักษา ในจิตวิญญาณนั้นความคิดเห็นนี้มา ทำ ": set paste" ก่อนเข้าสู่โหมดแทรกและวางรหัสจากสถานีปลายทาง
โครงการ Chthonic

คำตอบ:


1215

=คำสั่งเยื้องสามารถใช้การเคลื่อนไหว ดังนั้นggจะได้รับการเริ่มต้นของไฟล์=ที่จะเยื้องไปยังจุดสิ้นสุดของแฟ้มGgg=G


39
ฉันจะไม่สามารถคลาย 1G อันมีค่าของฉันได้ =) หนึ่งในรายการโปรดของฉันคือ =% ยืนอยู่บนวงเล็บเปิด มันแก้ไขการเยื้องของบล็อกทั้งหมด
PEZ

2
: 0 <ผลตอบแทน> ไม่เลว แต่ gg นั้นดี (ใช่ผมได้เรียนรู้ ed แรก)
เอริคโอลสัน

8
ฉันสามารถเยื้องไฟล์ทั้งหมดได้โดยไม่ต้องออกจากบรรทัดปัจจุบันหรือไม่
Fábio Perez

86
@ Fábio: ''(คำพูดสองคำเดียว) จะนำคุณกลับไปยังที่ที่คุณอยู่ดังนั้นgg=G''ควรเยื้องแล้วกลับมา
Nemo157

@ArchimedesTrajano vim ของ Mac OS เก่ามากฉันแนะนำเวอร์ชั่นของ HomeBrew มันใหม่กว่ามาก ฉันมีปัญหาบางอย่างที่น่ารำคาญกับเสียงเรียกเข้าของ Mac นอกจากนี้ฉันได้ยินมาว่าคุณไม่ควรยุ่งกับอุปกรณ์ในตัวดังนั้นอย่าพยายามอัปเดตด้วยตัวคุณเองถ้าคุณไม่ระมัดระวัง
AlexMA

126

ก่อนที่จะวางลงในเครื่องลอง:set pasteและจากนั้น:set nopasteหลังจากเสร็จแล้ว นี่จะเป็นการปิดการเยื้องอัตโนมัติการพันบรรทัดและคุณลักษณะอื่น ๆ ที่ทำให้การวางของคุณยุ่งเหยิง

แก้ไข: นอกจากนี้ฉันควรชี้ให้เห็นว่า=มักจะได้ผลลัพธ์ที่ดีกว่าการเยื้องโดยใช้โปรแกรมภายนอก ตัวอย่างเช่นฉันวิ่ง:%!perltidyตลอดเวลา astyle, cindentฯลฯ นอกจากนี้ยังสามารถนำมาใช้ และแน่นอนคุณสามารถแมปคำสั่งเหล่านั้นกับการกดคีย์และแมปรายการอื่นกับการกดแป้นเดียวกันขึ้นอยู่กับประเภทไฟล์


5
คุณสามารถตั้งค่าequalprgตัวเลือกใน ftplugin เพื่อใช้ตัวกรองภายนอกสำหรับการ=เยื้องแทนการผูกคีย์แบบกำหนดเอง
Josh Lee

ยังมีตัวเลือกการป้อนรหัสผ่านเช่นกัน : ตั้งค่า pt \ p เพื่อพลิกระหว่างโหมด
michael

หมายเหตุ: ใน vimconfig ของ grml คีย์ pastetoggle จะถูกจับคู่กับ F11
Thomas

ผมใช้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
Raffi Khatchadourian

เพิ่งดาวน์โหลด perltidy หลังจากอ่านสิ่งนี้มันดีกว่าการเยื้องอัตโนมัติเป็นค่าเริ่มต้น
Joey Ciechanowicz

29

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

[[=]]

1
ขออภัยที่จะรื้อฟื้นสิ่งนี้ แต่คอร์ดหมายถึงอะไร coords?
จอห์น P

7
"Chords" ที่นี่หมายถึงคำสั่งที่ออกโดยการกดปุ่มหนึ่งค้างไว้ขณะที่กดปุ่มอื่นในการเปรียบเทียบกับคอร์ดดนตรีนั้นเสียงโน้ตหลาย ๆ เสียงพร้อมกัน ดังนั้น G คือ shift + g, ^] คือ ctrl +] และอื่น ๆ สิ่งเหล่านี้ใช้เวลาในการพิมพ์นานกว่าการเชื่อมโยงด้วยคีย์เดียว
Ralph Giles

คุณยังสามารถใช้=aBซึ่งจะไม่ย้ายเคอร์เซอร์เลย
amin

7
บนแป้นพิมพ์ Nordic [[=]]ต้องใช้ 5 คอร์ด :(
k4kuz0

29

ต้นแบบของคำสั่งทั้งหมดคือ

gg=G

การเยื้องนี้ไฟล์ทั้งหมด!

และด้านล่างคือคำสั่งที่เรียบง่ายและสง่างามที่ใช้ในการเยื้องบรรทัดอย่างรวดเร็วใน Vim หรือ gVim

เพื่อเยื้องบรรทัดทั้งหมดด้านล่างบรรทัดปัจจุบัน

=G

เพื่อเยื้องบรรทัดปัจจุบัน

==

เพื่อเยื้องnบรรทัดด้านล่างบรรทัดปัจจุบัน

n==

ตัวอย่างเช่นการเยื้อง 4 บรรทัดด้านล่างบรรทัดปัจจุบัน

4==

หากต้องการเยื้องบล็อกของรหัสไปที่หนึ่งในวงเล็บปีกกาและใช้คำสั่ง

=%

17

คุณสามารถใช้แอพพลิเคชั่น / ยูทิลิตี้ที่เป็นระเบียบเพื่อเยื้องไฟล์ HTML และ XML และทำงานได้ดีในการเยื้องไฟล์เหล่านั้น

ระบุไฟล์ XML ล่วงหน้า

:!tidy -mi -xml %

แสดงไฟล์ HTML ล่วงหน้า

:!tidy -mi -html %

16

กดหลบหนีแล้วพิมพ์ชุดด้านล่างอย่างรวดเร็ว:

gg=G

28
ฉันพิมพ์ช้าๆคุณจะไม่เชื่อว่าจะเกิดอะไรขึ้นต่อไป
k0pernikus

ฉันเพียงแค่ให้คำตอบและแสดงความคิดเห็น upvote เพราะนั่นไม่มีค่า! lol @ k0pernikus
gglasses

12

1G=G. ที่ควรเยื้องบรรทัดทั้งหมดในไฟล์ 1Gนำคุณบรรทัดแรก=จะเริ่มเยื้องอัตโนมัติและสุดท้ายGจะนำคุณบรรทัดสุดท้ายในไฟล์


หรือแม้กระทั่ง1gg=G
Biggybi

1G = G แก้ไขให้ฉัน ! น่ากลัว
Natus Drew

8

:set pasteเป็นเพื่อนของคุณฉันใช้ฉาบและสิ้นสุดการคัดลอกรหัสระหว่าง windows ก่อนที่ฉันจะเปิดใช้งาน:set paste(และ:set nopaste) คัดลอก / วางให้ฉันพอดีด้วยเหตุผลอย่างนั้น


1
ใช่ฉันยังใช้ผงสำหรับอุดรู : set paste is awesome
mmcdole

7

:insertในกลุ่มใช้ การทำเช่นนี้จะทำให้การจัดรูปแบบทั้งหมดของคุณไม่ใช่การป้อนข้อความอัตโนมัติ help :insertสำหรับข้อมูลเพิ่มเติม


7

หากคุณไม่ต้องการใช้:set pasteคลิกกลางset nopasteคุณสามารถวางเนื้อหาของคลิปบอร์ดได้:

"*p
"+p

ด้วยวิธีนี้คุณไม่ต้องออกจากโหมดปกติ ถ้าคุณมีการวาง+หรือขึ้นอยู่กับว่าคุณเลือกข้อความที่เห็น*:help quoteplus


4

vim-autoformat จัดรูปแบบไฟล์ต้นฉบับของคุณโดยใช้โปรแกรมภายนอกเฉพาะสำหรับภาษาของคุณเช่นอัญมณี "rbeautify" สำหรับไฟล์ทับทิม "js-beautify" แพ็กเกจ npm สำหรับ JavaScript


3

สำหรับไฟล์ C ++ ที่ซับซ้อนกลุ่มที่ไม่ได้รับการจัดรูปแบบที่ถูกต้องเสมอเมื่อใช้=คำสั่งตัวกรองของกลุ่ม ดังนั้นสำหรับสถานการณ์เช่นนี้จะเป็นการดีกว่าถ้าใช้ตัวจัดรูปแบบ C ++ ภายนอกเช่นastyle (หรือuncrustify ) เช่น:

:%!astyle

ฟังก์ชัน '=' ของ Vim ใช้การจัดรูปแบบภายในโดยค่าเริ่มต้น (ซึ่งไม่ได้รับสิ่งที่ถูกต้องเสมอไป) แต่เราสามารถตั้งค่าให้ใช้ตัวจัดรูปแบบภายนอกเช่น astyle โดยตั้งค่าอย่างเหมาะสมตามที่กล่าวไว้ในคำถามนี้



1

คุณสามารถสร้างแผนที่เพื่อทำสิ่งนี้ให้คุณ

อันนี้จะเยื้องไฟล์ทั้งหมดโดยอัตโนมัติและยังคงเคอร์เซอร์ของคุณในตำแหน่งที่คุณอยู่:

nmap <leader>ai mzgg=G`z

0

สำหรับ vi Editor ให้ใช้: insert การดำเนินการนี้จะทำให้การจัดรูปแบบทั้งหมดของคุณและไม่แทรกการเยื้องอัตโนมัติเมื่อเสร็จแล้วกด Escape เพื่อดูไฟล์ที่จัดรูปแบบจริงมิฉะนั้นคุณจะเห็นอักขระขยะบางตัว กด ^ I เช่น:

public static void main(String[] args) {
^I
^I System.out.println("Some Garbage printed upon using :insert"); 
}

0

เพียงไปที่โหมดภาพในเสียงเรียกเข้าและเลือกจากบรรทัดขึ้นลงหลังจากเลือกเพียงแค่กด =, บรรทัดที่เลือกทั้งหมดจะถูกเยื้อง


ฉันจะหลีกเลี่ยงสิ่งนี้ โหมดภาพใช้สำหรับเมื่อคุณไม่แน่ใจเกี่ยวกับการเคลื่อนไหวของคุณหากคุณรู้วิธีจับภาพชุดของตัวละครคุณจะไม่สามารถชี้ไปที่ขั้นตอนพิเศษอื่น ๆ ของการเข้าสู่โหมดภาพ ทำไมเมื่อคุณสามารถggvG= gg=Gอะไรคือจุดสำคัญในการทำให้เห็นความเคลื่อนไหว? สำหรับทุกการเคลื่อนไหว
alextes
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.