วิธีเพิ่มเส้น / แนวการเยื้อง


42

ใน Sublime Text 2 คุณจะได้รับคำแนะนำในแนวตั้งที่มีการเยื้องของคุณเช่นนี้:

ภาพหน้าจอ Sublime Text

แต่ในกลุ่มฉันเห็นได้ชัดว่าไม่:

ภาพหน้าจอเป็นกลุ่ม

มีวิธีการแสดงบรรทัดเช่นนี้ในกลุ่ม? โดยวิธีการเยื้องของฉันคือ 2 ช่องว่าง

:set tabstop=2 softtabstop=2 shiftwidth=2 expandtab

คำตอบ:


39

คำตอบแบบรวม:

หากคุณใช้แท็บ

ฉันจะลองใช้ listchars:

:set listchars=tab:\|\ 
:set list

หมายเหตุ: มีช่องว่างหลังจาก\ข้างบนครั้งสุดท้าย

วิธีนี้เป็นวิธีที่ดีเพราะใช้การสนับสนุนในตัวของ Vim ในการแสดงสิ่งนี้

ตัวอย่างผลลัพธ์:

|       if (1) {
|       |       func();
|       }

สกรีนช็อตของตัวอย่างข้อความด้านบน

อย่างไรก็ตามวิธีนี้ใช้ไม่ได้กับช่องว่างนำหน้า ดังที่ @Josh Petrie ชี้ให้เห็นมีการปะแก้สำหรับช่องว่างแต่คุณจะต้องคอมไพล์ Vim ใหม่ซึ่งอยู่นอกเหนือขอบเขตของคำตอบนี้

หากคุณใช้ช่องว่างและไม่ต้องสนใจการใช้ปลั๊กอิน

Vaibhav Sagar ชี้ให้เห็นปลั๊กอินindentLineทำหน้าที่นี้ได้

ติดตั้งในวิธีปกติ (ดูการติดตั้งปลั๊กอิน ) และดูเหมือนว่าจะทำงานได้อย่างน่าอัศจรรย์โดยไม่ต้องป้อนข้อมูลเพิ่มเติม หากคุณไม่สนใจแถบ ASCII คุณไม่จำเป็นต้องทำอะไรกับแบบอักษรของคุณ ตัวอย่างผลลัพธ์จากตัวอย่างของคุณหลังจากตั้งค่าการเยื้องและเรียกใช้:IndentLinesReset

45   ¦ var move = function(direction) {
46   ¦ ¦ if(!initialized) { initialize(); }
47 
48   ¦ ¦ if(shiftBoard(direction)) {
49   ¦ ¦ ¦ setTimeout(addRandomPiece, 100);
50   ¦ ¦ }
51   ¦ };

สกรีนช็อตตัวอย่างพร้อมช่องว่าง

ปลั๊กอินต้องใช้ Vim 7.3 หรือใหม่กว่าและใช้คุณลักษณะปกปิดของเวอร์ชันนั้นอย่างชัดเจน แทนที่จะซ่อนข้อความจริงๆมันจะแทนที่ข้อความด้วยแถบในมุมมอง แต่ไม่ใช่บัฟเฟอร์จริง ผลลัพธ์คือคุณเห็นแถบ แต่จะไม่ได้รับการบันทึกลงในไฟล์ (เนื่องจากเป็นช่องว่าง)

ข้อแม้

วิธีการทั้งสองนี้ใช้รหัสที่เยื้องอย่างเหมาะสม พวกเขาไม่วางบรรทัดการเยื้องในระดับของการเยื้องเมื่อ "บล็อก" ถูกเปิด (ซึ่งประเสริฐที่ดูเหมือนจะทำ) แต่แทนที่จะวางเส้นตามช่วงเวลาปกติตามการตั้งค่าการเยื้องของคุณ นอกจากนี้มันจะแสดงเฉพาะแถบบนบรรทัดที่มีช่องว่างจริง ๆ (ซึ่งเป็นสาเหตุที่บรรทัดในเอาต์พุตกลุ่มภายใต้ชื่อแรกifไม่มีแถบทำให้เกิดช่องว่างที่มองเห็นได้)


จริงๆแล้วฉันใช้ช่องว่างเพื่อเยื้องแทนแท็บ ฉันได้อัปเดตคำถามของฉันแล้ว
aharris88

โอ้ ถ้าอย่างนั้นก็จะต้องมีการวิจัยเพิ่มเติม
John O'M

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

1
อัปเดตคำตอบเพื่อรวมข้อมูลจาก Vaibhav Sagar และ Josh Petrie ฉันลองปลั๊กอิน Vaibhav พูดถึงและแสดงผลลัพธ์ในคำตอบที่แก้ไขแล้ว ฉันคิดว่าฉันจะเริ่มใช้ปลั๊กอินนี้ด้วยตัวเอง มันไม่ได้ยอดเยี่ยม แต่โดยทั่วไปดูเหมือนว่าจะทำงานได้ดี
John O'M

เป็นไปได้หรือไม่ที่จะให้เส้นบอกแนวปรากฏบนบรรทัดว่างเหมือนที่ทำในประเสริฐ?
James

19

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

set cursorcolumn
set cursorline

ภาพประกอบ

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


ผู้ใช้ Python vi จะตายเพราะคุณลักษณะนี้
shuva

18

เพื่อความสมบูรณ์นอกจากนี้ยังมีปลั๊กอินการเยื้องซึ่งแสดงระดับการเยื้องโดยสลับสีของช่องว่างสีขาว ต้องการเวอร์ชัน 7.2 หรือใหม่กว่า เนื่องจากมันใช้ตัวแปรtabstopและshiftwidthมันอาจจะเหมาะกับการตั้งค่าการเยื้องของคุณทันที

Imgur

เมื่อติดตั้งปลั๊กอินเสร็จคุณก็สามารถใช้หรือ:IndentGuidesEnable :IndentGuidesDisableหากคุณกำลังใช้ terminal vim โปรดทราบว่าตามคู่มือ

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

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

let g:indent_guides_auto_colors=0

ดังนั้นสีจะไม่ถูกคำนวณใหม่เมื่อมีการสลับบัฟเฟอร์แล้วตั้งค่าสีโดยใช้

hi IndentGuidesEven ctermbg=238
hi IndentGuidesOdd ctermbg=236

เช่นเดียวกับวิธีแก้ปัญหาอื่น ๆ ที่นำเสนอมันจะแสดงเฉพาะการเยื้องในบรรทัดที่มีช่องว่าง


เพิ่มlet g:indent_guides_enable_on_vim_startup=1. vimrc ของฉันเพื่อเปิดใช้งานสิ่งนี้เมื่อเริ่มต้น
inye

9

ฉันพบปลั๊กอินindentLine แล้วจะดีที่สุดสำหรับสิ่งนี้ คุณต้องการแบบอักษรที่มีสัญลักษณ์ที่เหมาะสม แต่ฉันพบว่า Consolas บน Windows และ Menlo บน Mac OS X ทำงานได้ดี ดังที่มีการระบุไว้ในคำตอบแบบครบวงจรด้านบนมันทำงานโดย (ab) โดยใช้concealคุณสมบัติของกลุ่มเพื่อวางแท่งแนวตั้ง (จากแบบอักษรที่ใช้) ในตำแหน่งที่ถูกต้อง ฉันค่อนข้างมีความสุขกับวิธีแก้ปัญหานี้ แต่ข้อเสียของมันก็คือแถบแนวตั้งของฉันเป็นส่วนหนึ่งของ glyphs แบบวาดกล่องและพวกมันอยู่ตรงกลางแทนที่จะเรียงตัวชิดซ้ายเหมือนกับบรรณาธิการอื่น ๆ ฉันเคยชินกับมัน แต่มันสามารถแก้ไขได้ด้วยการแก้ไขแบบอักษรของคุณด้วยตนเองหรือใช้แบบอักษรเช่นFantasque Sans Mono (โปรดสังเกตว่าภาพหน้าจอในการเชื่อมโยง gitub repo ใช้ indentLine)


4
โปรดดูที่การอภิปรายของเราสำหรับคำตอบเฉพาะการเชื่อมโยงปลั๊กอินและพิจารณาปรับปรุงคำตอบของคุณด้วยข้อมูลเพิ่มเติม

ความผิดพลาดของฉันฉันได้อัปเดตคำตอบแล้ว
Vaibhav Sagar

glyph ใดที่เป็นเส้นแนวตั้งที่แพตช์? คุณวางที่นี่ได้ไหม ขอบคุณ
Timtro

2

ปลั๊กอิน indentLine มีแนวโน้มที่จะค่อนข้างช้าในไฟล์ที่ไม่ใช่ไฟล์ขนาดเล็กสังเกตได้เมื่อคลิก Enter เนื่องจากมันล่าช้าเป็นวินาที

ฉันพบว่าvim-indentguidesนั้นเป็นปลั๊กอินที่เร็วขึ้นและคล้ายกันมากขึ้น

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