Lingkungan Hidup:
- Fedora 25 (4.9.12-200.fc25.x86_64)
- Terminal GNOME 3.22.1 Menggunakan VTE versi 0.46.1 + GNUTLS
- VIM - Vi IMproved 8.0 (2016 Sep 12, disusun 22 Feb 2017 16:26:11)
- tmux 2.2
Saya baru-baru ini mulai menggunakan tmux dan telah mengamati bahwa warna dalam Vim berubah tergantung pada apakah saya menjalankan di dalam atau di luar tmux. Di bawah ini adalah screenshot Vim di luar (kiri) dan di dalam (kanan) dari tmux saat melihat Git diff:
TERM
Variabel saya adalah
- Di luar tmux:
xterm-256color
- Di dalam tmux:
screen-256color
Vim melaporkan jenis terminal ini seperti yang diharapkan (via :set term?
):
- Di luar tmux:
term=xterm-256color
- Di dalam tmux:
term=screen-256color
Vim juga melaporkan kedua instance berjalan dalam mode 256-warna (via :set t_Co?
):
- Di luar tmux:
t_Co=256
- Di dalam tmux:
t_Co=256
Ada banyak pertanyaan serupa di luar sana mengenai bagaimana menjalankan Vim dalam mode 256-warna di dalam tmux (jawaban terbaik yang saya temukan ada di sini ), tetapi saya tidak berpikir itu masalah saya mengingat informasi di atas.
Saya dapat menduplikasi masalah di luar tmux jika saya menjalankan Vim dengan tipe terminal yang diatur ke screen-256color
:
$ TERM=screen-256color vim
Jadi itu membuat saya percaya ada beberapa perbedaan antara kemampuan terminal xterm-256color
dan screen-256color
yang menyebabkan perbedaan warna. Yang mengarah ke pertanyaan yang diajukan dalam judul: apa yang secara khusus dalam kemampuan terminal menyebabkan warna Vim menjadi berbeda? Saya melihat perbedaan antara menjalankan :set termcap
di dalam dan di luar tmux, tapi saya ingin tahu variabel mana yang sebenarnya menyebabkan perbedaan perilaku.
Terlepas dari pertanyaan sebelumnya, mungkinkah warna Vim konsisten saat berjalan di dalam atau di luar tmux? Beberapa hal yang saya coba antara lain:
- Secara eksplisit mengatur terminal default yang digunakan tmux
~/.tmux.conf
ke berbagai nilai (beberapa bertentangan dengan saran dari FAQ tmux ):
set -g default-terminal "screen-256color" set -g default-terminal "xterm-256color" set -g default-terminal "screen.xterm-256color" set -g default-terminal "tmux-256color"
- Mulai tmux menggunakan
tmux -2
.
Dalam semua kasus, Vim terus menampilkan berbagai warna di dalam tmux.
xterm-256color
versi (mencari "38; 5;" dalam file), tetapi tidak dapat dalam screen-256color
. Misalnya dimanapun ada \e[38;5;81m
dalam xterm-256color
(warna # 81 dari palet 256-warna, warna biru tengah), screen-256color
berisi \e[34m
(standar biru dari palet 8-warna). Jadi pertanyaan utamanya adalah mengapa vim tidak menggunakan palet 256-warna jika ada TERM=screen-256color
.
xterm-256color
versi tersebut tampaknya mencetak layar dua kali, pertama dengan warna legacy dan kemudian dengan palet 256 warna. Cari misalnya "F1" dalam file, Anda akan menemukan dua kecocokan xterm-256color
, yang pertama dengan \e[34m
warna, yang kedua dengan \e[38;5;81m
. Saya tidak tahu apa yang terjadi di sini.
set -g default-terminal "screen.xterm-256color"
di ~/.tmux.conf
dan reload config di tmux (<Cs>: sumber-berkas ~ / .tmux.conf) bekerja untuk saya (masalah sorot). thx
script
, memulaivim
, keluarvim
dan kemudian keluarscript
dari shell, dan lampirkantypescript
file yang dihasilkan ? Kemudian ulangi langkah yang samaTERM=screen-256color vim
sebagai gantinya.