Saya tahu ada cara untuk secara otomatis mengatur lebar teks dalam vim menggunakan set textwidth
(seperti kekhawatiran tata letak kolom Vim 80 ). Apa yang saya cari adalah sesuatu yang mirip dengan =
(perintah baris indent) tetapi untuk membungkus ke 80. Kasus penggunaan kadang-kadang Anda mengedit teks dengan lebar teks dan setelah bergabung dengan garis atau menghapus / menambahkan teks itu keluar dibungkus dengan buruk.
Idealnya, perintah ini akan sepenuhnya mengatur ulang garis yang saya pilih dan memotong garis panjang sambil menambahkan yang pendek. Sebuah contoh:
long line is long!
short
Setelah menjalankan perintah (dengan asumsi bungkusnya 13 cols):
long line is
long! short
Jika ini tidak mungkin dengan perintah vim sejati, mungkin ada program command-line yang melakukan ini yang saya dapat pipa input ke?
Setelah mencari saya menemukan referensi ini yang memiliki beberapa opsi lagi: http://www.cs.swarthmore.edu/help/vim/reformatting.html
par
. Fantastis!gq
- Gentleman's Quarterly . (Permintaan maaf untuk antropomorfisasi laki-laki, tetapi mnemonik bekerja.)Jawaban:
Setel
textwidth
ke 80 (:set textwidth=80
), pindah ke awal file (dapat dilakukan dengan Ctrl- Homeataugg
), dan ketikgqG
.gqG
memformat teks mulai dari posisi saat ini dan ke akhir file. Secara otomatis akan bergabung dengan garis berturut-turut bila memungkinkan. Anda dapat menempatkan garis kosong di antara dua baris jika Anda tidak ingin keduanya digabungkan.sumber
V}gq
. Dengan cara ini Anda melihat apa yang akan Anda format sebelum benar-benar memformatnya.q
dengan sendirinya?set tw=80
alih-alihset textwidth=80
untuk menghemat waktuset textwidth=76
baris Anda akan di autowrap saat mengetik. Keluhan saya adalah bahwa itu tidak melakukan apa pun untuk baris yang sedang diedit. TetapiV}gq
sangat berguna dalam hal itu.V
memasuki mode pemilihan visual,}
memilih ke istirahat paragraf berikutnya, dangq
mengeksekusi pemformat saat ini di atasnya (atau gunakangw
untuk secara eksplisit memanggil formatter vi). Juga,{
akan memilih ke atas. Anda dapat memilih seluruh dokumen dan format denganggVGgq
meskipun mungkin ada cara yang lebih mudah. Simpan itu sebagai makro@
untuk membuatnya lebih mudah. Gunakanvipgq
untuk menemukan paragraf saat ini.Solusi Michael adalah kuncinya, tetapi saya paling sering menemukan saya ingin memformat ulang sisa paragraf saat ini; untuk perilaku ini, gunakan
gq}
.sumber
Anda dapat menggunakan
gq
dengan operator gerakan apa pun. Misalnya, jika Anda hanya ingin memformat ulang ke akhir baris saat ini (yaitu untuk membungkus garis di mana kursor Anda aktif) Anda dapat menggunakangq$
Anda juga dapat memformat ulang dengan memilih teks dalam mode visual (menggunakan `v dan bergerak) dan kemudian mengetik gq.
Ada opsi lain untuk memaksa garis untuk membungkus juga.
Jika Anda ingin vim untuk membungkus baris Anda saat Anda memasukkan teks di dalamnya daripada harus menunggu sampai akhir untuk merestrukturisasi teks, Anda akan menemukan opsi ini berguna:
(Jangan dilacak oleh
wrap
danlinebreak
, yang hanya memformat ulang teks yang ditampilkan di layar, dan jangan mengubah teks di buffer)sumber
wrapmargin
bantuan: Ketika 'textwidth' bukan nol, opsi ini tidak digunakan.Berkat komentar dari DonaldSmith saya menemukan ini, karena
textwidth
opsi tidak memformat ulang garis panjang teks saya (saya mengkonversi bermain dengan konversi hex-to-byte)::%!fold -w 60
Itu mereformasi seluruh file (yang merupakan satu baris untuk saya) menjadi baris dengan panjang 60.
sumber
Jika Anda mencari cara non-Vim , selalu ada perintah UNIX fmt dan par .
Catatan:
par
di webcastnya .Inilah cara kami akan menggunakan keduanya sebagai contoh Anda.
Untuk digunakan dari dalam Vim:
Anda juga dapat mengatur
:formatprg
ke par atau fmt dan menimpagq
. Untuk info lebih lanjut, hubungi:help formatprg
bagian dalam Vim.sumber
Hampir selalu saya gunakan
gq
dalam mode visual. Saya memberi tahu murid-murid saya bahwa itu adalah singkatan dari "Gentlemens 'Quarterly," sebuah majalah untuk orang yang cerewet.sumber