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:
TERMVariabel 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-256colordan screen-256coloryang 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 termcapdi 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.confke 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-256colorversi (mencari "38; 5;" dalam file), tetapi tidak dapat dalam screen-256color. Misalnya dimanapun ada \e[38;5;81mdalam xterm-256color(warna # 81 dari palet 256-warna, warna biru tengah), screen-256colorberisi \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-256colorversi 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[34mwarna, yang kedua dengan \e[38;5;81m. Saya tidak tahu apa yang terjadi di sini.
set -g default-terminal "screen.xterm-256color"di ~/.tmux.confdan reload config di tmux (<Cs>: sumber-berkas ~ / .tmux.conf) bekerja untuk saya (masalah sorot). thx


script, memulaivim, keluarvimdan kemudian keluarscriptdari shell, dan lampirkantypescriptfile yang dihasilkan ? Kemudian ulangi langkah yang samaTERM=screen-256color vimsebagai gantinya.