เว้นวรรคอัตโนมัติด้วย C เป็นกลุ่ม?


85

ฉันค่อนข้างนิสัยเสียจากการใช้ Eclipse และ java ฉันเริ่มใช้ vim เพื่อทำการเข้ารหัส C ในสภาพแวดล้อม linux มีวิธีที่จะทำให้ vim ทำการเว้นระยะห่างที่เหมาะสมสำหรับบล็อกโดยอัตโนมัติหรือไม่

ดังนั้นหลังจากพิมพ์ {บรรทัดถัดไปจะมีช่องว่าง 2 ช่องเยื้องเข้ามาและผลตอบแทนของบรรทัดนั้นจะคงไว้ที่การเยื้องเดียวกันและ a} จะเลื่อนกลับ 2 ช่องว่าง?

คำตอบ:


135

สองคำสั่งนี้ควรทำ:

สำหรับคะแนนโบนัสให้ใส่ไว้ในไฟล์ชื่อ. vimrc ที่อยู่ในโฮมไดเร็กทอรีของคุณบน linux


12
ฉันขอแนะนำให้ใส่สิ่งเหล่านี้ลงใน ~ .vim / ftplugin / c.vim เพื่อที่คุณจะไม่ใช้ cindent ตลอดเวลา แต่สำหรับไฟล์ C / C ++ เท่านั้น
graywh

@graywh: แล้วสำหรับ pl, php, cpp, as, java และไฟล์อื่น ๆ ทั้งหมดที่ฉันต้องการให้มีการเยื้องแบบเดียวกันล่ะ? ฉันต้องสร้างไฟล์การตั้งค่าแยกต่างหากสำหรับแต่ละไฟล์หรือไม่
davr

17
ผมอาศัยเป็นกลุ่มของรวมสคริปต์เยื้อง (: เยื้อง filetype บน) ซึ่งเป็นมากดีกว่าเพียงแค่ใช้ 'cindent' เสมอ
graywh

3
ทำไมการเยื้อง filetype จึงดีกว่าการใช้ cindent อธิบายได้ดีที่นี่: vim.wikia.com/wiki/…
Jayen

1
สำหรับ autoindent คุณอาจต้องการใช้ชวเลข: set ai
Iam Zesh

56

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

ในการเยื้องสองช่องว่าง (แทนที่จะเป็นหนึ่งแท็บจากแปดช่องว่างค่าเริ่มต้นของกลุ่ม):

เพื่อป้องกันไม่ให้กลุ่มแปลงแปดช่องว่างเป็นแท็บ:

หากคุณต้องการเปลี่ยนการเยื้องของบล็อกข้อความให้ใช้ <and> ฉันมักจะใช้สิ่งนี้ร่วมกับโหมดเลือกบล็อก (v, เลือกกลุ่มข้อความ, <หรือ>)

(ฉันพยายามพูดให้คุณไม่ใช้การเว้นวรรคสองช่องเนื่องจากฉัน (และคนอื่น ๆ ส่วนใหญ่) พบว่ามันยากที่จะอ่าน แต่นั่นเป็นการสนทนาอื่น)


บล็อกที่ดีมาก ฉันยังค่อนข้างใหม่สำหรับ vim แต่ดีใจที่ได้รู้ว่ามีแหล่งข้อมูลดีๆอยู่ที่นั่น
zxcv

3
คุณพลาดการเปลี่ยน softtabstop นอกเหนือจาก shiftwidth
graywh

8

คุณลักษณะของกลุ่มจำนวนมาก (เช่นautoindentและcindent) ถูกปิดโดยค่าเริ่มต้น หากต้องการดูว่ากลุ่มใดสามารถทำอะไรให้คุณได้คุณต้องมีความเหมาะสม~/.vimrcจริงๆเห็นสิ่งที่เป็นกลุ่มสามารถทำเพื่อคุณคุณจะต้องดี

$VIMRUNTIME/vimrc_example.vimเริ่มต้นที่ดีเป็นหนึ่งใน ถ้าอยากลองใช้

เมื่ออยู่ในกลุ่ม

ฉันขอแนะนำให้คัดลอกเนื้อหาไปยังของคุณ~/.vimrcตามที่ได้รับความคิดเห็นเป็นอย่างดีและเป็นจุดเริ่มต้นที่ดีในการเริ่มเรียนรู้วิธีใช้กลุ่ม คุณสามารถทำได้โดย

สิ่งนี้จะเขียนทับปัจจุบันของคุณ~/.vimrcแต่ถ้าสิ่งที่คุณมีอยู่ในนั้นคือการตั้งค่าการเยื้องที่ Davr แนะนำฉันก็จะไม่เหงื่อออกเพราะ vimrc ตัวอย่างจะดูแลคุณเช่นกัน :help vimrc-introสำหรับขั้นตอนที่สมบูรณ์ของตัวอย่างและสิ่งที่มันไม่ให้คุณดู


6

เพียงแค่เรียกใช้:


1
ฉันไม่ใช่คนที่โหวตไม่ลง แต่อาจเป็นเพราะเพียงแค่ "ตั้งค่าการระบุอัตโนมัติ" ไม่ได้อยู่ในการเยื้องอัตโนมัติของตัวเองเมื่อพิมพ์ "{" และ "}" และไม่ได้กำหนดระยะห่างเป็น 2 ช่องว่างโดยอัตโนมัติ นี่คือสิ่งที่พวกเขาขอ
Victor Zamanian

3

ฉันคิดว่าคำตอบที่ดีที่สุดอธิบายได้จริงใน vim wikia:

http://vim.wikia.com/wiki/Indenting_source_code

โปรดทราบว่าไม่แนะนำให้ใช้ "set autoindent" คุณลักษณะที่ดีที่สุดของทั้งหมดที่ฉันพบในคำอธิบายนี้คือความสามารถในการตั้งค่าต่อไฟล์ซึ่งมีประโยชน์อย่างยิ่งหากคุณตั้งโปรแกรมใน python และ C ++ เนื่องจากคุณต้องการช่องว่าง 4 ช่องสำหรับแท็บในอดีตและ 2 สำหรับ ช่องว่างในช่วงหลัง


0

และจำคำอธิบายที่น่าเคารพนี้ของ Spaces + Tabs ไว้เสมอ:

http://www.jwz.org/doc/tabs-vs-spaces.html


2
ผู้ชายคนนั้นทะเลาะอะไรกัน ฉันไม่ปฏิบัติตามวิธีการไม่ใช้อักขระ TAB และการเติมช่องว่างแบบฮาร์ดโค้ดแทนช่วยแก้ปัญหาของทุกคนได้ นั่นจะทำให้เป็นไปไม่ได้ตัวอย่างเช่นคุณสามารถเปิดไฟล์และมีความกว้างของการเยื้องปรากฏขึ้นตามความต้องการของคุณเอง
thomasrutter

1
ทางออกของผู้ชายคนนี้ดีกว่ามาก :) blogs.msdn.com/cyrusn/archive/2004/09/14/229474.aspx
thomasrutter

-1

ลอง:

ตั้งค่า sw = 2

ตั้งค่า ts = 2

ตั้งค่า smartindent


ตามความช่วยเหลือ cindent ดีกว่า smartindent แต่ใช้ได้กับรหัสเหมือน C เท่านั้น
thomasrutter

smartindent เลิกใช้งานแล้ว (ใช้สำหรับโค้ดคล้าย C เท่านั้น) สคริปต์การเยื้องประเภทไฟล์ดีกว่ามาก
graywh

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