NeoVim에서 색 구성표 사용시 문제


16

내 색 구성표가 termvim 의 설정 과 어떻게 상호 작용하는지 완전히 이해하지 못했기 때문에 neovim에서 올바르게 표시 할 수 없게됩니다.

내 .vimrc 파일에서 해당 색 구성표의 올바른 동작을 설정해야합니다.

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

neovim에서는 term설정할 수 없습니다. 수동으로 $ TERM을 설정하여 neovim을 호출하려고했습니다.

TERM=xterm nvim

이것은 일반 vim (예 : .vimrc의 설정 용어와 동일)에서 색상을 올바르게 표시하지만 neovim에서는 다음과 같습니다.

여기에 이미지 설명을 입력하십시오

왜의 조합 set term=xtermset t_Co=256설정에 해당하는 조합이 neovim에서 다른 결과를 생성 않는 이유 필요는 정력이 색상의 올바른 디스플레이를 생산하는?

편집하다:

기본값은 $TERM=xterm256-color , 어떤 이유에 무시되어야하는 xterm올바르게 컬러 디스플레이를 만들기 위해 정기적으로 정력에. 환경 변수가 256 기본값 인 neovim은 다음과 같습니다.

여기에 이미지 설명을 입력하십시오

이것은 일반 vim과 동일 xterm256-color하지만 의도 한대로 아닙니다. 내 목표는 xterm 핵이 왜 vim에서 필요하고 작동하는지, 왜 neovim에서 동일하지 않은지 이해하는 것입니다.

위의 env 변수 설정에서 많은 색상이 올바르게 표시되지만 행 번호 및 배경은 예외입니다. 이 특정 색 구성표에서 색을 지정하는 방식이 관련되어있을 수 있습니다.


1
$ TERM은 이미 현대 시스템에서 일반적으로 '정확한'것으로 간주되어 256 색을 지원합니다. 따라서 일반적으로 구형 터미널과의 호환성을위한 t_Co 옵션은 필요하지 않습니다. 두 구성 라인을 모두 주석 처리하면 어떻게됩니까?
David Lord

@David 두 구성 행을 주석 처리하는 것은 주석 처리하는 것과 같습니다 set term=xterm.
Gall

테마를 올바르게 렌더링 할 때 사용하는 iTerm 색상 구성의 스크린 샷 과이 스크립트 를 실행 한 결과를 포함시킬 수 있습니까?
에릭 프 루잇

답변:


11

주요 이슈

발생한 주요 문제는의 명령 순서로 인해 발생합니다 .vimrc.

colorscheme을로드 한 후g:impact_transbg 변수를 설정 하므로 colorscheme의 명령문으로 확인할 때 변수가 존재 하지 않으며 블록 에서 두 번째 버전의 colorscheme 이 사용됩니다.ifelse

수정하려면 변수를로드하는 선 위로 변수를 설정하는 선을 이동하면됩니다.

let g:impact_transbg=1
colorscheme impact3

그런 다음 불필요한 줄을 제거 할 수 있습니다 .vimrc.

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

다른 문제

이 모든 것이 어떻게 작동하는지에 대한 다른 오해 / 혼란을 해결할 수도 있습니다.

'term'& 의 동작 설명't_Co'

$ TERM이 (가)로 설정되었습니다 xterm256-color. Vim은 이것을 읽고 터미널 정보 (또는 termcap)를 쿼리하여 터미널이 지원하는 색상 수를 찾은 다음 't_Co'적절하게 설정합니다 . $ TERM이 올바른 것으로 가정하고 terminfo 데이터베이스에 해당 터미널에 대한 올바른 정보가 포함되어 있다고 가정하면 (수동으로) 수동으로 재설정 할 필요 는 없습니다't_Co' .

그러나 Vim 'term'을 xterm 으로 수동 설정합니다 . terminfo는이 터미널이 8 가지 색상 만 지원한다고 Vim에 알려주므로이 값을 추가하면 8 't_Co'로 잘못 설정됩니다. 수동으로 256 으로 't_Co' 다시 설정 하고 있지만 'term'설정을 올바른 값으로 두었다면 설정하지 않아도됩니다. .

덧붙여 변경할 때, 't_Co'설정 후 수동 g:impact_transbg, 그것은 색상 구성표가 (이 색상 구성표 색의 새 번호에 적응 할 수 있도록) 다시로드되도록하고 있기 때문 g:impact_transbg 입니다 지금 설정, 당신은 당신이 원하는 색상을 얻을.

(라인이 설정으로 'term'생략 't_Co'되어 이미 색상 구성표가 다시로드되지 않도록 당신이 당신의 .vimrc에서 후자의 라인에 도착하면 256로 설정 :. 따라서 잘못된 색)

요약하면 다음과 같습니다.

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명령에 의해 Colorscheme이로드되고 변수가 존재하지 않으며 색상이 잘못되었습니다.

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

결과 : Colorscheme이 colorscheme명령에 의해로드되고 변수가 존재하지 않으며 Vim은 8 가지 색상 만 사용하며 색상이 잘못되었습니다.

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

결과 : colorscheme명령에 의해 Colorscheme이로드되고 변수가 존재하지 않으며 색상이 잘못되었습니다.

let g:impact_transbg=1
colorscheme impact3

결과 : colorscheme명령에 의해 색상 표가로드되고 변수 존재하므로 색상이 정확합니다. (그리고 보너스로 'term'하고 't_Co'도 정확!)

NeoVim 't_Co'에서는 다른 응답자가 이미 언급했듯이 set 호출 이 무시 되기 때문에 동작이 다릅니다 .

'background'

색상 표를 설정 한 후에도 설정합니다 'background'. 이 특정 색 구성표의 경우 색 구성표가하는 첫 번째 작업은로 설정되므로 완전히 불필요 'background'합니다 'dark'.

나는 당신이 'background'당신의 색 구성표를로드 한 후에 설정해야한다고 제안하는 다른 응답자와 동의하지 않습니다. 'background'색상 표는의 값을 사용하여 색상을 조정할 수 있으므로 색상 표 'background'를로드하기 전에 설정 하는 것이보다 명확한 순서입니다. ( 'background'설정 을 변경하면 Vim은로드 된 색상을 다시로드하므로 'background'나중에 설정해 도 효과가 있습니다. 최적이 아닙니다.)


1
감사합니다. 이것은 매우 철저하며 추가 컨텍스트에 감사드립니다.
콘래드 마이어

@ConradMeyer 도움이되어서 다행입니다.
Rich

7

Neovim의 경우, t_CoTERM차이도하지 않습니다.

당신은 호출 set background=dark하기 전에 호출 후 colorscheme impact3. set background=dark색상 표의 맨 아래로 이동 하고 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 핵이 왜 vim에서 필요하고 작동하는지, 왜 neovim에서 동일하지 않은지 이해하는 것입니다.

  • Neovim은 "true color"t_Co활성화 하지 않으면 256을 가정하므로 신경 쓰지 않습니다 .
    • 실제로 Neovim은 모든 t_*옵션을 무시합니다 :help t_xx.
  • Neovim &term은 의미가 없기 때문에 설정할 수 없습니다. Neovim은 유니빌 리엄 및 기타 메커니즘을 사용하여 터미널 기능을 감지합니다.

neovim term 능력 감지 및`t_ *`설정에 대한 통찰력에 감사드립니다. set background=dark명령문 의 중복 사본을 제거하고 위치를 바꾸는 것은 효과가 없었지만 기본 구현에 대한 세부 정보는 나에게 훨씬 더 가치가 있습니다.
Gall

2

나는 당신이 iTerm2를 사용하는 것을 본다.

  1. 우선 순위 창 열기 +,
  2. profiles탭으로 이동
  3. 왼쪽 목록에서 현재 프로필을 확인하십시오.
  4. terminal오른쪽 의 탭 을 클릭하십시오
  5. 에서 Report terminal type선택xterm-256color
  6. 끝난.

제안 해 주셔서 감사합니다. 에 대한 언급으로 위의 내용을 편집했습니다 xterm-256color. 이미 설정된 터미널 유형을 찾기 위해 절차를 수행했습니다.
Gall

2

멋진 NeoVim 기능이 없습니다. 이 물건에 도움이되는 환경 변수가 있습니다. 이것을 nvimrc에 넣으십시오.

let $NVIM_TUI_ENABLE_TRUE_COLOR=1 " True gui colors in terminal

또는

export NVIM_TUI_ENABLE_TRUE_COLOR=1

껍질에.


참고 :이의 사용을 필요로 guifg하고 guibg. OP의 색상 표는 ctermfg및을 사용합니다 ctermbg.
Justin M. Keyes

아, 맞아 죄송합니다!
Yann Vanhalewyn 2018 년

2

옵션을 설정해야합니다

let $NVIM_TUI_ENABLE_TRUE_COLOR=1 
set termguicolors

당신의 .config/nvim/init.vim.


이러한 옵션을 사용하기위한 있습니다 guifgguibgRGB 색상 값. 질문의 색 구성표는 ctermfgand 만 사용합니다 ctermbg.
Tommy A

1
이것은 나를 위해 그것을했다. TERM은 이미 xterm-256color입니다. 감사!
Qix

1

특정 색 구성표는 실제로 if-else 절 내에있는 두 가지 색 구성표입니다. 변수의 존재 g:impact_transbg는 소망하는 색을 설정하고, 원래이되는 배색 투명 배경을 설명하기 위해 의도 된 선택 유래 .

두 번째 색 구성표와 if-else 문을 주석 처리하면 (원하는 색 구성표 만 남기고 버리기 g:impact_transbg) vim과 neovim 모두에서 의도 한 동작을 수행 set term=xterm하거나 set t_Co=256제거 할 수 있습니다.

이것은 $TERM=xterm-256colorsvim과 neovim 모두 조건부에서 if exists("g:impact_transbg")실패하지만 설정의 조합을 의미합니다.

set term=xterm
set t_co=256

조건부 성공을 허용했습니다. 위에서 설명한 것처럼 if-else 절제거하면 중요한 문제가 해결되지만 .vimrc 용어 설정 쌍과과의 상호 작용에 대해서는 여전히 미스터리가 g:impact_transbg있습니다.


0

다음 $TERM과 같이 환경 변수를 설정하십시오 .

TERM=xterm-256color

또한 다음과 같이 nvim을 시작하십시오.

export TERM=xterm-256color; nvim

그것이 효과가 있다면, $TERM쉘 에서 변수를 영구적으로 설정하십시오 .


아이디어 주셔서 감사합니다, Jeff. 에 관한 의견으로 질문을 편집했습니다 xterm-256color. 내보내기를 통해 $ TERM을 설정해도 아무런 영향이 없습니다.
Gall

0

나는 최근에 태양 화 테마 로이 문제를 겪었습니다. TERMenv 변수 에서 문제가 발생했습니다 .

env TERM=xterm-256color zshzsh를 정상적으로 시작하는 대신 터미널 에뮬레이터 (내 경우에는 종결 자)를 실행 하여 수정했습니다.


OPs TERM은 이미 xterm-256color로 설정되어 있습니다. 다른 문제가 발생한 것 같습니다.
Rich
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.