ทำไมไฮไลท์ที่กำหนดเองใน vimrc ของฉันถูกลบหรือรีเซ็ตเป็นค่าเริ่มต้น


10

ฉันต้องการเน้น (เป็นส่วนหนึ่ง) ของสถานะของฉันด้วย%1*เช่น:

set statusline=%1*%f%0*
highlight User1 ctermbg=0 ctermfg=10 cterm=bold

อย่างไรก็ตามสิ่งนี้จะปรากฏเป็น "ว่าง" เสมอ (สีเทอร์มินัลเริ่มต้น):

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

ถ้าฉันพิมพ์:highlight User1มันจะแสดงUser1 xxx clearedและถ้าฉันพิมพ์:highlight User1 ctermbg=0 ctermfg=10 cterm=boldในหน้าต่างคำสั่งดูเหมือนว่าจะทำงาน

ฉันจะใส่สิ่งนี้ลงใน.vimrcไฟล์ของฉันได้อย่างไร

ไฟล์ vimrc เต็มของฉันที่ฉันใช้สำหรับทดสอบ:

set nocompatible
set background=light
colorscheme default
set laststatus=2
set statusline=%1*%f%0*

highlight User1 ctermbg=0 ctermfg=10 cterm=bold

คำตอบ:


13

ปัญหาคือชุดสี (ทั้งหมด?) จำนวนมากจะล้างไฮไลต์ทั้งหมดด้วยhighlight clearก่อนตั้งค่าสีของตัวเอง ตัวอย่างจาก/usr/share/vim/vim74/colors/peachpuff.vim:

" First remove all existing highlighting.
set background=light
hi clear
if exists("syntax_on")
  syntax reset
endif

let colors_name = "peachpuff"

hi Normal guibg=PeachPuff guifg=Black

hi SpecialKey term=bold ctermfg=4 guifg=Blue
" ... Many more highlights follow ...

นอกจากนี้ยังล้างUser1..9กลุ่ม (ซึ่งไม่สมเหตุสมผล IMHO)

การแก้ปัญหาคือการใส่User1..9ไฮไลท์ที่กำหนดเองในColorSchemeautocmd จาก:help ColorScheme:

หลังจากโหลดชุดสี :colorschemeรูปแบบถูกจับคู่กับชื่อ colorcheme <afile>สามารถใช้สำหรับชื่อของไฟล์จริงที่ตัวเลือกนี้ถูกตั้งค่าและ<amatch>สำหรับชื่อ colorcheme ใหม่

ดังนั้นแทนที่จะใช้highlightคำสั่ง"bare" ให้ใช้:

autocmd ColorScheme *
        \ highlight User1 ctermbg=0 ctermfg=10 cterm=bold |
        \ highlight User2 ctermbg=0 ctermfg=9 cterm=bold

หากคุณเปลี่ยนชุดสีบ่อย ๆ คุณสามารถใช้:

autocmd ColorScheme colorscheme_one_name  highlight User1 ctermbg=0 ctermfg=10 cterm=bold
autocmd ColorScheme another_scheme        highlight User1 ctermbg=0 ctermfg=11 cterm=bold

เพื่อให้ได้สีที่ตรงกับชุดสีเฉพาะ

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