mengubah arti "paragraf" untuk input TeX?

8

Saya sedang menulis kode LaTeX yang memiliki banyak bagian seperti ini

\begin{definition}
blah blah blah ...
...
\end{definition}    

Dalam teks normal, saya sangat suka gq]untuk menulis ulang semuanya dengan baik. Di dalam bagian blok seperti di atas, itu membungkus perintah akhir juga, yang saya lebih suka tetap pada baris yang terpisah.

Apakah ada cara untuk memberitahu vim bahwa garis awal \endmengakhiri paragraf? Atau ada perintah pemformatan lain yang bisa saya gunakan (saya telah <F8>memetakannya gq], saya tidak keberatan mendefinisikannya kembali?

Bristol
sumber

Jawaban:

6

Salah satu cara untuk melakukannya menggunakan objek teks kustom ie( di dalam lingkungan ), tersedia di sejumlah tempat: misalnya di plugin vimtex , atau dengan vim-textobj-lateks (dan ada yang lain). Dengan fungsi ini, maka perintah rewrap menjadi:

gqie

atau

gwie

(untuk mempertahankan posisi kursor).

Jika Anda hanya ingin memformat ulang teks dari posisi teks saat ini (saya melihat bahwa ini adalah kasus penggunaan Anda) ke akhir paragraf, Anda mungkin dapat puas dengan konstruk berikut (tidak diperlukan plugin):

gq/\(^\s*$\|\\end\)

Ini akan memformat ke baris kosong, atau baris yang mengandung \endkata kunci, mana yang lebih dulu. Jadi Anda bisa menggunakan pemetaan ini:

:nnoremap <F8> gq/\(\\end\\|^\s*$\)<CR>
VanLaser
sumber
gqiemelakukan apa yang saya inginkan ketika di dalam blok begin ... end, di badan teks utama ia mencoba untuk membungkus semuanya sampai \ end {document} - apakah ada cara untuk mengatakannya agar berhenti di baris kosong berikutnya?
Bristol
Nah, di luar lingkungan - mungkin default gqap?
VanLaser
Lihat jawaban yang diperbarui, untuk kemungkinan F8pemetaan ulang.
VanLaser
Saya kira saya memiliki suatu tempat kesalahan ketik sebagai berikut tidak bekerja: :map <F8> gq/\(^$\|^[%]$\|^\\end\)<CR>. Adakah yang bisa memberitahu saya apa yang saya lakukan salah? Saya mencoba mencocokkan baris yang benar-benar kosong ( ^$), baris dengan karakter% komentar ( ^[%]$) atau baris awal \end( ^\\end).
Bristol
Saya pikir Anda harus menggunakan \\|sebagai pemisah daripada \|saat memetakan.
VanLaser