Bagaimana saya bisa mengatur lebar jendela gvim ke 80 kolom teks, ditambah yang diperlukan untuk menampilkan nomor baris

9

Saya menggunakan gvim dengan

set number

di saya .vimrcjadi itu menunjukkan linenumber, plus spasi, sebelum setiap baris.

Jika dokumen memiliki kurang dari 10 baris, ini membutuhkan 2 kolom, Jika memiliki lebih dari 10, 3 kolom, dan seterusnya.

Jika saya taruh

set lines=40 columns=80

di .gvimrc, itu akan menampilkan 78 kolom kode dan 2 untuk linenumber plus langkah, atau 77 + 3 dan seterusnya.

Saya ingin lebar jendela diatur ke 80 kolom + berapapun jumlah kolom yang diperlukan untuk menunjukkan linenumber.

Tidak harus dinamis, tetapi saya ingin dapat membaca jumlah baris dari file yang diberikan dan mengatur columnssesuai. (Tentu saja, solusi dinamis akan sangat rapi, tetapi tidak penting)

Elton Carvalho
sumber

Jawaban:

9

Coba ini di ~ / .vimrc Anda:

au BufRead * let &numberwidth = float2nr(log10(line("$"))) + 2
          \| let &columns = &numberwidth + 80

Setiap kali Anda memuat buffer (yaitu, buka file), yang akan menentukan jumlah kolom yang diperlukan untuk menampilkan nomor baris terbesar, setel opsi 'numberwidth', dan setel 'kolom' ke angka itu plus 80 untuk teks Anda .

garyjohn
sumber
Terima kasih! Ini berfungsi dengan baik ketika membuka file. Adakah cara untuk mewujudkannya saat mengganti tab juga? Terima kasih sebelumnya.
Elton Carvalho
1
Acara autocommand Vim terdaftar di :help autocommand-events. Di antara mereka adalah TabEnter, jadi Anda bisa mencoba mengganti BufReaddengan BufRead,TabEnterdalam contoh di atas dan melihat apakah itu memberi Anda perilaku yang Anda inginkan. Saya belum menguji contoh dengan acara itu sendiri.
garyjohn
Terima kasih @garyjohn, TabEnter bekerja seperti yang diharapkan. Mungkin nanti saya akan bermain dengan acara autocommand itu. Mereka sangat berguna!
Elton Carvalho
1
@david_nash: 'numberwidth'hanya tumbuh secara logaritmik dengan jumlah baris dalam file, jadi jika Anda dapat membeli ruang horizontal yang telah 'number'diaktifkan sama sekali, saya tidak akan berpikir Anda harus khawatir tentang membatasi itu.
garyjohn
1
@ JonathanHartley: Akan cukup mudah untuk mengontrol ini dengan operator ternary ( :help expr1) atau dengan if / endif (eg, :help options-in-terminal). Masalahnya berubah & kolom saat 'number'diubah. Saya berpikir untuk menggunakan event autocommand OptionSet, tetapi :help OptionSetmengatakan itu ide yang buruk untuk mengatur ulang opsi saat memproses acara ini.
garyjohn
2

saya menggunakan

set lines=24 columns=84

di $ HOME / .gvimrc saya yang memberi saya apa yang Anda inginkan. Saya jarang (jika pernah) memiliki file yang lebih panjang dari 999 baris sehingga berfungsi untuk saya.

Sardathrion - menentang penyalahgunaan SE
sumber
Itulah yang saya lakukan, tetapi menjaga dengan tepat 80 kolom teks bagus karena saya dapat mencegah berakhirnya 81 karakter dalam satu baris, yang bukan masalah besar, tetapi menyenangkan untuk dihindari.
Elton Carvalho
2

Saya mengatur numberwidth menjadi, katakanlah, 5 dan kemudian mengatur kolom ke 85 (80 + 5) Itu harus baik untuk file dari 0 baris ke satu juta baris.

Inilah yang mungkin harus Anda masukkan ke dalam (default) ~ / .vimrc file

set numberwidth=5  "Good for files upto a million lines
set columns=85
set nu

Anda akan melihat nomor baris diformat dengan '% 5d' (5 adalah angka lebar di atas) alih-alih format '% d' default, membuang sedikit real-estate sebelum nomor baris, tetapi mempertahankan konsistensi.

isound
sumber
Selamat datang di Pengguna Super. Perlu diketahui Anda telah mengirim jawaban untuk pertanyaan yang sudah sangat lama. Meskipun tidak ada yang salah dengan melakukannya, namun waspadalah agar Anda tidak mendapat respons.
CharlieRB