membuat vim fold juga menyembunyikan baris baru setelah fungsi

8

Bagaimana seseorang dapat membuat fungsi lipat vim - saat menggunakan foldmethod = sintaks - juga menyembunyikan satu baris baru setelah setiap fungsi, jika-lain dan struct (menggunakan Go).

Łukasz Gruner
sumber

Jawaban:

4

Berikut cara melakukannya untuk C:

  • Ambil file sintaks asli (di bawah Unix, biasanya ditemukan di /usr/share/vim) dan salin ke (lagi, di bawah Unix) ~/.vim/syntax.
  • Ubah pola "end" di definisi wilayah cBlock:
syntax region cBlock    start="{" end="}" transparent fold

menjadi

syntax region cBlock    start="{" end="}\(\n\n\)\?" transparent fold

Di sini, yang pertama \ncocok dengan karakter baris baru segera setelah tanda kurung penutup, yang kedua adalah baris kosong. Ini tidak akan berfungsi jika }diikuti oleh misalnya komentar: blokir akan tetap dilipat, tetapi baris baru berikut tidak akan.

Saya tidak memiliki file sintaks untuk Buka di sini (sejauh yang saya tahu), tetapi harus bekerja dengan cara yang sama.

Catatan: cara yang lebih fleksibel adalah dengan membuat file baru di ~/.vim/after/syntaxdan hanya mengubah definisi wilayah, tetapi saya tidak berhasil di sini. Hanya menyalin definisi wilayah tidak berfungsi.

Ansgar Esztermann
sumber
0

Saya tahu ini sudah tua, tetapi juga solusi @ ansgar-esztermann:

syntax clear  cBlock
syntax match  cBlock1line /.\s*{.\{-}}/ transparent contains=ALLBUT,cBadBlock,cCurlyError,@cParenGroup,cErrInParen,cErrInBracket,cBlockImp
syntax region cBlockImp  start=/{/  end=/};\?\(\n\n\)\?/ transparent fold contains=ALLBUT,cBadBlock,cCurlyError,@cParenGroup,cErrInParen,cErrInBracket

dalam ~/.vim/syntax/c.vimlipatan baris baru (untuk structs juga)

Jorengarenar
sumber