Bisakah pemisah split dalam vim kurang dari satu kolom penuh lebar?

21

Saya menggunakan tiling window manager (luar biasa) + terminal multiplexer (tmux) + membelah bagian dalam vim. Saya tidak memiliki dekorasi jendela sama sekali, sehingga Anda tidak ada pemisahan visual di antara mereka sama sekali jika konten program tidak memberikannya. Saya cukup nyaman dengan paradigma ini karena saya menggunakan banyak monitor dan tugas kelompok berdasarkan layar. Jika dua jendela tidak memiliki alasan untuk berdampingan, mereka tidak akan ada di sana.

Namun ini menciptakan sedikit disonansi visual di mana pemisahan yang paling jelas secara visual adalah yang paling tidak signifikan secara semantik.

  • Xorg window ‹|› window = nothing at all
  • Panel Tmux ‹|› panel = 1px garis pembagi
  • Vim split ‹|› split = 1 karakter kolom berwarna lebar

Berikut adalah contoh yang menunjukkan satu setiap jendela berdampingan, panel dan pemisahan vim:

jendela panel dan pecah

Bahkan tanpa mengklik ke versi resolusi penuh, garis pembagi putih yang Anda lihat adalah perpecahan paling signifikan di layar, panel vim. (Perhatikan kolom abu-abu di sebelah kanan sesi vim sebenarnya merupakan highlight kolom ke-80, bukan pembagi apa pun meskipun saya sering bekerja pada ukuran itu.)

Saya menyadari bagaimana mengubah karakter yang diambil di split atau mengurangi kontras skema warna. Apa yang ingin saya lakukan adalah menggunakan split bar yang sama dengan tmux yang tidak mengambil lebar karena digambar di antara kolom daripada di satu. Apakah ini mungkin dengan vim berbasis terminal? Gvim? Neovim? Baring membuat pemisah yang tidak mencolok secara visual, dapatkah kolom pembagi dimatikan seluruhnya?

PS Alasan menggunakan pemisah yang serupa secara visual masuk akal adalah karena saya menggunakan binding kunci yang sama untuk menavigasi antara panel tmux dan vim splits. Tombol yang sama menavigasi dengan mulus di antara mereka, itu hanya akan masuk akal jika batas visualnya sama.

Caleb
sumber

Jawaban:

32

Anda salah tentang tmux. Seperti setiap program berbasis terminal - termasuk Vim - hanya menarik hal-hal di dalam sel. Ini berarti bahwa Vim dan tmux keduanya menggunakan metode yang sama untuk menggambar batas vertikal: mereka hanya menggunakan karakter seperti pipa.

Tmux menggunakan ( U+2502) secara default sedangkan Vim menggunakan |( U+007C).

Jika Anda menginginkan pemisah yang sama di Vim, Anda cukup menggunakan karakter yang sama:

set fillchars+=vert:│

Perhatikan bahwa skema warna Anda mungkin menetapkan warna latar belakang perpecahan vertikal. Jika itu masalahnya, Anda dapat menghapus warna latar belakang secara langsung di skema warna Anda:

hi VertSplit ctermbg=NONE guibg=NONE
romainl
sumber
Saya mengalahkan Anda untuk kesimpulan ini sekitar satu menit, tapi terima kasih. Saya tidak yakin mengapa saya berasumsi sebaliknya. Saya kira saya berada di bawah kesan bahwa itu melakukan semacam karakter Unicode menggabungkan sihir untuk menutupi pemisah di tepi ruang karakter, tapi sekarang saya menyadari bahwa saya memikirkannya secara sadar betapa konyolnya itu.
Caleb
1
Ternyata yang saya butuhkan dalam kasus saya adalah hi VertSplit cterm=NONEkarena itu reversesebagai default.
Lloeki
Bagaimana pun Anda tahu cara mengubah pemisah tmux dari '│' menjadi, katakanlah, '/'? @romainl
klaus
@ EnanAjmain IIRC Saya menemukan pemisah tmux dalam kode sumbernya. Saya tidak berpikir ada pilihan untuk itu tetapi saya jauh dari ahli tmux jadi Anda harus memeriksa manual.
romainl
@romainl, saya pikir Anda benar. Apapun yang saya dapat ubah dari tmux, saya harus meretas kode sumbernya.
klaus
5

Bahkan di screen-shot saya sendiri, tmux tidak menggunakan sihir apa pun, pemisahan masih berupa kolom lebar karakter tunggal. Efek visual yang kurang mencolok adalah penggunaan karakter menggambar kotak Unicode yang kurang kikuk daripada standar ASCII vim, dan kurangnya warna latar belakang yang disorot.

Efek yang hampir sama sangat mungkin di vim dengan menambahkan sesuatu seperti baris berikut ke file rc:

" Set split separator to Unicode box drawing character
set encoding=utf8
set fillchars=vert:│

" Override color scheme to make split the same color as tmux's default
autocmd ColorScheme * highlight VertSplit cterm=NONE ctermfg=Green ctermbg=NONE

Penggunaan autocmdjaminan bahwa highlight over-ride tetap berlaku jika Anda mengganti skema warna. Anda mungkin atau mungkin tidak menginginkan perilaku ini karena beberapa skema warna memiliki nilai yang masuk akal untuk grup warna ini.

Perhatikan juga bahwa cterm=NONEperlu untuk menumpang beberapa skema warna yang mengatur nilai ini reverse, ergo mengutak-atik nilai fg / bg apa pun yang Anda coba gunakan.

Caleb
sumber
4

Tidak, ini tidak dapat dilakukan di Vim, dan mungkin akan sangat sulit untuk diterapkan di GVIM.

Vim menempel pada pengalamatan berbasis sel yang digunakan di terminal; dalam buffer, ini sangat penting untuk navigasi vertikal yang konsisten dengan j/ k. Mengatasi koordinat x dan y berbasis sel ini sudah mendarah daging dalam implementasi Vim, saya kira ini sangat sulit untuk diatasi.

Perhatikan juga :help design-not:

  • Vim bukan editor GUI mewah yang mencoba terlihat bagus dengan biaya yang kurang konsisten di semua platform.
Ingo Karkat
sumber