แสดงสีพื้นหลังที่แตกต่างกันในกลุ่มที่ผ่าน 80 อักขระ


136

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

ฉันไม่คิดว่าจะเป็นไปได้ในขณะนี้ แต่ฉันคิดว่าฉันจะถามในกรณีนี้

บางทีมันอาจทำได้ด้วยปลั๊กอิน?

TextMate ตัวอย่างของการเน้นขอบขวาของกลุ่มที่ต้องการ

เมื่อเลือก "เน้นขอบด้านขวา" ในการตั้งค่าทั่วไปของ TextMate คุณจะเห็นตัวอย่างพฤติกรรมกลุ่มที่ต้องการ

TextMate Right Margin ตัวอย่างที่เน้น


คำตอบ:


226

หากคุณมี Vim> = v7.3 คุณสามารถเพิ่มสิ่งนี้ใน.vimrcการไฮไลต์ 81 ขึ้นไป (ดังนั้น 80 คือคอลัมน์สุดท้ายที่ถูกต้องของคุณ):

let &colorcolumn=join(range(81,999),",")

หากคุณไม่เห็นไฮไลต์คุณอาจไม่มีColorColumnชุดสีไฮไลต์ เพิ่มสิ่งนี้ (ปรับให้เหมาะกับความต้องการของคุณ):

highlight ColorColumn ctermbg=235 guibg=#2c2d27

ตอนนี้ฉันต้องการเน้นคอลัมน์ 80 และ 120 เป็นต้นไปดังนั้นฉันจึงมีเครื่องหมาย "คำเตือน" และ "อันตราย" แยกกัน คุณสามารถทำได้ดังนี้:

let &colorcolumn="80,".join(range(120,999),",")

ตัวอย่าง

นี่คือภาพหน้าจอของ GVim ที่แก้ไข.vimrcไฟล์.

GVim แก้ไข. vimrc ของฉัน

ฉันใช้ฟอนต์ Ubuntu Mono 11 และโทนสีโมโลไก คุณสามารถค้นหาvim configและdotfilesทั้งหมดของฉันได้ใน GitHub


3
คอลัมน์สีถูก จำกัด ไว้ที่ 256 คำจำกัดความต่อ:help colorcolumn... นอกจากนี้การตั้งค่าของฉันดูเหมือนจะถูกตัดให้สั้นลงเมื่อใช้เทคนิคการเข้าร่วมของคุณแม้ว่าฉันจะไม่สามารถค้นหาผ่านแหล่งที่มาของกลุ่มเพื่อค้นหาว่าความยาวนั้นคืออะไร นอกจากนี้กลุ่มจะแยกวิเคราะห์ค่าของการตั้งค่านี้เป็นสตริงทุกครั้งที่เข้าสู่หน้าต่างเริ่มต้นบัฟเฟอร์ ฯลฯ ดังนั้นนี่จึงเป็นวิธีที่มีราคาแพงในการบรรลุผลลัพธ์ที่ต้องการ
cptstubing06

15
dotfiles ของคุณร้อนแรง
obfk

1
ขอบคุณที่โพสต์สิ่งนี้คือสิ่งที่ฉันกำลังมองหา! อีกหนึ่งคำถามมีวิธีที่จะไม่ตั้งกฎนี้เป็นไฟล์ประเภทเฉพาะ (.md) ได้หรือไม่
David Dias

1
@DavidDias แน่! คุณสามารถดำเนินการบางอย่างเช่นautocmd FileType markdown let &colorcolumn=""การยกเลิกการตั้งค่าทั้งหมด
Justin Force

1
อัปเดตลิงก์ไปยังvim config
reergymerej

78

ไฮไลต์ 81 คอลัมน์

:set textwidth=80
:set colorcolumn=+1

คุณสามารถจัดแต่งทรงผมได้ด้วย:

:hi ColorColumn guibg=#2d2d2d ctermbg=246

2
สิ่งนี้และยังเป็นไปได้ที่จะไฮไลต์ได้ถึง 256 คอลัมน์ แต่น่าเสียดายที่ต้องใช้รายการคอลัมน์ในการไฮไลต์และไม่มีชวเลขสำหรับมันดังนั้นคุณจะต้องทำอะไรบางอย่างเช่น:set colorcolumn=+1,+2,+3,+4,+5,+6etcetera ไปจนสุด+256สำหรับความกว้าง คุณคิดว่าคุณต้องการระยะขอบที่เหมาะสม อย่างไรก็ตามสิ่งนี้จะเน้นเฉพาะบรรทัดที่มีอยู่ในบัฟเฟอร์ไม่ใช่ทุกบรรทัดในหน้าต่าง
mkomitee

2
@Dyslexic Tangent: ทำไมไม่เน้น 80 คอลัมน์แรกแทน?
brice

1
ฉันไม่ได้คิดอย่างนั้น ตั้งค่าพื้นหลังของคุณเป็นสีที่คุณต้องการใช้เพื่อไฮไลต์> 80 คอลัมน์และตั้งค่าคอลัมน์สีสำหรับคอลัมน์ทั้งหมดตั้งแต่ 1-80 และตั้งค่ากลุ่มไฮไลต์สำหรับคอลัมน์สีเป็นสีที่คุณต้องการให้พื้นหลังปกติของคุณเป็น
mkomitee

2
คำถามหนึ่งในขณะที่ฉันสามารถตั้งค่าสีได้อย่างถูกต้องโดยการพิมพ์:hi colorcolumn ...ดูเหมือนว่าจะใช้ไม่ได้เมื่อใส่ลงใน. vimrc คุณรู้หรือไม่ว่าต้องทำอย่างไร?
robbrit

ฉันพบปัญหาเดียวกันกับ robbrit - ถ้าฉันเรียกใช้คำสั่ง highlight ในโหมด ex มันก็ดูดี แต่ถ้าฉันมีในไฟล์ vimrc ของฉันมันจะทำลาย colorcheme ของฉัน ...
Bennidhamma

17

โซลูชันที่เสนอในความคิดเห็นด้านบน เน้นพื้นหลังของคุณก่อนจากนั้นไฮไลต์ ColorColumn black เป็นภาพซ้อนทับ ตั้งค่าคอลัมน์สีของคุณเป็นบรรทัด 1-80

hi Normal guibg=#32322f ctermbg=236
hi NonText guibg=#32322f ctermbg=236
hi ColorColumn guibg=#000000 ctermbg=0
let &colorcolumn=join(range(1,80),",")

1
เรียบง่าย แต่ยอดเยี่ยม ขอบคุณ!
airstrike

8

ลอง:

:/\%>80v./+

มันจะทำเครื่องหมาย +80 อักขระเป็นข้อผิดพลาด


ฉลาดในการหยิก ฉันชอบเพราะมันปรับให้เข้ากับการเปลี่ยนแปลงธีม ขอบคุณ.
Benjamin

0

ฉันไม่คิดว่าจะมีสิ่งที่คุณต้องการ แต่ฉันติดตามคำถามนี้เนื่องจากฉันสนใจในสิ่งนั้นด้วยตัวเอง

บางทีฉันอาจจะระบุชัดเจน แต่คุณสามารถตั้งค่า highligth ในคอลัมน์ที่ 70 ขึ้นไปเพื่อให้ได้ตัวบ่งชี้ว่าคุณเข้าใกล้คอลัมน์ที่ 80 มากแค่ไหน


0

สำหรับผู้ที่ใช้ onedark.vim เช่นฉันที่ต้องการโซลูชันที่โพสต์โดย Conner ฉันเพิ่มบรรทัดเหล่านี้ลงในไฟล์ vimrc ของฉัน

let &colorcolumn=join(range(1,80),",")
let g:onedark_color_overrides = {
  \ "black": {"gui": "#2C323C", "cterm": "236", "cterm16": "8"},
  \ "cursor_grey": {"gui": "#282C34", "cterm": "235", "cterm16": "0"}
  \ }

ฉันเพิ่งเปลี่ยนค่าสองค่าเอามาจากซอร์สโค้ดของ onedark

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