Dalam VIM, bagaimana cara memecah satu baris yang sangat panjang menjadi beberapa baris?

170

Katakanlah saya memiliki garis yang sangat panjang di editor VIM (katakanlah sekitar 300+ karakter). Bagaimana saya memecahnya menjadi beberapa baris sehingga batas kata secara kasar memecah menjadi 80 karakter?

Contoh:

This is a really long line This is a really long line This is a really long line This is a really long line This is a really long line This is a really long line This is a really long line This is a really long line This is a really long line This is a really long line This is a really long line

untuk

This is a really long line 
This is a really long line
This is a really long line
This is a really long line
This is a really long line
This is a ...
Jordan Parmer
sumber

Jawaban:

254

Vim melakukan ini dengan sangat mudah (memecah garis batas kata).

gq{motion} % format the line that {motion} moves over
{Visual}gq % format the visually selected area
gqq        % format the current line
...

Saya sarankan Anda check out :help gqdan :help gw.

Juga mengatur textwidth ( tw) akan memberi Anda jeda baris otomatis ketika terlampaui saat mengetik. Ini digunakan gqjuga, meskipun jika dinonaktifkan gqistirahat pada ukuran jendela atau 79 tergantung mana yang lebih dulu.

:set tw=80

Dengan mengatur opsi format untuk memasukkan lebar teks vim akan secara otomatis pecah pada pengaturan tw.

:set fo+=t
he_the_great
sumber
5
Jadi untuk kasus Anda, gqperintahnya adalah <ESC>(keluar dari mode Insert / Replace / etc), lalugq80l
MidnightLightning
6
Ini kebalikan dari Ctrl + j (menggabungkan beberapa baris menjadi satu).
Yzmir Ramirez
9
Vim tidak pernah berhenti membuatku takjub. Ini emas murni.
Jondlm
10
hanya untuk orang berikutnya yang menemukan ini, gq hanya tidak akan membagi satu baris teks padat, perlu spasi putih untuk melakukan hal itu
stringy05
2
[berjalan gqq] aaaahhh, itu indah
underscore_d
85

Pertama atur vim Anda sehingga mengerti bahwa Anda menginginkan 80 karakter:

:set tw=80

lalu, putar garis:

V

dan membuat vim memformatnya:

gq

sumber
17

Ini tidak benar-benar terkait dengan VIM, tetapi Anda bisa menggunakan program fmt seperti pada

$ fmt myfile
Wernsey
sumber
38
:%! fmt% "Dapat membuatnya terkait vim :)
Maxim Sloyko
2
Berguna untuk vi, meskipun saya lebih suka gqq di vim.
WhyNotHugo
13

Untuk garis teks padat sorot area menggunakan v dalam mode normal, lalu tekan

:s/\v(.{80})/\1\r/g

Ini akan menambahkan baris baru di akhir setiap karakter ke-80.

:s/       replaces within the current select
\v        uses regular expressions
(.{80})   selects 80 characters & placed them into group one
\1\r      replaces group one with group one and a newline
merokok
sumber
Ini adalah satu-satunya solusi yang bekerja untuk string base64 yang panjang.
jviotti
6

Jika Anda menggunakan * nix, Anda mungkin sudah memiliki fold.

Pilih wilayah yang ingin Anda gunakan v, maka Anda dapat memecah ruang dengan lebar 80 menggunakan:

!fold --spaces --width=80

Ini pada dasarnya sama dengan menggunakan gq.

Namun, jika Anda hanya ingin memecah karakter 80 dan tidak dibatasi untuk spasi putih Anda dapat menggunakan:

!fold --width=80

Jika Anda menginginkannya dengan satu ketukan tombol saja atur pemetaan - Saya telah menggunakan

vmap <f1> !fold --width=80<CR>

Michael Anderson
sumber
Ini adalah jawaban yang berfungsi untuk string panjang yang tidak dipisahkan oleh spasi putih. Pada macOS Anda mungkin perlu menggunakan gfold alih-alih flip.
Aaron D
pada mac os, saya harus melakukan! lipat -w 80
user674669
5

Untuk membagi garis panjang dalam dokumen lengkap tanpa menghapus jeda baris yang sudah ada, gunakan:

:set formatoptions+=w
:set tw=80
gggqG
Olivier Faucheux
sumber
4

Saya perlu memformat ulang seluruh file daripada satu baris. Seperti yang ditunjukkan oleh Wernsey, saya bisa menggunakan 'fmt', tetapi urutan berikut dalam vim melakukan trik juga (meminjam dari berbagai jawaban di sini):

<ESC>
:setl tw=80 fo=t
1GVGgq
John Rix
sumber
3

Sebagai cara yang cepat dan jahat, mungkin coba peta berikut:

map q 080lwbels<CR><ESC>

yang mengatakan:

  • memulai posisi baris ke-0,
  • pindah ke char ke-80 ke kanan,
  • pergi ke awal kata berikutnya,
  • kembali ke kata sebelumnya,
  • pergi ke akhir kata saat ini,
  • pergi satu char benar, dan
  • ganti CR untuk char itu.

Kemudian menekan q dan CR akan memecah baris menjadi potongan-potongan pada batas kata.

Rob Wells
sumber
-1

Saya secara manual memasukkan '\' (dan kemudian CR / tab untuk memformat) di setiap LONGLINE setelah spasi putih terakhir sebelum 80 kolom. Artinya:

1 this is a long, long, line

sekarang terlihat seperti

1 this is a long, \
        long line

dan mengkompilasi secara normal.

808
sumber