NeoVim में रंग योजना का उपयोग करने में परेशानी


16

मुझे इस बात की पूरी जानकारी नहीं है कि मेरी रंग योजना किस प्रकार termसेटिंग के साथ बातचीत कर रही है और यह मेरी क्षमता को सही ढंग से प्रदर्शित करने के लिए इसे लागू कर रही है।

मेरी .vrc फ़ाइल में, प्रश्न में रंग योजना के सही व्यवहार के लिए सेटिंग की आवश्यकता होती है

set term=xterm
set t_Co=256

उन सेटिंग्स में से किसी को भी रंग योजना के गलत प्रदर्शन के परिणामस्वरूप:

सही सही रंग प्रदर्शन गलत गलत रंग प्रदर्शन अलग गलत विभिन्न गलत रंग प्रदर्शन

योजना इस प्रकार है:

set background=dark
hi clear
if exists("syntax_on")
    syntax reset
endif
let g:colors_name="impact3"

if exists("g:impact_transbg")
    hi Normal       ctermfg=255 ctermbg=none
    hi NonText      ctermfg=DarkGray  ctermbg=none

    hi Statement    ctermfg=Blue      ctermbg=none
    hi Comment      ctermfg=DarkGray  ctermbg=none cterm=bold term=bold
    hi Constant     ctermfg=173  ctermbg=none
    hi Identifier   ctermfg=Cyan      ctermbg=none
    hi Type         ctermfg=DarkGreen ctermbg=none
    hi Folded       ctermfg=0 ctermbg=235 cterm=underline term=none
    hi Special      ctermfg=Blue      ctermbg=none
    hi PreProc      ctermfg=LightGray ctermbg=none cterm=bold term=bold
    hi Scrollbar    ctermfg=Blue      ctermbg=none
    hi Cursor       ctermfg=white     ctermbg=none
    hi ErrorMsg     ctermfg=Red       ctermbg=none cterm=bold term=bold
    hi WarningMsg   ctermfg=Yellow    ctermbg=none
    hi VertSplit    ctermfg=0     ctermbg=0
    hi Directory    ctermfg=Cyan      ctermbg=DarkBlue
    hi Visual       ctermfg=White     ctermbg=Gray cterm=underline term=none
    hi Title        ctermfg=255     ctermbg=Blue
    hi String       ctermfg=Blue   ctermbg=none

    hi StatusLine   term=bold cterm=bold,underline ctermfg=White ctermbg=Black
    hi StatusLineNC term=bold cterm=bold,underline ctermfg=Gray  ctermbg=Black
    hi LineNr       term=bold cterm=bold ctermfg=2 ctermbg=None
    hi Search       ctermfg=Black ctermbg=2
    hi TabLine      ctermfg=0 ctermbg=DarkGray
    hi TabLineFill  ctermfg=DarkGray ctermbg=DarkGray
else
    hi Normal       ctermfg=White ctermbg=Black
    hi NonText      ctermfg=DarkGray  ctermbg=Black

    hi Statement    ctermfg=Blue      ctermbg=Black
    hi Comment      ctermfg=DarkGray  ctermbg=Black cterm=bold term=bold
    hi Constant     ctermfg=DarkCyan  ctermbg=Black
    hi Identifier   ctermfg=Cyan      ctermbg=Black
    hi Type         ctermfg=DarkGreen ctermbg=Black
    hi Folded       ctermfg=DarkGreen ctermbg=Black cterm=underline term=none
    hi Special      ctermfg=Blue      ctermbg=Black
    hi PreProc      ctermfg=LightGray ctermbg=Black cterm=bold term=bold
    hi Scrollbar    ctermfg=Blue      ctermbg=Black
    hi Cursor       ctermfg=white     ctermbg=Black
    hi ErrorMsg     ctermfg=Red       ctermbg=Black cterm=bold term=bold
    hi WarningMsg   ctermfg=Yellow    ctermbg=Black
    hi VertSplit    ctermfg=White     ctermbg=Black
    hi Directory    ctermfg=Cyan      ctermbg=DarkBlue
    hi Visual       ctermfg=White     ctermbg=DarkGray cterm=underline term=none
    hi Title        ctermfg=White     ctermbg=DarkBlue

    hi StatusLine   term=bold cterm=bold,underline ctermfg=White ctermbg=Black
    hi StatusLineNC term=bold cterm=bold,underline ctermfg=Gray  ctermbg=Black
    hi LineNr       term=bold cterm=bold ctermfg=White ctermbg=Black
endif

नवगीत में, termसेट नहीं किया जा सकता। मैंने नवोन्मेष को मैन्युअल रूप से सेट किए गए $ TERM के साथ लागू करने की कोशिश की:

TERM=xterm nvim

इससे नियमित रूप से विम में रंगों का सही प्रदर्शन हुआ (यानी .vimrc में समतुल्य होने के बराबर), लेकिन नवम में यह इस तरह दिखता है:

यहाँ छवि विवरण दर्ज करें

इस रंग योजना के सही प्रदर्शन का उत्पादन करने के लिए संयोजन set term=xtermऔर set t_Co=256आवश्यक क्यों है और सेटिंग्स के समतुल्य संयोजन नवोन्मेष में एक अलग परिणाम कैसे उत्पन्न करता है?

संपादित करें:

डिफ़ॉल्ट है $TERM=xterm256-color , जो किसी कारण xtermसे रंग को सही ढंग से प्रदर्शित करने के लिए नियमित रूप से विम में ओवरराइड करना पड़ता है। 256 डिफॉल्ट पर पर्यावरण चर के साथ, नवविवाह इस तरह दिखता है:

यहाँ छवि विवरण दर्ज करें

यह नियमित विम के समान है xterm256-color, लेकिन जैसा कि इरादा नहीं है। मेरा लक्ष्य यह समझना है कि क्यों xterm हैक आवश्यक है / विम में काम कर रहा है, और यह नवविवाह में समान क्यों नहीं दिखता है।

ध्यान दें कि कई रंग उपरोक्त शब्द एनवी चर सेटिंग के साथ सही रूप से दिखाई देते हैं, उल्लेखनीय अपवाद पंक्ति संख्या और पृष्ठभूमि हैं। मुझे संदेह है कि इस विशिष्ट रंग योजना में रंगों को निर्दिष्ट करने के तरीके शामिल हो सकते हैं।


1
आपका $ TERM पहले से ही आधुनिक सिस्टम पर आमतौर पर 'सही' माना जाता है - 256-रंग सक्षम। तो t_Co विकल्प, जो सामान्य रूप से पुराने टर्मिनलों के साथ संगतता के लिए है, आवश्यक नहीं होना चाहिए। क्या होगा यदि आप दोनों कॉन्फ़िगरेशन लाइनों को टिप्पणी करते हैं?
डेविड लॉर्ड

@David दोनों कॉन्फिगर लाइनों को कमेंट करना, बाहर टिप्पणी करने जैसा ही दिखता है set term=xterm
गैल

क्या आप iTerm रंग कॉन्फ़िगरेशन का एक स्क्रीनशॉट शामिल कर सकते हैं, जिसका उपयोग आप तब करते हैं जब थीम सही ढंग से प्रदान की जाती है और साथ ही इस स्क्रिप्ट को चलाने से आउटपुट भी होता है ?
एरिक प्रुइट

जवाबों:


11

मुख्य मुद्दा

आपके द्वारा अनुभव की जा रही मुख्य समस्या आपके आदेशों के आदेश के कारण है .vimrc

आप colorcheme को लोड करने के बादg:impact_transbg वेरिएबल सेट करते हैं , और इसलिए colorcheme के स्टेटमेंट को चेक करने पर वेरिएबल मौजूद नहीं होता है , और colorcheme के दूसरे वर्जन ( ब्लॉक में) का उपयोग किया जाता है।ifelse

ठीक करने के लिए, आपको बस उस लाइन को स्थानांतरित करने की आवश्यकता है जो उस रेखा के ऊपर चर सेट करता है जहां आप colorcheme लोड करते हैं:

let g:impact_transbg=1
colorscheme impact3

आप (और!) तो अपने से अनावश्यक लाइनों को हटा सकते हैं .vimrc:

set term=xterm
set background=dark
set t_Co=256

अन्य मामले

मैं कुछ अन्य गलत धारणाओं / भ्रमों को भी दूर कर सकता हूं जो आपके बारे में हो सकते हैं कि यह सब कैसे काम करता है:

के व्यवहार की व्याख्या 'term'और't_Co'

आपका $ TERM सेट है xterm256-color। विम इसे पढ़ता है, और टर्मिनल का समर्थन करने वाले कितने रंगों का पता लगाने के लिए टर्मिनोज़ (या टर्मपैक) पूछता है, और फिर 't_Co'उसी के अनुसार सेट करता है । यह मानकर कि आपका $ TERM सही है (आपका है) और आपके टर्मिनल डेटाबेस में उस टर्मिनल के लिए सही जानकारी है (जो आपको चाहिए) मैन्युअल रूप से रीसेट करने की आवश्यकता नहीं't_Co'

हालाँकि, आप तब मैन्युअल रूप से Vim's 'term'को xterm पर सेट कर रहे हैं । आपका शब्दकोष विम को बताता है कि यह टर्मिनल केवल 8 रंगों का समर्थन करता है, इसलिए इसे जोड़ने 't_Co'से गलत तरीके से सेट हो जाएगा 8. आप मैन्युअल रूप से वापस सेट कर रहे हैं't_Co' से 256 पर , लेकिन यदि आपने 'term'सेटिंग को सही मूल्य पर छोड़ दिया था , तो आपको इसकी आवश्यकता नहीं होगी ।

संयोग से, जब आप 't_Co'सेटिंग करने के बाद मैन्युअल रूप से बदलते हैं g:impact_transbg, तो यह Colorcheme को फिर से लोड करने का कारण बनता है (Colorcheme को रंगों की नई संख्या के अनुकूल होने की अनुमति देने के लिए), और क्योंकिg:impact_transbg है अब निर्धारित करते हैं, आप रंग आप की इच्छा हो।

(लाइन सेटिंग के साथ 'term'छोड़ा गया, 't_Co'है पहले ही 256 पर सेट है जब आप अपने .vimrc में बाद की लाइन पर पहुंचते हैं, और इसलिए colorcheme पुनः लोड नहीं किया जाता है: इसलिए गलत रंग।)

तो, पुनरावृत्ति करने के लिए:

term=xterm
colorscheme impact3
let g:impact_transbg=1
set t_Co=256

परिणाम: कलर्सकेम को पुनः लोड किया 't_Co'जाता है जब 256 पर सेट किया जाता है, तो रंग सही होते हैं।

"term=xterm
colorscheme impact3
let g:impact_transbg=1
set t_Co=256

परिणाम: कलर्सकेम को colorschemeकमांड द्वारा लोड किया गया है, चर मौजूद नहीं है, रंग गलत हैं।

term=xterm
colorscheme impact3
let g:impact_transbg=1
"set t_Co=256

परिणाम: कलर्सकेम को colorschemeकमांड द्वारा लोड किया गया है, चर मौजूद नहीं है और विम केवल 8 रंगों का उपयोग करता है, रंग गलत हैं।

"term=xterm
colorscheme impact3
let g:impact_transbg=1
"set t_Co=256

परिणाम: कलर्सकेम को colorschemeकमांड द्वारा लोड किया गया है, चर मौजूद नहीं है, रंग गलत हैं।

let g:impact_transbg=1
colorscheme impact3

परिणाम: कलर्सकेम को colorschemeकमांड द्वारा लोड किया जाता है , चर करता है , अस्तित्व तो रंग सही हैं। (और एक बोनस के रूप में 'term'और 't_Co'सही भी हैं!)

NeoVim में व्यवहार केवल इसलिए अलग है क्योंकि सेट करने के लिए कॉल को 't_Co'अनदेखा कर दिया गया है, जैसा कि अन्य उत्तरदाताओं ने पहले ही उल्लेख किया है।

'background'

Colorcheme सेट करने के बाद, आप भी सेट करें 'background'। इसके लिए विशेष रूप से रंग-, यह पूरी तरह अनावश्यक है, क्योंकि पहली बात यह रंग-करता है सेट करने के लिए है'background' के लिए 'dark'

ध्यान दें कि मैं दूसरे उत्तर देने वाले से असहमत हूं, जो सुझाव देता है कि आपको 'background'अपना कलरकेम लोड करने के बाद सेट करना चाहिए । Colorcheme 'background'अपने रंगों को समायोजित करने के लिए मान का उपयोग कर सकता है , इसलिए 'background'colorcheme लोड करने से पहले सेटिंग अधिक स्पष्ट क्रम है। (हालांकि ध्यान दें कि यदि आप 'background'सेटिंग बदलते हैं, तो Vim किसी भी लोड किए गए कलचेस को फिर से लोड करेगा, इसलिए इसे 'background'बाद में सेट करना भी काम करेगा: यह सिर्फ गैर-इष्टतम है।


1
धन्यवाद, यह पूरी तरह से है और मैं अतिरिक्त संदर्भ की सराहना करता हूं।
कॉनरेड मेयर

@ConradMeyer मुझे खुशी है कि यह आपके लिए उपयोगी था!
रिच

7

नेओविम के मामले में, t_Coऔर TERMकोई फर्क नहीं पड़ता।

आप कॉल करने set background=darkसे पहले और बाद में कॉल कर रहे हैं colorscheme impact3set background=darkColorcheme के निचले भाग में जाएं , और अपने vimrc से दूसरी कॉल निकालें

से :help 'background':

When 'background' is set Vim will adjust the default color 
groups for the new value.
...
When a color scheme is loaded (the "g:colors_name" variable 
is set) setting 'background' will cause the color scheme to 
be reloaded.

इसे भी देखें: https://github.com/justinmk/molokai/commit/aa1cc201c743dd7d1b80bb2e2b5fbb7894ebfe5f

मेरा लक्ष्य यह समझना है कि क्यों xterm हैक आवश्यक है / विम में काम कर रहा है, और यह नवविवाह में समान क्यों नहीं दिखता है।

  • t_Coजब तक आप "असली रंग" को सक्षम नहीं करते तब तक नवविराम की परवाह नहीं है ।
    • वास्तव में नियोविम सभी t_*विकल्पों की उपेक्षा करता है , देखें :help t_xx
  • नेओविम &termको सेट होने की अनुमति नहीं है क्योंकि यह अर्थहीन है। नेओविम टर्मिनल क्षमताओं का पता लगाने के लिए यूनिबिलियम और अन्य तंत्रों का उपयोग करता है।

नवम अवधि क्षमता का पता लगाने और `t_ *` सेटिंग्स के बारे में अपनी अंतर्दृष्टि के लिए बहुत बहुत धन्यवाद। की निरर्थक प्रति को हटाने और set background=darkबयान को रद्द करने का प्रभाव नहीं पड़ा, लेकिन अंतर्निहित कार्यान्वयन के बारे में उन विवरण मेरे लिए बहुत अधिक मूल्यवान हैं।
गैल

2

मुझे लगता है कि आप iTerm2 का उपयोग करते हैं, इसलिए आप यह कोशिश कर सकते हैं:

  1. खुली पसंद खिड़की +,
  2. profilesटैब पर जाएं
  3. बाईं सूची में अपनी वर्तमान प्रोफ़ाइल जांचें
  4. terminalदाईं ओर टैब पर क्लिक करें
  5. में Report terminal typeचयनxterm-256color
  6. किया हुआ।

तुम्हारे सुझाव के लिए धन्यवाद। मैंने उपरोक्त टिप्पणी के संबंध में संपादन किया xterm-256color। मैंने पहले ही इस प्रकार सेट टर्मिनल प्रकार को खोजने के लिए आपकी प्रक्रिया का अनुसरण किया।
गैल

2

आपको एक बढ़िया NeoVim सुविधा याद आ रही है। वहाँ एक एन.वी. संस्करण है कि इस सामान के साथ मदद करता है। इसे अपने nvimrc में डालने का प्रयास करें:

let $NVIM_TUI_ENABLE_TRUE_COLOR=1 " True gui colors in terminal

या

export NVIM_TUI_ENABLE_TRUE_COLOR=1

खोल में।


FYI करें: इस के उपयोग की आवश्यकता होगी guifgऔर guibg। ओपी के कलकेम का उपयोग करता है ctermfgऔर ctermbg
जस्टिन एम। कीज़

ओह, तुम सही हो। माफ़ करना!
यान वन्हेल्विन

2

आपको विकल्प सेट करने की आवश्यकता है

let $NVIM_TUI_ENABLE_TRUE_COLOR=1 
set termguicolors

अपने में .config/nvim/init.vim


उन विकल्पों का उपयोग कर के लिए कर रहे हैं guifgऔर guibgआरजीबी रंग के लिए महत्व देता है। प्रश्न का रंग योजना केवल उपयोग करती है ctermfgऔर ctermbg
टॉमी ए

1
इसने मेरे लिए यह किया। TERM पहले से ही xterm-256color था। धन्यवाद!
Qix - मोनासा

1

ध्यान दें कि विशिष्ट रंग योजना वास्तव में एक-दूसरे खंड के भीतर रंग योजनाओं के दो सेट हैं। चर g:impact_transbgका अस्तित्व रंगों के वांछित सेट का चयन करता है, और मूल रूप से रंग योजना में पारदर्शी पृष्ठभूमि के लिए जिम्मेदार था, जिसमें से यह व्युत्पन्न है

2 रंग योजना और if-else स्टेटमेंट को टिप्पणी करना (केवल वांछित रंग योजना को छोड़ना और दूर करना g:impact_transbg) दोनों विम और नव-व्यवहार में इच्छित व्यवहार को जन्म देता है set term=xtermऔर साथ हीset t_Co=256 हटाए गए है।

इसका तात्पर्य यह है कि $TERM=xterm-256colorsविम और नियोविम दोनों में, सशर्त if exists("g:impact_transbg")विफल रहता है, लेकिन सेटिंग का संयोजन

set term=xterm
set t_co=256

सशर्त को सफल होने दिया। सामग्री के मुद्दे के हल के रूप में वर्णित उपवाक्य को हटाते हुए, लेकिन .vimrc टर्म सेटिंग्स और जोड़ी के बीच की बातचीत के बारे में अभी भी एक रहस्य है g:impact_transbg


0

अपने $TERMपर्यावरण चर को इस तरह सेट करने का प्रयास करें:

TERM=xterm-256color

इस तरह nvim शुरू करने का भी प्रयास करें:

export TERM=xterm-256color; nvim

यदि वह काम करता है, तो $TERMअपने शेल में चर को स्थायी रूप से सेट करें ।


इस विचार के लिए धन्यवाद, जेफ। मैंने अपने प्रश्न को टिप्पणी के साथ संपादित किया xterm-256color। निर्यात के माध्यम से $ TERM की स्थापना का कोई प्रभाव नहीं पड़ा।
गैल

0

हाल ही में सोलराइज्ड थीम के साथ मेरे पास यह मुद्दा था। समस्या से आया थाTERM env चर ।

मैंने अपने टर्मिनल एमुलेटर (मेरे मामले में टर्मिनेटर) को यह बताकर ठीक किया कि इसे env TERM=xterm-256color zshसामान्य रूप से शुरू करने के बजाय बस चलाएं।


ओप्स टरम पहले से ही xterm-256color पर सेट है। मुझे लगता है कि आप एक अलग मुद्दे का अनुभव कर रहे थे।
रिच
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.