แท็บสำหรับการเยื้อง, ช่องว่างสำหรับการจัดตำแหน่ง


17

ฉันพยายามทำให้เยื้องเป็นกลุ่มโดยอัตโนมัติด้วยแท็บและจัดแนวกับช่องว่าง แต่จริงๆแล้วเยื้องกลุ่มกับแท็บและเติมการจัดตำแหน่งด้วยแท็บ + ช่องว่างสีขาว

เป็นกลุ่มมัน:

ป้อนคำอธิบายรูปภาพที่นี่

(แต่ละบล็อกเป็นแท็บ)

{
>--long a = 1,
>-->--..b = 2,
>-->--..c = 3;
}

อาจทำได้:

{
>--long a = 1,
>--.....b = 2,
>--.....c = 3;
}

ดังนั้นฉันคิดว่ามีคำถามมากมายเกี่ยวกับหัวเรื่องของแท็บและช่องว่าง แต่ไม่มีคำถามใดเลยที่ให้โซลูชัน Just Works:

ที่จริงฉันกำลังใช้:

set ai
set cindent
set cinoptions=(0,:0,u0,U0,g0)

ฉันลองปลั๊กอินSmart Tabซึ่งดูเหมือนว่าจะทำงานได้ดี แต่เมื่อฉันลองgg=Gฉันจะได้รับข้อผิดพลาดแปลก ๆ

Error detected while processing function CtabRedoIndent..<SNR>12_CheckAlign:
line   11:
E108: No such variable: "b:ctab_lastalign"
Press ENTER or type command to continue
Error detected while processing function CtabRedoIndent:
line   10:
E170: Missing :endwhile

การสนทนานี้ดูเหมือนจะเก่าแล้วตอนนี้ปี 2015 มีวิธีแก้ปัญหาอย่างเป็นทางการที่จะจัดการกับมันได้หรือ



ฉันไม่มีแผนที่สำหรับสิ่งนี้เพียงแค่ความคิด ... แต่ถ้าคุณตั้งค่าให้กลุ่มแทรกแท็บ (ความกว้างของสิ่งที่คุณต้องการ) เมื่อคุณกดแป้นแท็บ แต่จริง ๆ แล้วขยายแท็บไปยังช่องว่างถ้าคุณพิมพ์ Shift -Tab? นั่นจะไม่ทำให้การจัดเรียงนี้ง่ายหรือไม่
ไวด์การ์ด

(PS: มีการสนทนาที่ดีเกี่ยวกับ"Tabs vs. Spaces"ในฟอรัม "Religious Wars" ของการ์ตูน xkcd Enjoy;)
Wildcard

คำตอบ:


3

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

ดังที่กล่าวไว้ปลั๊กอิน Smart Tabนั้นออกแบบมาเพื่อทำสิ่งที่คุณต้องการ ฉันพบว่ามันทำงานได้ดีพอสมควรสำหรับไฟล์ C แต่มีจำนวน caveats; มันแบ่งไฟล์ Python และทำบางสิ่งที่ไม่คาดคิด (สำหรับฉันอยู่แล้ว) สำหรับไฟล์ C ในบางครั้ง
เมื่อมองไปที่แหล่งกำเนิดฉันไม่สามารถเข้าใจได้ว่ามันทำงานอย่างไรใน 5 นาทีและเมื่อรวมกับความจริงที่ว่ามันทำลายบางสิ่งบางอย่างควรบอกให้คุณดำเนินการอย่างระมัดระวัง ...


3

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

--- ctab.vim.orig   2016-08-11 17:05:20.767275274 +0800
+++ ctab.vim    2016-08-11 17:15:20.039286525 +0800
@@ -221,7 +221,7 @@
       if a:line == line('.')
         let b:ctab_lastalign=a:line
       else
-        unlet b:ctab_lastalign
+        unlet! b:ctab_lastalign
       endif
       set ts=50
       set sw=50

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


0

การเยื้องเป็นกลุ่มจะดำเนินการโดยใช้สคริปต์ต่อไปนี้

สคริปต์เพื่อดำเนินการเยื้องของไฟล์เดียว

#!/bin/bash 
#Author: Ankit shah
#Enter file name to indent as argument
file=$1
vim $file -c "normal gg=G" -c "wq"
#Use expand command to turn tabs into spaces. Code uniform across different vim environment
expand -t 4 $file $file 

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