Saya tidak memiliki pemahaman penuh tentang bagaimana skema warna saya berinteraksi dengan term
pengaturan di vim dan ini menghambat kemampuan saya untuk membuatnya ditampilkan dengan benar di neovim.
Dalam file .vimrc saya, perilaku yang benar dari skema warna tersebut membutuhkan pengaturan
set term=xterm
set t_Co=256
Menghilangkan salah satu dari pengaturan tersebut menghasilkan tampilan skema warna yang salah:
benar salah berbeda salah
Skemanya terlihat seperti ini:
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
Dalam neovim, term
tidak dapat diatur. Saya mencoba menggunakan neovim dengan menetapkan $ TERM secara manual seperti:
TERM=xterm nvim
Ini menghasilkan tampilan warna yang benar dalam vim reguler (yaitu setara dengan istilah pengaturan dalam .vimrc), tetapi dalam neovim tampilannya seperti ini:
Mengapa kombinasi set term=xterm
dan set t_Co=256
perlu untuk menghasilkan tampilan yang benar dari skema warna ini dalam vim dan mengapa kombinasi pengaturan yang setara menghasilkan hasil yang berbeda dalam neovim?
Edit:
Standarnya adalah $TERM=xterm256-color
, yang karena alasan tertentu harus ditimpa xterm
dalam vim biasa untuk membuat tampilan warna dengan benar. Dengan variabel lingkungan pada 256 default, neovim terlihat seperti ini:
Ini identik dengan vim biasa dengan xterm256-color
, tetapi tidak seperti yang dimaksudkan. Tujuan saya adalah untuk memahami mengapa peretasan xterm diperlukan / bekerja di vim, dan mengapa peretasannya tidak terlihat sama di neovim.
Perhatikan bahwa banyak warna muncul dengan benar dengan pengaturan variabel env istilah di atas, pengecualian penting adalah nomor baris dan latar belakang. Saya menduga bahwa cara warna ditentukan dalam skema warna khusus ini mungkin terlibat.
sumber
set term=xterm
.Jawaban:
Isu utama
Masalah utama yang Anda alami disebabkan oleh urutan perintah di komputer Anda
.vimrc
.Anda mengatur
g:impact_transbg
variabel setelah Anda memuat colorscheme, dan variabel tidak ada ketika diperiksa oleh pernyataan colorschemeif
, dan versi kedua dari colorscheme (dielse
blok) digunakan.Untuk memperbaikinya, Anda hanya perlu memindahkan garis yang mengatur variabel di atas garis tempat Anda memuat skema warna:
Anda dapat (dan harus!) Lalu menghapus garis yang tidak perlu dari
.vimrc
:Masalah lain
Saya juga dapat menjernihkan beberapa kesalahpahaman / kebingungan lain yang mungkin Anda miliki tentang bagaimana semua ini bekerja:
Menjelaskan perilaku
'term'
&'t_Co'
$ TERM Anda disetel ke
xterm256-color
. Vim membaca ini, dan menanyakan terminfo (atau termcap) untuk mengetahui berapa banyak warna yang didukung terminal, dan kemudian menyetelnya't_Co'
. Anggap $ TERM Anda benar (milik Anda) dan database terminfo Anda berisi informasi yang benar untuk terminal itu (milik Anda), Anda tidak perlu mereset secara manual't_Co'
.Namun, Anda kemudian secara manual mengatur Vim
'term'
ke xterm. Terminfo Anda memberi tahu Vim bahwa terminal ini hanya mendukung 8 warna, jadi menambahkan ini akan menyebabkan't_Co'
salah diatur ke 8. Anda secara manual mengatur't_Co'
kembali ke 256, tetapi jika Anda telah meninggalkan'term'
pengaturan pada nilai yang benar, Anda tidak perlu .Kebetulan, ketika Anda mengubah
't_Co'
secara manual setelah pengaturang:impact_transbg
, hal itu menyebabkan colorscheme yang akan ulang (untuk memungkinkan colorscheme untuk beradaptasi dengan nomor baru warna), dan karenag:impact_transbg
itu sekarang ditetapkan, Anda mendapatkan warna yang Anda inginkan.(Dengan garis pengaturan
'term'
dihilangkan,'t_Co'
ini sudah diatur untuk 256 ketika Anda sampai ke garis terakhir dalam vimrc Anda, dan begitu colorscheme tidak reloaded:. Maka warna yang salah)Jadi, untuk rekap:
Hasil: Colorscheme dimuat ulang ketika
't_Co'
diatur ke 256, warna sudah benar.Hasil: Colorscheme diambil oleh
colorscheme
perintah, variabel tidak ada, warna salah.Hasil: Colorscheme dimuat oleh
colorscheme
perintah, variabel tidak ada dan Vim hanya menggunakan 8 warna, warna salah.Hasil: Colorscheme diambil oleh
colorscheme
perintah, variabel tidak ada, warna salah.Hasil: Skema warna dimuat oleh
colorscheme
perintah, variabel tidak ada, sehingga warna yang benar. (Dan sebagai bonus'term'
dan't_Co'
juga benar!)Perilaku ini berbeda di NeoVim hanya karena panggilan untuk mengatur
't_Co'
diabaikan, seperti penjawab lain telah sebutkan.'background'
Setelah mengatur skema warna, Anda juga mengatur
'background'
. Untuk ini khusus colorscheme, ini benar-benar tidak perlu, karena hal pertama colorscheme yang dilakukan adalah untuk set'background'
ke'dark'
.Perhatikan bahwa saya tidak setuju dengan penjawab lain yang menyarankan Anda harus mengatur
'background'
setelah memuat skema warna Anda. Skema warna dapat menggunakan nilai'background'
untuk menyesuaikan warnanya, jadi pengaturan'background'
sebelum memuat skema warna adalah urutan yang lebih jelas. (Meskipun perhatikan bahwa jika Anda mengubah'background'
pengaturan, Vim akan memuat ulang semua skema warna yang dimuat, jadi menyetelnya'background'
kemudian juga akan berfungsi: itu hanya tidak optimal.)sumber
Dalam kasus Neovim,
t_Co
danTERM
tidak ada bedanya.Anda menelepon
set background=dark
sebelum dan sesudah panggilan kecolorscheme impact3
. Pindahset background=dark
ke bagian bawah skema warna, dan hapus panggilan lain dari vimrc Anda.Dari
:help 'background'
:Lihat juga: https://github.com/justinmk/molokai/commit/aa1cc201c743dd7d1b80bb2e2b5fbb7894ebfe5f
t_Co
karena mengasumsikan 256 kecuali Anda mengaktifkan "true color" .t_*
opsi, lihat:help t_xx
.&term
untuk ditetapkan karena tidak ada artinya. Neovim menggunakan unibilium dan mekanisme lain untuk mendeteksi kemampuan terminal.sumber
set background=dark
pernyataan itu tidak berpengaruh, tetapi rincian tentang implementasi yang mendasarinya jauh lebih berharga bagi saya.Saya melihat Anda menggunakan iTerm2, sehingga Anda dapat mencoba ini:
profiles
tabterminal
di sebelah kananReport terminal type
pilihxterm-256color
sumber
xterm-256color
. Saya menindaklanjuti dengan prosedur Anda untuk menemukan jenis terminal yang sudah diatur demikian.Anda kehilangan fitur NeoVim yang luar biasa. Ada env var yang membantu dengan hal ini. Coba letakkan ini di nvimrc Anda:
Atau
di shell.
sumber
guifg
danguibg
. Colorscheme OP menggunakanctermfg
danctermbg
.Anda perlu mengatur opsi
di Anda
.config/nvim/init.vim
.sumber
guifg
danguibg
nilai RGB untuk warna. Skema warna pertanyaan hanya menggunakanctermfg
danctermbg
.Perhatikan bahwa skema warna spesifik sebenarnya adalah dua set skema warna dalam klausa if-else. Keberadaan variabel
g:impact_transbg
memilih set warna yang diinginkan, dan pada awalnya dimaksudkan untuk menjelaskan latar belakang transparan dalam skema warna dari mana ini berasal .Mengomentari skema warna ke-2 dan pernyataan if-else (hanya menyisakan skema warna yang diinginkan dan menghapusnya
g:impact_transbg
) menghasilkan perilaku yang dimaksudkan dalam vim dan neovim bahkan denganset term=xterm
danset t_Co=256
menghapus.Ini menyiratkan bahwa dengan
$TERM=xterm-256colors
vim dan neovim, kondisiif exists("g:impact_transbg")
gagal, tetapi kombinasi pengaturanmemungkinkan persyaratan untuk berhasil. Menghapus klausa if-else seperti yang dijelaskan di atas menyelesaikan masalah material, tetapi masih ada misteri mengenai interaksi antara pasangan pengaturan istilah .vimrc dan
g:impact_transbg
.sumber
Coba atur
$TERM
variabel lingkungan Anda seperti ini:Coba juga mulai nvim seperti ini:
Jika berhasil, atur
$TERM
variabel di shell Anda secara permanen.sumber
xterm-256color
. Pengaturan $ TERM via export tidak berpengaruh.Saya memiliki masalah ini baru-baru ini dengan tema soliter. Masalahnya memang berasal dari
TERM
variabel env.Saya memperbaikinya dengan mengatakan emulator terminal saya (terminator dalam kasus saya) untuk menjalankan,
env TERM=xterm-256color zsh
bukan hanya memulai zsh seperti biasa.sumber