Saya membaca tentang cara memperbarui status vim di sini . Dan saya berhasil memperbaruinya.
Tapi, saya ingin mempertahankan format status vim default dan hanya menambahkan beberapa info lagi misalnya ukuran file, tipe file, dll.
Garis status default Vim adalah:
<file-name> line_num,col_num %file
Bagaimana saya bisa melakukan yang berikut?
- Saya ingin menambahkan info setelah nama file
- Tampilkan format statusline saat ini (
:set statusline
tidak menampilkan apa-apa)
Saya mencoba:
set statusline+=%y
Tapi ini menimpa seluruh statusline dan hanya menampilkan tipe file ( %y
).
Ada petunjuk?
Jawaban:
Seperti yang dikatakan @muru, sepertinya tidak mungkin untuk secara tepat mensimulasikan garis status default ketika
statusline
ditetapkan sebagai kode untuk rendering melakukan hal-hal yang tidak dapat ditentukan dalamstatusline
pengaturan. Mungkin saja untuk menjadi cukup dekat. Berikut ini adalah perkiraan yang wajar tentang cara garis status default terlihat ketikaruler
diaktifkan:Perbedaan utama adalah posisi nomor baris dan kolom. Jika mungkin untuk mensimulasikan logika penspasian default, saya belum dapat menemukan cara untuk melakukannya. Mungkin ini akan cukup dekat untuk keperluan Anda.
Saya menggunakan versi split ini di saya sendiri
.vimrc
untuk menempatkan info baris status Syntastic di tengah apa yang tampak seperti baris status vim normal dengan penggaris:sumber
Kode tidak menetapkan nilai apa pun ke string status kosong, tetapi hanya bertindak menggunakan beberapa default. Lihat
src/screen.c
, berfungsiwin_redr_status()
. Item yang ditampilkan berdasarkan pada fitur yang dikompilasi, oleh karena itu untuk merekonstruksi statusline yang tepat seseorang perlu melihat fitur yang dikompilasi. Mungkin lebih mudah untuk menggunakan contoh statusline yang diberikan dalam:h statusline
:sumber
%-14.(%l,%c%V%)
?tl; dr
Meskipun solusi yang saya sarankan tidak jauh berbeda dari jawaban yang lain, saya ingin membagikan penjelasan yang lebih rinci.
perilaku asli
Pertama, mari kita cari tahu cara
vim
menggambar garis status. Fungsi yang bertanggung jawab adalahwin_redr_status()
danwin_redr_ruler()
.vim
mengambil buffer nama , menambahkan ruang jika ada bendera untuk mengikuti (seperti[Help]
,[Preview]
,[+]
,[RO]
). Kemudian ia menambahkan dengan bendera .Biasanya itu mengalokasikan 18 sel karakter untuk penguasa. Jika bagian nama buffer tidak sesuai dengan sisa ruang yang tersedia,
vim
potong dari kiri dan tambahkan<
di awal.Jika ada ruang untuk keymap , itu menambahkannya di akhir (rata kanan).
Sekarang, penguasa. Ini terdiri dari
<row>,<col>-<virtcol>
bagian dan posisi relatif (rata kanan).Ada juga batasan bahwa bagian dengan nama penyangga harus mengambil setidaknya setengah dari lebar .
larutan
Sekarang mari kita ambil nilai yang disarankan oleh dokumen :
dimana
Jadi, pertama
%<
dapat dihilangkan, karena secara default nama buffer terpotong di awal. Kemudian, tidak ada bendera pratinjau (%w
). Juga, ketika18 * 2
lebar jendela kurang dari karakter, bagian kanan mengambil lebih dari setengah dari baris status.Jadi, setidaknya kita dapat menghilangkan
%<
dan menambahkan%w
:Kita dapat melangkah lebih jauh dan memastikan bagian yang tepat tidak mengambil lebih dari setengah dari baris status:
Kemudian kita dapat membuatnya tergantung pada fitur
vim
yang dikompilasi .Tetapi saya mengatakan bahwa itu tidak praktis, dan solusi sebelumnya akan cukup untuk sebagian besar maksud dan tujuan. Namun, jika solusi terakhir tidak berhasil untuk Anda, katakan padaku apa yang salah, dan saya akan mencoba untuk membuat yang lebih baik.
Masalah dengan solusi yang disarankan oleh Laurence Gonsalves adalah bahwa jika tidak ada bendera, ada dua ruang antara bagian kiri dan kanan:
sumber