Apa yang dilakukan: set background = dark do?

35

Saya tidak menempatkan color xxxdi saya .vimrc. Jadi saya melihat ini ketika saya pertama kali membuka .vimrc.

:colorberikan saya di defaultsini. Sebelum apa pun

Lalu aku mengetik :color darcula. Dan itu berubah menjadi ini.

:colormemberi saya di darculasini (secara alami). Ubah skema warna

Lalu aku mengetik :set background=dark. Dan itu berubah menjadi ini.

:colormemberi saya di defaultsini (luar biasa). Ubah latar belakang

Jadi pertanyaan saya adalah, apa sebenarnya yang :set background=darkharus dilakukan?

Saya mencoba :h backgrounddan tidak menemukan sesuatu yang bermanfaat. Saya mengerti bahwa perintah ini tidak benar-benar mengubah latar belakang, hanya vim yang akan mengubah warna yang sesuai. Tetapi saya masih ingin menanyakan pertanyaan ini. Karena saya sangat senang dengan warna setelahnya :color darculadan :set background=darkjadi saya bertanya-tanya bagaimana menulis skema warna saya sendiri tanpa harus memasukkan ke set background=darkdalam warna saya .vimrc.

Saya mengambil saran dari @statox dan meletakkan set background=darkdi baris terakhir dari saya darcula.vim. Lalu color darculaberi saya tangkapan layar ketiga. Namun ketika saya meletakkannya di baris pertama, color darculaberi saya tangkapan layar kedua. Juga set bg=darkmengubahnya ke tangkapan layar ketiga.

Saya berasumsi dengan meletakkannya di baris pertama, saya mengatakan kepada vim bahwa skema warna ini dirancang untuk latar belakang yang gelap. Dengan meletakkannya di baris terakhir, pada kontras, saya membiarkan vim berasumsi bahwa skema warna ini dirancang untuk latar belakang yang terang dan kemudian membuat vim mengubahnya beberapa dengan sendirinya (ketika memproses baris terakhir).

Jika apa yang saya asumsikan terjadi adalah benar, pertanyaan saya masih belum terjawab. Apa sebenarnya yang berubah vim, ketika saya menggunakan set bg=darkSETELAH itu telah memuat skema warna yang terang?

Seluruh konfigurasi vim saya tersedia di https://github.com/MichaelMa2014/.vim

Michael Ma
sumber
@muru Salam! Saya telah membaca pertanyaan ini sebelum menanyakan pertanyaan saya. Disebutkan dalam posting itu bahwa :set bg=lightdan :set bg=darktidak berlawanan, tetapi apa sebenarnya mereka tidak dijelaskan. Juga posting itu sebabnya saya ingin menghindari :set background=darkdi blog saya .vimrc.
Michael Ma

Jawaban:

32

Apa yang terjadi ketika kamu :set background

Mekanisme dasar yang :set backgrounddigunakan sebenarnya cukup sederhana, dan didokumentasikan (walaupun tidak terlalu jelas) di :help 'background'.

Ketika 'latar belakang' diatur, Vim akan menyesuaikan grup warna default untuk nilai baru. Namun warna yang digunakan untuk penyorotan sintaks tidak akan berubah. g: colors_name
Ketika skema warna dimuat (variabel "g: colors_name" diatur) pengaturan 'latar belakang' akan menyebabkan skema warna dimuat ulang. Jika skema warna menyesuaikan dengan nilai 'latar belakang' ini akan berhasil. Namun, jika skema warna menetapkan 'latar belakang' itu sendiri efeknya mungkin dibatalkan.

Jadi apa yang sebenarnya terjadi ketika 'background'opsi diubah adalah ini:

Jika tidak ada skema warna saat ini dimuat

Vim memuat ulang warna default, menggunakan warna foreground yang dianggap sesuai untuk pengaturan baru 'background'

Jika skema warna saat ini dimuat

Vim memuat ulang skema warna. Saat skema warna dimuat, skema warna akan menetapkan warna yang sesuai dengan pengaturan baru 'background', atau skema warna akan diatur ulang 'background' ke nilai lama.

Seperti yang telah Anda jelaskan, 'background'opsi ini tidak dimaksudkan untuk mengatur latar belakang, tetapi untuk memberi tahu Vim apakah latar belakangnya gelap atau terang.

Jadi jika skema warna ulang 'background', Vim menganggap ini berarti skema warna tidak mendukung pengaturan baru 'background'. Karena pengguna telah mengindikasikan mereka menggunakan latar belakang seperti ini, ini berarti bahwa skema warna saat ini tidak lagi sesuai, dan karenanya Vim tidak disetel g:colors_namedan kemudian memuat ulang warna default.

Jika Anda ingin menjelajahi kode aktual yang dijalankan saat 'background'diatur, Anda bisa mulai di sini .

Apa yang terjadi di instalasi Anda

Perilaku aneh yang Anda uraikan (dalam versi pertama dari pertanyaan Anda) dapat dijelaskan oleh baris ini dalam dokumentasi yang dikutip di atas:

Saat skema warna dimuat (variabel "g: colors_name" disetel)

Masalahnya adalah bahwa colors/darcula.vimfile Anda tidak menetapkan nilai ini, dan meskipun warna berubah ketika Anda dipanggil :color darcula, Vim tidak menganggap skema warna untuk saat ini dimuat.

Karenanya, saat Anda menelepon :set background=darkVim, lakukan langkah di bagian "Jika tidak ada skema warna yang dimuat" di atas, dan tetapkan warna default untuk latar belakang gelap. Ini menjelaskan mengapa :colorkemudian dilaporkan default.

(Namun, perhatikan bahwa pengaturan warna default tidak , seperti yang Anda harapkan, menghapus semua warna yang telah ditetapkan sebelumnya, dan inilah sebabnya Anda berakhir dengan hasil yang Anda lihat, bukan warna yang ditampilkan saat Anda mulai Vim di tempat pertama. Ada beberapa diskusi tentang masalah ini di sini )

Singkatnya, skema warna Anda salah konfigurasi: Lihat :edit $VIMRUNTIME/colors/README.txt(khususnya bagian di bagian bawah) untuk detail lebih lanjut tentang ini, dan tentang interaksi antara 'background'dan skema warna.

Kaya
sumber
Terima kasih banyak! Saya merasa benar-benar mengerti ketika Anda mengatakannya "tidak, seperti yang Anda harapkan, menghapus semua warna yang sebelumnya telah ditetapkan". Saya pasti akan pergi membaca diskusi!
Michael Ma
4

Doc di :h 'background' harus memberikan semua informasi yang Anda butuhkan:

Ketika diatur ke "gelap", Vim akan mencoba menggunakan warna yang terlihat bagus di latar belakang yang gelap. Ketika diatur ke "cahaya", Vim akan mencoba menggunakan warna yang terlihat bagus pada latar belakang cahaya. Nilai lain apa pun adalah ilegal.

Skema warna Anda menentukan 2 kelompok warna: yang digunakan pada latar belakang terang dan yang digunakan pada latar belakang gelap. The backgroundpilihan akan memberitahu vim yang kelompok warna yang didefinisikan oleh colorscheme Anda harus digunakan.

Pengaturan opsi ini tidak mengubah warna latar belakang, ini memberi tahu Vim seperti apa warna latar belakangnya. Untuk mengubah warna latar belakang, lihat :h :hi-normal.

Ketika 'latar belakang' diatur, Vim akan menyesuaikan grup warna default untuk nilai baru. Namun warna yang digunakan untuk penyorotan sintaks tidak akan berubah.

Itulah tindak lanjut dari paragraf sebelumnya: Ini adalah skema warna yang mendefinisikan kelompok warna dan backgroundmemilih salah satu dari kelompok ini.

Akhirnya jika Anda ingin menulis skema warna Anda sendiri tanpa harus memasukkan set background=darkvimrc Anda, ingatlah bahwa colorscheme tidak lebih dari sebuah program dalam vimscript, jadi tidak ada yang menghentikan Anda dari menggunakan perintah secara langsung dalam kode colorcheme Anda seperti misalnya jellybeans atau magang

statox
sumber
1
Terima kasih! Aku meletakkan set background=darkdi darcula.vimdan menghasilkan efek yang sama seperti ketika saya memasukkannya ke dalam .vimrc. Tapi saya masih penasaran, bagaimana tepatnya Vim "mencoba menggunakan warna yang terlihat bagus di latar belakang yang gelap"? Apakah ada pemetaan atau sesuatu seperti itu yang didefinisikan di suatu tempat?
Michael Ma