Cara menghentikan line breaking in vim

257

Saya suka bahwa garis panjang ditampilkan lebih dari satu garis terminal; Saya tidak suka vim memasukkan baris baru ke teks saya yang sebenarnya. Bagian mana dari .vimrc yang harus saya ubah?

Haiyuan Zhang
sumber
7
Untuk kejelasan: Anda suka bahwa garis panjang ditampilkan lebih dari satu garis terminal; Anda tidak suka vim memasukkan baris baru ke teks Anda yang sebenarnya? Jika demikian, maka :set nowrapkebalikan dari yang Anda inginkan :(.
Andrew Aylett
@Andrew: ya ringkasan Anda persis seperti yang saya inginkan
Haiyuan Zhang

Jawaban:

304

Menggunakan

:set wrap

Untuk membungkus garis secara visual, yaitu baris masih satu baris teks, tetapi Vim menampilkannya pada beberapa baris.

Menggunakan

:set nowrap

Untuk menampilkan garis panjang sebagai hanya satu garis (yaitu Anda harus menggulir secara horizontal untuk melihat seluruh garis).

Brian Rasmussen
sumber
3
Terima kasih untuk tipsnya kalian. Saya pergi dengan: atur nowrap dan: atur textwidth = 0 berfungsi dengan baik
Robert Beltran
5
Ketika saya mengetik, saya masih ingin melihat "visual" batas 80 kolom dan saya tidak ingin vim untuk menambahkan feed baris secara otomatis ketika saya mengetik setelah kolom ke-80. Bagaimana saya lakukan?
Olivier Pons
7
Ini persis jawaban yang saya cari, tapi itu bukan jawaban untuk pertanyaan OP. Agak menyesatkan untuk menganggap ini sebagai jawaban teratas. Saya tidak tahu bagaimana cara memperbaiki situasi ini. Saya hanya akan mengedit jawaban Anda untuk juga menjawab pertanyaan awal. Tetapi sudah ada jawaban yang tepat yang hampir sama tinggi suara. Jadi saya hanya memilih untuk mengganti dua jawaban.
Daniel Darabos
3
Ini tepatnya jawaban yang saya tidak cari, dan itu bukan jawaban untuk pertanyaan OP.
peeol
Ini bukan jawaban untuk pertanyaan itu.
194

Saya suka bahwa garis panjang ditampilkan lebih dari satu garis terminal

Jenis pembungkus garis visual / virtual ini diaktifkan dengan wrapopsi jendela:

set wrap

Saya tidak suka vim memasukkan baris baru ke teks saya yang sebenarnya.

Untuk mematikan pembungkus garis fisik, kosongkan opsi textwidthdan wrapmarginpenyangga:

set textwidth=0 wrapmargin=0
Laurence Gonsalves
sumber
1
Terima kasih! set textwidth=0 wrapmargin=0berfungsi tetapi jika saya memasukkannya ke dalam .vimrc, itu tidak memiliki efek misalnya untuk file teks biasa. Bagaimana saya mencari tahu dan menghilangkan timpa?
qubodup
7
@ qubodup Anda dapat menguji apakah ada sesuatu yang menimpa pengaturan .vimrc Anda dengan membuka file tempat Anda melihat masalah dan memasukkannya :verbose set textwidth? wrapmargin?. Ini akan memberi tahu Anda nilai mereka saat ini dan juga di mana mereka ditetapkan. Mungkin saja Anda memiliki plugin yang menggantikannya. Dalam hal ini Anda dapat menghapus instalasi plugin itu, atau mencoba mengganti pengaturan plugin nanti di runtimepath Anda (misalnya:) ~/.vim/afteratau dengan perintah otomatis Anda sendiri. Pendekatan yang tepat akan tergantung pada di mana / bagaimana pengaturan ulang.
Laurence Gonsalves
set wrapdan set linebreakapa yang dilakukan untukku.
Ilia Choly
36

Saya tidak yakin saya mengerti sepenuhnya, tetapi Anda mungkin mencari pengaturan konfigurasi 'formatoptions'. Coba sesuatu seperti :set formatoptions-=t. The tpilihan akan memasukkan jeda baris untuk membuat bungkus teks di set lebar oleh textwidth. Anda juga dapat menempatkan perintah ini di Anda .vimrc, cukup hapus titik dua ( :).

Erik Hesselink
sumber
3
Bagi saya ini adalah pilihan terbaik untuk mengatasi keinginan OP. Saya suka kenyataan bahwa vim masih menunjukkan garis vertikal pada tw.
mitchus
3
Ini adalah satu-satunya jawaban yang benar-benar menjawab pertanyaan OP. Kebanyakan orang melakukan yang sebaliknya. OP masih ingin garis panjang ditampilkan melilit, tetapi agar vim tidak memasukkan jeda baris secara otomatis.
sebastian
33

Gunakan :set nowrap.. bekerja seperti pesona!

Vatsala
sumber
10
Kecuali bahwa ia melakukan kebalikan dari apa yang didefinisikan OP sebagai perilaku yang diinginkan ...: P
Morlock
5
@Morlock, tetapi menjawab pertanyaan yang saya miliki dan google membawa saya ke sini :)
Ben Usman
apakah ada cara pintas keyboard untuk ini?
Pini Cheyni
@PiniCheyni, tambahkan ke file .vimrc Anda: nnoremap <Cw>: atur invwrap <CR> Kemudian Anda dapat menggunakan Ctrl + W untuk mengaktifkan pembungkus teks.
reas0n
30

:set tw=0

VIM tidak akan menyisipkan jalur terputus secara otomatis, tetapi akan menjaga pembungkus garis.

orip
sumber
3
Saya ingin yang sebaliknya ... ketika saya mengetik saya masih ingin melihat "visual" batas 80 kolom dan saya tidak ingin vim untuk secara otomatis menambahkan line feed ketika saya mengetik setelah kolom ke-80. Bagaimana saya lakukan?
Olivier Pons
16

Anda mungkin menemukan set lbrbermanfaat; dengan set wrapini akan membungkus tetapi hanya memotong garis pada spasi putih dan tidak di tengah kata.

misalnya

without lbr the li
ne can be split on
a word

dan

with lbr on the
line will be
split on 
whitespace only
davetapley
sumber
Sangat disarankan untuk menghindari menyingkat opsi karena di masa depan Anda harus melakukan pencarian pada sistem bantuan untuk memahami apa yang telah Anda set nolinebreakset lbr
setel
12

set formatoptions-=t Menyimpan lebar teks visual tetapi tidak menambahkan baris baru dalam mode sisipkan.

Jimmy Tran
sumber
4

Aneh bahwa pengaturan yang sederhana seperti ini membutuhkan jumlah 'fokus-fokus' ini untuk bekerja.

Untuk menjawab pertanyaan Anda sekarang, bagi saya sepertinya berfungsi dengan kombinasi berikut:

:set wrap linebreak nolist

(ini tampaknya mencegah garis yang ada dari putus, hanya membungkus.)

DAN

set formatoptions=l

(ini mencegah baris baru / yang diedit dari melanggar, sementara + = tidak melakukannya untuk saya karena pengaturan / plugin lain tampaknya menemukan ruang dan menambahkan opsi mereka sendiri yang menimpa tambang saya.)

petroslamb
sumber
4

Jika, seperti saya, Anda menjalankan gVim di Windows, maka file .vimrc Anda dapat mengambil sumber file Vimscript 'contoh' lainnya yang secara otomatis disetel textwidth(dalam kasus saya ke78 ) untuk file teks.

Jawaban saya untuk pertanyaan serupa dengan yang ini - Bagaimana cara menghentikan teks pembungkus gVim di kolom 80 - di situs Pertukaran Vi dan Vim Stack :

Dalam kasus saya, komentar Vitor menyarankan saya menjalankan yang berikut:

:verbose set tw?

Melakukannya memberi saya output berikut:

textwidth=78
      Last set from C:\Program Files (x86)\Vim\vim74\vimrc_example.vim

Di vimrc_example.vim , saya menemukan baris yang relevan:

" Only do this part when compiled with support for autocommands.
if has("autocmd")

  ...

  " For all text files set 'textwidth' to 78 characters.
  autocmd FileType text setlocal textwidth=78

  ...

Dan saya menemukan bahwa .vimrc saya sedang mencari file itu:

source $VIMRUNTIME/vimrc_example.vim

Dalam kasus saya, saya tidak ingin textwidthdiatur untuk file apa pun, jadi saya hanya berkomentar di baris yang relevan di vimrc_example.vim .

Kenny Evitt
sumber
1
Daripada mengedit file vimrc_example.vim, saya hanya menambahkan autocmd FileType text setlocal textwidth=0ke file vimrc dan itu memperbaiki masalah ketika solusi yang diusulkan lainnya tidak.
GrandAdmiral
3

Benar yang mengatur nowrap akan memungkinkan Anda untuk menempelkan garis panjang tanpa vi / vim menambahkan baris baru, tetapi kemudian garis tersebut tidak dibungkus secara visual agar mudah dibaca. Alih-alih, hanya satu garis panjang yang harus Anda gulir.

Untuk memiliki garis yang dibungkus secara visual tetapi tidak memiliki karakter baris baru yang dimasukkan ke dalamnya, telah menetapkan bungkus (yang mungkin default sehingga tidak diperlukan untuk mengatur) dan mengatur textwidth = 0 .

Pada beberapa sistem pengaturan textwidth = 0 adalah default. Jika Anda tidak menganggapnya demikian, tambahkan set textwidth = 0 ke file .exrc Anda sehingga menjadi default pengguna Anda untuk semua sesi vi / vim.

Cruciverbalist
sumber