Bagaimana cara menyorot paragraf panjang?

Saya tahu cara menyorot garis panjang. Salah satu :

:match ErrorMsg '\%>140v.\+'

yang saya lebih suka daripada "cara kolom warna":

:set colorcolumn=140

Jadi, misalnya, teks:

Vim adalah editor teks yang ditulis oleh B. Moolenaar dan pertama kali dirilis ke publik pada tahun 1991. Vim didasarkan pada editor vi yang umum pada sistem mirip Unix. Vim adalah perangkat lunak gratis dan sumber terbuka.

disorot dimulai dengan "Vim gratis, dll..."

Tetapi bagaimana saya bisa mencapai hasil yang sama untuk sebuah paragraf (dalam contoh ini, 3 baris) seperti:

[Empty line]
Vim is a text editor written by B. Moolenaar and first released publicly in 1991. 
It is based on the vi editor common to Unix-like systems. 
Vim is free and open source software
[Empty line]

Terima kasih sebelumnya


person ThG    schedule 28.03.2014    source sumber
comment
maka seluruh dokumen akan ditampilkan dalam warna yang sama (disorot) bukan? karena dokumen Anda terdiri dari paragraf dan baris kosong. atau saya salah memahami pertanyaannya?   -  person Kent    schedule 28.03.2014
comment
@Kent: itu saja. Dan paragraf-paragraf itu mungkin (ini adalah teks murni, bukan kode) yang terdiri dari 1, atau 2 atau 3, dst... baris, paragraf-paragraf tersebut dipisahkan oleh satu baris. Harapan saya adalah melihat - dalam contoh itu - semua paragraf yang terdiri dari › 140 karakter.   -  person ThG    schedule 28.03.2014


Jawaban (1)


Ini sulit, karena Anda harus menentukan (dalam satu ekspresi reguler)

  1. kondisi paragraf (yang saya asumsikan sebagai baris-baris yang dipisahkan paling banyak oleh satu baris baru; yaitu baris-baris kosong membuat paragraf-paragraf baru)
  2. penghitungan karakter (sorot setelah 140 karakter)

Inilah pencapaian terbaik yang pernah saya capai; entah bagaimana masih cocok "ke dalam" paragraf berikut jika paragraf saat ini terlalu kecil:

:match ColorColumn /\%(\%^\|\n\n\)\%(\%(.\+\n\)*.*\)\&\_.\{140}\%(\zs.\|\n\zs.\)/

Penjelasan:

  • berlabuh di awal buffer atau baris kosong
  • cocok dengan baris yang tidak kosong
  • dan karakter tambahan DAN
  • cocokkan 140 karakter dan/atau baris baru
  • kemudian mulai pertandingan pada karakter berikut, atau jika itu adalah baris baru (yang tidak muncul dengan benar), karakter berikutnya setelahnya

Saya akan senang jika seseorang memperbaiki hal ini.

person Ingo Karkat    schedule 28.03.2014
comment
Terimakasih banyak atas jawaban Anda. Namun, sepertinya ada sedikit kesalahan: ini hanya berfungsi untuk paragraf 3 baris. Hal ini mungkin disebabkan oleh fakta bahwa paragraf tersebut masih cocok dengan paragraf berikutnya jika paragraf saat ini terlalu kecil. Tapi seperti yang baru saja saya komentari @Kent (seharusnya saya lebih tepatnya) paragraf-paragraf itu bisa terdiri dari 1, atau 2 atau 3, dst... baris, paragraf-paragraf itu dipisahkan oleh satu baris. Paragraf ‹ 140 karakter harus dianggap benar. Hal ini mendorong saya untuk bertanya kepada Anda - jika Anda punya cukup waktu - untuk menjelaskan ekspresi reguler Anda. Bagaimanapun, terima kasih sekali lagi. - person ThG; 28.03.2014
comment
Terima kasih, saya telah menambahkan penjelasan; secara teori, regexp seharusnya berfungsi (menurut saya); mungkin beberapa batasan implementasi Vim menghalangi penggunaannya. - person Ingo Karkat; 28.03.2014
comment
mencoba lagi, dan berhasil dengan baik. Terima kasih atas jawabannya, dan atas penjelasan Anda (btw, regex ini bukan untuk pemula yang lemah hati, seperti saya ...) - person ThG; 29.03.2014