แสดงช่องว่างต่อท้ายในกลุ่ม


11

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

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

ดังนั้นฉันจะพยายามสรุปข้อมูลที่รวบรวมและวิธีแก้ปัญหาที่พบ

โซลูชันที่ 1: เน้นช่องว่างต่อท้ายด้วยตนเอง

highlight ExtraWhitespace ctermbg=red guibg=red
match ExtraWhitespace /\s\+$/
autocmd BufWinEnter * match ExtraWhitespace /\s\+$/
autocmd InsertEnter * match ExtraWhitespace /\s\+\%#\@<!$/
autocmd InsertLeave * match ExtraWhitespace /\s\+$/
autocmd BufWinLeave * call clearmatches()

เน้นช่องว่างที่ต่อท้าย

ข้อดี:

  • ง่ายต่อการใช้
  • รวดเร็ว
  • เข้ากันได้กับ cursorline

จุดด้อย:

  • สีที่เลือกไม่สามารถใช้ร่วมกับโทนสีอื่นได้เนื่องจากตั้งค่าสีด้วยตนเอง red
  • บล็อกพื้นหลังสีแดงขนาดใหญ่ไม่สวยงามมากนัก

โซลูชันที่ 2: การใช้คุณลักษณะรายการ

set list
set listchars+=trail:◦

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

ข้อดี:

  • ง่ายต่อการใช้
  • รวดเร็ว

จุดด้อย:

  • ปัญหาถ้า:set cursorlineเปิดใช้งาน
  • list/trailไม่สามารถกำหนดค่าสีเฉพาะสำหรับ จะต้องเหมือนกับรายการอื่น ๆ

โซลูชันที่ 3: การใช้คุณลักษณะการปกปิด

syn match WhiteSpace "\s\+$" containedin=ALL conceal cchar=◦
set conceallevel=2 
set concealcursor=nv
highlight Conceal ctermfg=red

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

ข้อดี:

  • สวยกว่าทางออกแรก

จุดด้อย:

  • พื้นหลังไม่เหมือนกับพื้นหลังของเคอร์เซอร์
  • อาจรบกวนกฎการปกปิดอื่น ๆ
  • สีที่เลือกไม่สามารถใช้ร่วมกับโทนสีได้เสมอไป
  • เข้ากันไม่ได้กับ Vim รุ่นเก่ากว่า

คำถามของฉัน

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

ในคำอื่น ๆ ฉันต้องการหาวิธีแก้ปัญหาที่:

  • สีที่ต่อท้ายไฮไลต์เห็นด้วยกับสีที่เลือก
  • สีนี้สามารถมองเห็นได้ชัดเจน แต่ไม่รุนแรงเกินไปกับดวงตา
  • เข้ากันได้กับcursorline(พื้นหลังและเบื้องหน้า) `
  • เข้ากันได้กับปลั๊กอินอื่น ๆ ที่อาจใช้ปกปิด
  • ถ่านต่อท้ายสามารถตั้งค่าเป็น Unicode ถ่านใด ๆ

หากคุณไม่ชอบสีแดงให้เลือกสีอื่น :hi link ExtraWhitespace CursorLineถ้าคุณต้องการสีที่เข้ากันได้กับโทนสีที่แตกต่างกันแล้วเชื่อมโยงไปยังชื่อกลุ่มสีแทนการใช้สีโดยเฉพาะอย่างยิ่งเช่น :help hi-linkดู
garyjohn

คำตอบ:


4

ในแง่ของประสิทธิภาพไม่มีสิ่งใดที่สร้างความแตกต่างได้ กลุ่มส่วนใหญ่จะจมอยู่กับรูปแบบไวยากรณ์ที่ซับซ้อน รูปแบบที่นี่ค่อนข้างง่าย

ในการทำให้สีไฮไลต์ตรงกับสีที่เลือกให้ใช้:hi linkกับกลุ่มที่มีอยู่ Errorมักที่จะเป็น แน่นอนว่าสิ่งเหล่านี้มีความสำคัญหากคุณเปลี่ยนชุดรูปแบบสี (แตกต่างกันมาก) บ่อยครั้ง; มิฉะนั้นการใช้สีที่เหมาะสมโดยตรง (เช่นเดียวกับวิธีการแก้ปัญหาของคุณ 1) ก็จะดีเช่นกัน

โซลูชันที่ 1: เน้นช่องว่างต่อท้ายด้วยตนเอง

ฉันไปนี้ แต่ใช้matchadd()แทน:match; สิ่งนี้จะทำให้การไฮไลต์ที่กำหนดเองออกมา นอกจากนี้clearmatches()หยาบเกินไป มันจะลบการแข่งขันทั้งหมดและดังนั้นอาจส่งผลกระทบต่อปลั๊กอิน คุณสามารถใช้ / ดูที่ปลั๊กอิน ShowTrailingWhitespaceของฉันเพื่อการใช้งานที่สะอาดและมีประสิทธิภาพ (ซึ่งรวมถึงข้อยกเว้นสำหรับไฟล์บางประเภท) ใช่มันเป็นทางออกที่ใหญ่กว่ามาก แต่ฉันยังไม่สังเกตเห็นผลกระทบใด ๆ

โซลูชันที่ 2: การใช้คุณลักษณะรายการ

นี่เป็นคุณลักษณะที่มีประโยชน์ในตัวเองและการใช้อย่างถาวรจะมีผลต่อการวางตำแหน่งเคอร์เซอร์บนอักขระแท็บดังนั้นฉันจะไม่แนะนำ

โซลูชันที่ 3: การใช้คุณลักษณะการปกปิด

นั่นจะรบกวนการทำงานของไวยากรณ์และปลั๊กอินบางอย่างโดยใช้คุณลักษณะนี้ ความคิดที่ไม่ดี


ดังนั้นจากคำตอบของคุณฉันเข้าใจว่ามีวิธีแก้ปัญหาที่อนุญาตให้ใช้ Unicode ถ่านที่กำหนดเองเพื่อทำเครื่องหมายช่องว่างเพิ่มเติม คำถามนี้ช่างยากกว่าที่ฉันคิดไว้ในตอนแรก
nowox

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