Bisakah saya membenarkan teks dalam Vim?


38

Satu-satunya alasan mengapa saya pernah mengedit file teks di Pico atau Nano, dan tidak di Vim adalah perintah "Justify" -nya ^J. Ini akan memformat ulang paragraf teks, membuat jeda baris saat jeda kata sehingga teks akan mengapung di layar lebar tetap dengan baik - memformat teks agar sesuai dengan 80 kolom yang telah ditetapkan, membuat jeda baris hanya antara kata-kata. Sebagai fungsi terbatas, itu sangat berguna, apakah untuk memformat blok komentar yang panjang, file dokumentasi, atau hanya mengganti baris parameter tanpa akhir dengan sesuatu yang lebih mudah dibaca.

Bisakah saya melakukan sesuatu seperti itu di Vim?

Jawaban:


37

Anda dapat menggunakan operator gqatau gwdikombinasikan dengan perintah gerak. Secara default, ini menggunakan fmtprogram (di Linux) untuk memformat teks yang diberikan. Namun, sepengetahuan saya, itu tidak membenarkan garis sehingga Anda akan mendapatkan margin kanan yang kasar.

Cara saya menggunakannya adalah dengan gwip(mode normal) dengan kursor pada paragraf. Ini akan memformat paragraf saat ini menjaga kursor pada posisi yang sama. Saya menggunakannya dengan cara ini untuk memastikan bahwa hanya paragraf saat ini yang diformat. Saat mengedit file teks, mengeluarkan gwG(mode normal) di awal file akan memformat seluruh teks. Sebagai praktik yang baik, pastikan untuk meninggalkan setidaknya satu baris kosong di antara paragraf.

Ada banyak konfigurasi yang bisa dilakukan. Untuk mulai dengan, berikut adalah beberapa bantuan yang relevan: :h gq, :h gw, :h fo(format pilihan), :h fp(program format), :h fo-table(penjelasan tentang pilihan yang mungkin).


1
gq / gw jelas cara untuk pergi. untuk menambah pesan ini Anda dapat mengubah program format ke par untuk memiliki lebih banyak opsi. Lihat vimcasts.org/episodes/formatting-text-with-par
Bambu

3
Secara default, Vim tidak menggunakan program eksternal, walaupun Anda dapat memilih untuk menggunakannya dengan mengatur 'formatprg'opsi.
jamessan

15

Ada VimCast yang hebat tentang topik ini.

http://vimcasts.org/episodes/formatting-text-with-par/

Pada dasarnya, Anda perlu menginstal par:

$ brew install par
# or
$ sudo apt-get install par

Dan kemudian, karena Anda ingin kolom dibungkus dalam 80 kolom:

:set formatprg=par\ -w80

Sekarang Anda dapat menggunakan gqoperator, seperti dalam jawaban lain (mis. gqip), Dan ia akan menggunakan Par sebagai ganti formatter bawaan Vim.

Par cukup maju, dan itu akan memformat komentar seperti ini dengan baik:

/* This is a long */
/* multiline comment */

11

Dari :help usr_25:

JUSTIFYING TEXT                                                                 

Vim has no built-in way of justifying text.  However, there is a neat macro     
package that does the job.  To use this package, execute the following          
command:                                                                        

        :runtime macros/justify.vim                                             

This Vim script file defines a new visual command "_j".  To justify a block of  
text, highlight the text in Visual mode and then execute "_j".

Jadi, yang harus Anda lakukan adalah menjalankan

:ru macros/justify.vim

lalu ketik

_j

untuk membenarkan teks di seluruh file.

(Tentu saja, Anda juga bisa menambahkan ru macros/justify.vim.vimrc Anda sehingga Anda tidak perlu mengetiknya setiap waktu.)

Catatan : ini tidak menambah jeda baris untuk Anda. Anda harus menambahkannya secara manual gq. Untuk ini, Anda juga harus mengatur textwidth(defaultnya adalah 0) ke nilai yang Anda inginkan via

set textwidth=80

dan — jika Anda mau — pembungkus teks otomatis dengan mengatur t-flag via

set formatoptions+=t

Jika mau, Anda dapat mengatur pemetaan di .vimrc Anda untuk melakukan semuanya untuk Anda:

nnoremap <C-j> gggqG_j

Ini pindah ke awal file ( gg), membungkus semua baris ( gqsampai G), dan kemudian _justifies teks.


Untuk melihat lebih dekat tentang pemformatan, lihat: VIM USER MANUAL - Mengedit teks yang diformat
Suuuehgi

Saya baru saja menemukan opsi yang sangat berguna :set fo+=auntuk memformat ulang seluruh paragraf secara otomatis. Lihat :help fo-tableopsi lain. Ada juga tutorial video yang bagus di sini .
Suuuehgi

+1 untuk solusi yang sepenuhnya bawaan. The _jpemetaan ditambah makro tampaknya membenarkan seluruh file untuk saya, atau dapat dibatasi dengan linewise seleksi visual.
ches

5

Sementara bantuan nano memanggil ^Jperintah "Justify" itu sebenarnya tidak membenarkan teks, itu memformat ulang teks yang melanggar garis sebelum margin kanan layar (atau di beberapa kolom yang dapat dikonfigurasi, saya kira).

Anda dapat melakukan hal yang sama di VIM dengan mengatur variabel textwidth, dari :help 'textwidth':

Lebar maksimum teks yang sedang dimasukkan. Garis yang lebih panjang akan terputus setelah ruang putih untuk mendapatkan lebar ini. Nilai nol menonaktifkan ini.

Artinya: saat Anda mengetik, jika garis lebih panjang dari textwidthkarakter, VIM akan membungkus garis di ruang pertama untuk menjaga panjang garis kurang atau sama dengan textwidth.

Agar ini berfungsi, opsi formatoptionsharus mengandung surat itu t. Lihat :help 'formatoptions'dan :help fo-tableuntuk opsi yang tersedia, misalnya Anda mungkin tertarik pada copsi untuk membuat pemformatan berfungsi dengan komentar.

Mengedit : Anda dapat melakukan operasi yang sama, tanpa perlu dimasukkan tdalam formatoptions, menggunakan perintah gw{motion}, itu format teks antara posisi kursor saat ini dan posisi kursor setelah {motion}. The gwperintah yang tersedia juga dalam mode visual, format teks yang dipilih.


1
Itu bagus untuk mengetik. Bisakah saya menerapkannya untuk teks yang sudah ada?
SF.

3

Berikut adalah dua opsi mudah:

  1. dengan blok teks yang dipilih, ketik !fmt
  2. dengan kursor Anda di awal blok, ketik !}fmt

Keduanya mengirim blok teks ke unix fmt, lihat man fmtopsi. Anda bisa memberikan argumen opsi dari vim. Misalnya, untuk memformat blok dengan lebar 50 karakter, ketik !}fmt -w 50.


maaf soal itu, perbaiki sekarang
kaan

Anda juga dapat memformat seluruh file Anda dengan mengetik :%!fmtdan membatalkan dengan satu ujika Anda tidak suka hasilnya.
Wildcard

-1

Tandai teks menggunakan perintah visual dan kemudian gunakan:

:!par 40j 

di mana 40 adalah lebar kolom dan jberarti membenarkan.


2
Selamat datang di situs kami! Pertanyaan Anda berkualitas rendah saat ini karena tidak memiliki penjelasan tentang alat yang Anda gunakan ( par) dan mengapa solusi Anda berfungsi. Anda mungkin ingin menambahkan lebih banyak detail untuk meningkatkan kualitas jawaban Anda dan menjadikannya lebih bermanfaat bagi pembaca di masa mendatang.
statox
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.