Saya ingin memiliki tampilan yang bagus dan manis dari ruang putih di terminal vim saya. Ini memungkinkan saya untuk menghapusnya sebelum menutup file.
Saya sadar bahwa pertanyaan ini cukup populer dan saya sudah menemukan lusinan jawaban di SO. Sayangnya saya belum menemukan yang memuaskan ...
Jadi saya akan mencoba merangkum informasi yang dikumpulkan dan solusi yang saya temukan.
Solusi 1: Sorot ruang trailing secara manual
highlight ExtraWhitespace ctermbg=red guibg=red
match ExtraWhitespace /\s\+$/
autocmd BufWinEnter * match ExtraWhitespace /\s\+$/
autocmd InsertEnter * match ExtraWhitespace /\s\+\%#\@<!$/
autocmd InsertLeave * match ExtraWhitespace /\s\+$/
autocmd BufWinLeave * call clearmatches()
Pro:
- Mudah digunakan
- Cepat
- Cocok dengan
cursorline
Cons:
- Warna yang dipilih tidak kompatibel dengan skema warna lain karena warna diatur secara manual
red
- Blok latar belakang merah besar tidak terlalu estetika
Solusi 2: Menggunakan fitur daftar
set list
set listchars+=trail:◦
Pro:
- Mudah digunakan
- Cepat
Cons:
- Masalah jika
:set cursorline
diaktifkan - Warna khusus untuk
list/trail
tidak dapat dikonfigurasi. Harus sama dengan listchars lainnya
Solusi 3: Menggunakan fitur penyembunyian
syn match WhiteSpace "\s\+$" containedin=ALL conceal cchar=◦
set conceallevel=2
set concealcursor=nv
highlight Conceal ctermfg=red
Pro:
- Lebih cantik dari solusi pertama
Cons:
- Latar belakang tidak sama dengan latar belakang kursor
- Dapat mengganggu aturan penyembunyian lainnya
- Warna yang dipilih tidak selalu kompatibel dengan skema warna
- Tidak kompatibel dengan Vim versi lama
Pertanyaan saya
Salah satu solusi yang disebutkan adalah yang paling cocok dalam hal kinerja dan kompatibilitas dan bagaimana saya bisa mendapatkan semua pro dan tidak ada yang kontra?
Dengan kata lain, saya ingin mencari solusi di mana:
- Warna garis belakang sorot sesuai dengan skema warna yang dipilih
- Warna ini terlihat jelas tetapi tidak terlalu agresif untuk mata
- Kompatibel dengan
cursorline
(latar belakang dan latar depan) `- Kompatibel dengan plugin lain yang mungkin menggunakan menyembunyikan
- Trailing char dapat disetel ke char Unicode apa saja
:hi link ExtraWhitespace CursorLine
,. Lihat:help hi-link
.Jawaban:
Dalam hal kinerja, tidak satupun dari ini harus membuat perbedaan. Vim sebagian besar terhambat oleh pola sintaksis yang kompleks; polanya di sini cukup sederhana.
Untuk membuat warna sorotan sesuai dengan skema warna yang dipilih, gunakan
:hi link
untuk grup yang ada; biasanya begituError
. Tentu saja, semua ini hanya penting jika Anda sering mengganti tema warna; selain itu, menggunakan warna yang sesuai secara langsung (seperti dalam solusi Anda 1) juga akan baik-baik saja.Saya akan memilih ini, tetapi menggunakan
matchadd()
sebagai ganti:match
; ini meninggalkan yang terakhir untuk penyorotan khusus. Juga,clearmatches()
terlalu kasar; itu menghapus semua kecocokan, dan karenanya dapat memengaruhi plugin. Anda dapat menggunakan / melihat plugin ShowTrailingWhitespace saya untuk implementasi yang bersih dan kuat (yang juga termasuk pengecualian untuk tipe file tertentu). Ya, ini solusi yang jauh lebih besar, tetapi saya belum melihat adanya dampak apa pun.Ini adalah fitur yang berguna dalam dirinya sendiri, dan mempertahankannya secara permanen memiliki efek pada posisi kursor pada karakter Tab, jadi saya tidak akan merekomendasikan itu.
Itu pasti akan mengganggu beberapa sintaks dan plugin menggunakan fitur ini. Ide buruk.
sumber
'listchars'
. Bagi saya, penyorotan lebih dari cukup (terutama dengan warna agresif).