Bungkus lembut di 80 karakter dalam Vim di jendela lebar sewenang-wenang

126

Saya ingin menggunakan kemampuan soft wrap Vim ( :set wrap) untuk membungkus beberapa kode pada 80 karakter, terlepas dari lebar jendela saya yang sebenarnya.

Saya belum dapat menemukan cara untuk melakukan ini - semua pembungkus lembut tampaknya terikat dengan lebar jendela

  • textwidthdan wrapmarginkeduanya untuk pembungkus yang sulit (mereka memasukkan karakter baris baru ke dalam file)
  • membelah vertikal menjadi beberapa jendela dan menggunakan :vertical resize 80(mungkin dengan :set breakat=memungkinkan jeda pada setiap karakter) pada salah satu dari mereka semacam karya (meskipun itu sedikit meretas), tetapi jeda ketika menggunakan :set numberkarena nomor baris mengambil jumlah variabel kolom (tergantung pada panjang file) dan ini adalah bagian dari 80.

Apakah ada cara untuk melakukan ini di vim? Itu tidak terlihat menjanjikan, menurut sumber lain .

Saat ini perkiraan saya hanya untuk memiliki /^.\{80}\zs.\+sebagai pencarian default saya jadi setidaknya disorot. Saya berpikir untuk menambahkan :syntaxitem untuk itu, tetapi itu pecah ketika tumpang tindih item sintaks lainnya, jadi saya membatalkan ide itu.

rampion
sumber
Sebenarnya, bagaimana Anda mengatur pencarian default?
Anggota dewan

Jawaban:

37

Anda bisa

  • atur lebar minimum besar untuk kolom nomor baris melalui :set numberwidth=6dan
  • maka Anda dapat mengubah ukuran jendela Anda dengan :set columns=86(atau dengan mouse) ke ukuran yang tepat.

Jika Anda mengedit file dengan sejuta baris di dalamnya, Anda mungkin mengalami masalah, tetapi itu tidak mungkin. Anda menyia-nyiakan 6 kolom layar real estat dengan cara ini juga. Jadi masih ada semua jenis masalah.

Anda dapat menyorot melewati kolom ke-80 menggunakan :matchseperti yang dikatakan di sini dan di sini .

Di luar itu saya tidak bisa melihat cara untuk melakukan ini. Sepertinya itu akan menjadi fitur yang bagus.

Brian Carper
sumber
Sayangnya vim tidak mempertahankan pengaturan kolom jika ukuran jendela diubah. Ini mengarah ke situasi yang tidak menguntungkan dengan manajer jendela ubin di mana tidak ada cara yang baik untuk soft wrap hingga 80 kolom jika jendela terlalu lebar.
gravitasi
Ini bekerja, tetapi tidak lengket. Saya kira langkah selanjutnya adalah mengatur autocmd untuk menjaga kolom pada ukuran yang baru diinginkan untuk tipe file yang Anda inginkan.
xer0x
1
Ini adalah jawaban yang tepat karena itu menegaskan Anda tidak bisa melakukannya. Dan saya yakin saya bukan satu-satunya yang tidak ingin mengubah ukuran jendela terminal saya hanya untuk ini. Saya ingin lebih banyak lebar untuk penggunaan non-vim.
Sridhar Sarnobat
20

Coba ini:

set columns=80
autocmd VimResized * if (&columns > 80) | set columns=80 | endif
set wrap
set linebreak
set showbreak=+++

Anda dapat menghapus if (&columns > 80) |jika Anda selalu menginginkan 80 kolom.

eborisch
sumber
Di terminal iTerm saya, ini membuat jendela lebih kecil. Saya tidak yakin apakah itu masalah dengan lingkungan saya (saya melihat Anda melakukan sesuatu dengan mengubah ukuran otomatis), tetapi jika tidak, ini tidak diinginkan. Terima kasih atas sarannya.
Sridhar Sarnobat
Autocmd bekerja dengan baik untuk saya (menggunakan terminal guake).
mzcarlos
Bekerja seperti pesona dengan Tmux + NeoVim di Alacritty.
meh
16

Saya tidak punya solusi untuk soft wrap, tetapi untuk menandai kolom, pada Vim 7.3 (dirilis 2010-08-15) :set colorcolumn=80akan menyoroti kolom 80. Warnanya akan tergantung pada file sintaks Anda.

Lihat Vim 80 kolom tata letak kekhawatiran , :h colorcolumn.

ftvs
sumber
Kutipan bukan URL yang valid sehingga masuk akal. Nama anchor tidak boleh mengandung karakter URL yang tidak valid, SO seharusnya tidak memperbaiki kesalahan pengembang situs lain.
Shadow Wizard adalah Ear For You
1
Shadow Wizard merujuk pada revisi sebelumnya atas jawaban saya di mana saya bertanya-tanya tentang bagaimana cara menempatkan tanda kutip tunggal dalam URL menggunakan Markdown. Kemudian saya menyarankan menggunakan% 27, yang berfungsi. Terima kasih, ib.
ftvs
Baru-baru ini ditemukan cara menyorot kolom yang melewati 80 ~:let w:eighty_column_match = matchadd('ColorColumn', '\%81v.\+', 100)
rampion
The colorwidthhal yang membantu untuk alasan lain, jadi aku senang Anda diposting ini.
Sridhar Sarnobat
2

Sudahkah Anda mencoba 'linebreak'?

        *'linebreak'* *'lbr'* *'nolinebreak'* *'nolbr'*
  'linebreak' 'lbr' boolean (default off)
        local to window
        {not in Vi}
        {not available when compiled without the  |+linebreak|
        feature}
If on Vim will wrap long lines at a character in 'breakat' rather
than at the last character that fits on the screen.  Unlike
'wrapmargin' and 'textwidth', this does not insert <EOL>s in the file,
it only affects the way the file is displayed, not its contents.  The
value of 'showbreak' is used to put in front of wrapped lines.
This option is not used when the 'wrap' option is off or 'list' is on.
Note that <Tab> characters after an <EOL> are mostly not displayed
with the right amount of white space.
TK.
sumber
3
Hmm ... tapi breakathanya pola (tidak panjang), jadi saya tidak melihat bagaimana saya bisa menggunakan ini untuk memaksa soft wrap di 80 ....
rampion
Hmmm, saya bertanya-tanya apakah mungkin untuk membuat regex yang akan cocok dengan kata-kata yang total panjangnya (ditambah spasi putih di antaranya) kurang dari atau sama dengan n karakter.
Shane Creighton-Young
@ ShaneCreighton-Young: ^.{,80}\bakan dilakukan untuk orang yang menggunakan tab lunak / perluas. Perhatikan bahwa perl regex, bukan vim regex.
Mark K Cowan
0

Tidak ada cara yang baik untuk melakukannya. Kita bisa hack darurat setlocal softwrapdengan autocmdjika kita mengganti jawaban @eborisch. Jika kita mengubah ukuran setiap kali kita memasukkan buffer, dan kita mengubah ukuran hingga panjang tertentu ketika variabel lokal softwrapdiatur, kita mendapatkan perilaku yang diinginkan.

Misalkan kita ingin soft wrap menjadi 80 kolom, kita bisa menulis yang berikut ini .vimrc.

augroup softwrap
    autocmd VimResized * if (exists('b:softwrap') && &columns > 80) | set columns=80 | endif
    autocmd BufEnter * set columns=999
augroup END

Untuk mengaktifkan mode buffer tertentu, gunakan perintah berikut:

let b:softwrap=1
set columns=80
durum
sumber
Ini hanya mengubah file saya menjadi omong kosong.
Suuuehgi