Warna forKround forKround khusus dengan set kursor

9

Dalam T&J ini , diamati bahwa ada grup sorotan untuk CursorLineNr, yang berlaku untuk nomor baris untuk baris kursor saat set cursorlineaktif.

Saya perhatikan bahwa menggunakan cursorline juga mengubah warna untuk grup sorotan lain SpecialKey, yang berlaku jika Anda miliki, misalnya:

 set list listchars=tab:\|_,trail:-

Masalah dengan ini bagi saya adalah saya menggunakan latar belakang yang gelap (dan cursorline yang gelap). SpecialKeyPengaturan normal saya juga sangat gelap, sehingga listcharsimbol hanya sedikit terlihat. Tetapi menggunakan cursorline mereka putih , yang membuat trailarang tidak bisa dibedakan dari benar-benar memukul -. Karakter jejak digunakan setiap kali Anda mengetik spasi di akhir baris, jadi ini lebih dari masalah kecil; biasanya mengetik garis dari awal hingga akhir melibatkan sejumlah ruang yang harus dengan mudah dibedakan dari kesalahan ketik dasbor saat bekerja (atau sebaliknya, kesalahan ketik spasi saat Anda bermaksud tanda hubung).

Karena tidak ada kelompok sorotan lain yang tampaknya terpengaruh, sesuatu seperti CursorLineNrmungkin sedang diterapkan, tetapi melihat melalui hidaftar saya tidak melihat sesuatu yang sesuai.

Adakah yang tahu apa ini? Lebih baik lagi, apakah ada yang tahu cara untuk memodifikasi grup highlight untuk cursorline?

goldilocks
sumber
2
Saya hanya menyorot garis kursor sebentar setelah saya melompat 2 atau lebih baris. Saat saya mengedit teks, cursorline tidak aktif. Jika Anda bisa terbiasa dengan perilaku itu, itu bisa mengurangi masalah Anda.
joeytwiddle

Jawaban:

8

Saya sudah berjuang dengan perilaku itu untuk waktu yang lama .

Pada dasarnya, warna latar depan SpecialKeypada garis saat ini diubah ke warna latar depan Normaljika:

  • yang cursorlinepilihan ini diaktifkan,
  • yang CursorLinekelompok sorot memiliki satu set warna latar belakang.

Saya tidak pernah bisa memperbaiki perilaku itu, tidak peduli apa yang saya coba. Masalahnya terletak di suatu tempat di kode sumber Vim.

romainl
sumber
1
Itu bukan jawaban yang saya inginkan! Saya telah mengubah jejak char saya ~yang sedikit kurang membingungkan (mungkin juga mencari beberapa unicode char yang tidak jelas untuk digunakan).
goldilocks
Saya melihat perilaku ini bahkan tanpa warna latar belakang untuk grup CursorLine. Saya mencoba untuk menonaktifkannya (yaitu none), mencoba untuk meninggalkan nilai default (digarisbawahi), spasi masih mengubah warna latar depan mereka
user907860
2

Apa yang berhasil untuk saya adalah baris berikut dalam saya .vimrc(berdasarkan jawaban Igor Mikushkin ).

autocmd BufNewFile,BufRead * call matchadd('SpecialKey', '\s\+')
autocmd BufNewFile,BufRead * call matchadd('NonText', '\n\+')

VimEnterhanya berfungsi untuk file pertama yang Anda buka, bukan untuk file / tab yang Anda buka sesudahnya. BufNewFile,BufReadsejauh ini telah bekerja untuk semua buffer yang saya buka.

Baris pertama mencakup karakter spasi putih. Vim menyoroti mereka dalam SpecialKeygrup, jadi kami menerapkan gaya itu kepada mereka.

Baris kedua mencakup baris baru. Vim menyoroti mereka dalam NonTextgrup, jadi kami menerapkan gaya itu kepada mereka. Anda hanya benar-benar membutuhkan baris kedua jika NonTextkarakter Anda disorot berbeda dari SpecialKeykarakter.

Nizar Khalife Iglesias
sumber
Ini seharusnya jawabannya.
hozza
1

Baris berikut di .vimrc memperbaiki masalah untuk saya.

au VimEnter * call matchadd('SpecialKey', '^\s\+', -1)
au VimEnter * call matchadd('SpecialKey', '\s\+$', -1)

Ini mengesampingkan aplikasi gaya lain untuk tab dan spasi tambahan di dalam garis kursor.

Igor Mikushkin
sumber
mengapa Anda menyimpan matchadd()hasilnya dalam variabel, jika Anda tidak menggunakannya?
Christian Brabandt
@ChristianBrabandt Terima kasih, sudah diperbaiki sekarang.
Igor Mikushkin
Ini bekerja untuk saya juga menggunakan NeoVim.
hakunin
0

Masih ada "solusi" lain, sebenarnya semacam kludge untuk masalah ini.

Saya memiliki grup sintaks khusus untuk "listchars".

Seperti ini:

hi WhiteSpaceChar ctermfg=251 guifg=#999999
call matchadd("WhiteSpaceChar", "[ \t]")

Anda dapat melakukan sesuatu seperti ini (meskipun saya tidak mengujinya):

hi TrailChar ctermfg=251 guifg=#999999
" the \v in the regex is Vim's flag to use Perl-like regex syntax
call matchadd("TrailChar", "\v +$")

Tetapi setidaknya ada dua masalah dengan pendekatan ini:

  1. ketika Anda membagi jendela, atau membuat tab baru dll. sorot menjadi rusak di jendela saat ini, seperti ini:

sorot ruang putih menjadi rusak, ketika jendela baru terbuka

Untuk memperbaikinya saya memiliki fungsi-fungsi khusus seperti:

fun! ResetHiglightJS()
  set syntax=javascript
  "these are for the IndentLine plugin
  "IndentLinesDisable
  "IndentLinesEnable
endfun

untuk setiap grup sintaks, yang sering saya gunakan, untuk memperbaiki sorotan secara manual. Anda dapat melakukan ini dengan cara lain seperti perintah otomatis atau secara manual mengatur nilai untuk opsi sintaks. Untuk membuat sintaks ulang bekerja, Anda juga harus memiliki ini:

call matchadd("WhiteSpaceChar", "[ \t]")

di setiap file sintaks yang sesuai, seperti ~/.vim/after/syntax/javascript.vim

  1. Pendekatan ini tidak bekerja secara normal dengan setidaknya satu plugin - yang IndentLine, jadi saya terpaksa tetap menggunakan versi yang lama dengan mengatur secara manual let g:indentLine_newVersion = 0, di mana plugin bekerja secara normal.

Tetapi dengan cara lain pendekatan ini bekerja secara normal tanpa plugin IndentLine:

spasi putih memiliki warna yang diinginkan di garis kursor

Dan dapat diterima dengan itu:

warna indentLine di baris kursor

pengguna907860
sumber