เยื้อง / รหัสรูปแบบสำหรับ Vim?


34

ฉันพยายามใช้เสียงเรียกเข้ามากขึ้นเรื่อย ๆ หนึ่งในมือจับที่ใหญ่ที่สุดของฉันระหว่าง Vim และ IDE เช่น Aptana คือความสามารถในการเยื้องอัตโนมัติ

มีวิธีการจัดรูปแบบรหัสอัตโนมัติ (HTML, CSS, PHP) หรือไม่ดังนั้นจึงมีการย่อหน้าที่ถูกต้องหรือไม่

ถ้าเป็นเช่นนั้นคุณจะติดตั้งสิ่งนี้ลงในกลุ่ม? ฉันไม่เข้าใจปลั๊กอินมากนัก ฉันลองอ่านหัวข้อนี้และทำให้ฉันสับสนมากขึ้น: จะเปลี่ยนพฤติกรรมเยื้องอัตโนมัติเป็นกลุ่มได้อย่างไร


คุณช่วยอธิบายภาษาที่คุณพยายามเยื้องได้หรือไม่? ฉันคาดหวังว่าหากได้รับการสนับสนุนโดยกลุ่มแล้วควรมีการเยื้องอัตโนมัติโดยไม่ต้องใช้ความพยายามเพิ่มเติม ถ้าไม่คุณควรจะได้รับปลั๊กอิน
Edd Steel

นึกคิด Html / css และ php
chrisjlee

คำตอบ:


53

เมื่อต้องการเยื้องไฟล์ทั้งหมดโดยอัตโนมัติ:

gg
=G

อธิบาย:

  • gg - ไปที่จุดเริ่มต้นของไฟล์
  • G - ไปที่จุดสิ้นสุดของไฟล์
  • =- เยื้อง

2
คุณช่วยทำลายมันลงได้ไหม? โดยทั่วไปแล้ว g คืออะไร และ = G?
chrisjlee


1
คำใบ้ดีฉันไม่เคยรู้เรื่องนี้ อย่างไรก็ตามมันเป็นงานที่มีขยะด้วยการทุบตี
Sparhawk

วิธีการดำเนินการgg=Gจากเปลือกโดยไม่ต้องเปิดไฟล์?
WM

@takeshin คุณช่วยอธิบายเพิ่มเติมได้อีกหรือไม่เราจำเป็นต้องพิมพ์มันลงในไฟล์หรือไม่หรือเราจำเป็นต้องเรียกใช้มันในเทอร์มินัล
Kasun Siyambalapitiya

14

ฉันไม่รู้เกี่ยวกับการจัดรูปแบบโค้ดที่มีอยู่โดยอัตโนมัติ แต่ถ้าคุณกำลังเขียนโค้ดและต้องการเยื้องอัตโนมัติ:

  • :set autoindent(หรือ:set ai) จะเปิดการเยื้องอัตโนมัติ
  • Ctrl- dเพื่อยกเลิกการเยื้อง (AKA outdent) รหัสของคุณ
  • แท็บหรือช่องว่างเพื่อเยื้อง - ฉันใช้แท็บเป็นการส่วนตัว
  • :set tabwidth=4(หรือ:set tw=4) จะควบคุมจำนวนช่องว่างที่แท็บควรเยื้องรหัส
  • >>คำสั่งจะเยื้องบรรทัดปัจจุบัน หากคุณใส่คำนำหน้าด้วยตัวเลขให้พูด4>>มันจะเยื้อง 4 บรรทัดเริ่มต้นด้วยบรรทัดปัจจุบัน
  • เช่นเดียวกัน<<คำสั่งจะไม่เยื้องบรรทัด

ฉันหวังว่านี่จะช่วยให้คุณเริ่มต้นได้ดี


7
ในการเยื้องรหัสที่มีอยู่โดยอัตโนมัติให้ใช้={motion}ในโหมดปกติ - =Gจะเยื้องรหัสทั้งหมดจากบรรทัดปัจจุบันไปยังจุดสิ้นสุดของไฟล์ ==จะเยื้องบรรทัดปัจจุบัน
Edd Steel

1
ตรวจสอบให้แน่ใจด้วยว่ามีการโหลดปลั๊กอินการเยื้อง (เช่นกับ:filetype indent on)
jw013

2
set tw = 4 ตั้งค่า TEXTWIDTH เป็น 4
Steffen Roller

4

เยื้องอัตโนมัติ *.sh

เพียงเพิ่มบรรทัดต่อไปนี้ใน ~/.vimrc

filetype indent on
set smartindent
autocmd BufRead,BufWritePre *.sh normal gg=G

สิ่งนี้ใช้ได้กับการแก้ไขด้วย vim หรือเครื่องมือแก้ไขทั้งหมดหรือไม่
WM

1
~./vimrcใช้เฉพาะสำหรับโปรแกรมแก้ไขเป็นกลุ่ม
ราหุล Patil

2

ปลั๊กอินนี้ทำให้การจัดรูปแบบบนโค้ดของคุณง่ายขึ้น มันรวมฟอร์แมตเตอร์ภายนอกและมีทางเลือกในการทำงานเยื้องของกลุ่ม

https://github.com/Chiel92/vim-autoformat

นอกจากนี้สังเกตเห็นความแตกต่างระหว่างการจัดรูปแบบและเยื้อง การเยื้องแก้ไขช่องว่างก่อนหน้าทุกบรรทัดในขณะที่การจัดรูปแบบยังเกี่ยวข้องกับสิ่งอื่น ๆ เช่นช่องว่างรอบตัวดำเนินการ ฯลฯ


2

สร้าง / แก้ไข~/.vimrcไฟล์และเพิ่มบรรทัดต่อไปนี้:

set autoindent

2
สิ่งนี้จะไม่เพิ่มคำตอบที่มีอยู่ในปัจจุบัน ...
jasonwryan

@jasonwryan จริงๆแล้วคำตอบของ Hai Vu กล่าวถึง:set autoindentซึ่งทำให้สามารถเยื้องอัตโนมัติสำหรับไฟล์ปัจจุบันเท่านั้น การเพิ่มเข้าไปใน.vimrcไฟล์ทำให้การเยื้องอัตโนมัติอย่างถาวร
Akshat Maheshwari

ความคิดเห็นของคุณได้รับการกล่าวถึงแล้วโดยคำตอบของราหุลดังนั้นโปรดคิดก่อนโพสต์
Indrajeet Gour

0

ในทุบตีฉันทำสิ่งนี้:

source <(echo "Zibri () {";cat script_to_be_reindented.sh; echo "}")
declare -f Zibri| cut -c 5-|head --lines=-1|tail --lines=+3

สิ่งนี้จะกำจัดความคิดเห็นและ reindents สคริปต์ "วิธีทุบตี" มันจะไม่ทำงานหากสคริปต์มี HEREDOCS แต่ถ้าคุณทำสิ่งนี้:

source <(echo "Zibri () {";cat script_to_be_reindented.sh; echo "}")
declare -f Zibri|head --lines=-1|tail --lines=+3

มันจะทำงานกับสคริปต์ใด ๆ แต่สคริปต์ทั้งหมดจะถูกเยื้องโดย 4 ช่องว่าง อย่าลังเลที่จะแก้ไข แต่อ้างอิงชื่อของฉันในสคริปต์ของคุณและโพสต์มัน! : D


ฉันเชื่อว่าสิ่งนี้อาจหายไปจากคำถาม ฉันเชื่อว่า OP ต้องการจะเยื้องอัตโนมัติภายใน VIM สำหรับภาษาที่หลากหลาย นอกจากนี้คุณอาจจะสามารถทำสิ่งนี้ได้โดยตรงด้วยsedหากคุณต้องการ: cat script_to_be_reindented.sh | sed 's#^# #g'(เอ่อดังนั้น markdown ก็คือการแทนที่ช่องว่างด้วยแท็บ แต่คุณได้คะแนน)
eacousineau

0

รูปแบบอัตโนมัติ / การเยื้องของเสียงเรียกเข้าทำงานได้ค่อนข้างดี ก่อนอื่นให้วางบรรทัดนี้ใน~/.vimrc:

filetype plugin indent on

จากนั้นเปิดไฟล์เป็นกลุ่มและพิมพ์ gg=G

( ggเลื่อนเคอร์เซอร์ไปที่บรรทัดแรก=รันคำสั่งGindent บอกให้คำสั่ง indent รันจากที่นี่ไปยังบรรทัดสุดท้าย)

หากรูปแบบอัตโนมัติดูไม่ดีจริง ๆ เช่นเดียวกับทุกบรรทัดที่ถูกเยื้องออกจากนั้นเรียกใช้:scriptnamesและตรวจสอบว่า.../indent/html.vim(หรือภาษาที่คุณใช้) อยู่ในรายการหรือไม่ ถ้าไม่เช่นนั้นให้แน่ใจว่าคุณ~/.vimrcถูกต้อง หรือหากคุณเรียกใช้:filetype plugin indent onจากบรรทัดคำสั่ง vim คุณจะต้องเปิดไฟล์อีกครั้ง:e

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