Saya menggunakan vim untuk mengedit kode sumber Informix 4GL yang memiliki sintaks semacam ini:
FUNGSI UNTUK ... ... SELESAI UNTUK AKHIR FUNGSI
Saya ingin melipat fungsi menggunakan za zM dll
Ini bekerja
: set foldmarker = FUNCTION, END \ FUNCTION : atur foldmethod = marker
Namun kata kunci juga bisa dalam huruf kecil dan idealnya saya juga ingin melipat MAIN..END MAIN, jadi spidol tidak dapat melakukan ini.
Saya mencoba
: syn region myFun start = "FUNCTION" end = "END FUNCTION" lipatan transparan : set foldmethod = sintaks
tapi itu tidak berpengaruh. Saya sudah memiliki file sintaks yang menyoroti warna dan :syn
menunjukkan myFun
termasuk dalam definisi sintaks.
Bagaimana cara mengonfigurasi lipatan sintaksis kasus-independen FUNCTION ... END FUNCTION dan MAIN..END MAIN?
Pembaruan: Saya telah mencoba http://www.vim.org/scripts/script.php?script_id=2287 tetapi ada beberapa masalah:
- Lipatan pada tingkat detail saya tidak ingin (
IF
,FOR
,WHILE
, ...) - Ini mengasumsikan
END
pernyataan dimulai pada baris baru (jadiIF a<b call c() END IF
lipat ke EOF) - Itu dianggap
SELECT * FROM table \n FOR UPDATE
sebagai awal dari sebuahFOR
pernyataan
Jadi saya ingin mencoba membuat sesuatu yang lebih sederhana terlebih dahulu.
vim
code-folding
RedGrittyBrick
sumber
sumber
set foldmethod=indent
?Jawaban:
Saya pikir Anda harus mendefinisikan fungsi lipat Anda sendiri, sehingga Anda akan memiliki lebih banyak kontrol atas apa yang dilipat ketika. Fungsi lipatan berikut terlipat
function
/end function
tidak sensitif, dan harus mudah disesuaikan untuk persyaratan lebih lanjut:Kemudian atur
foldmethod
keexpr
danfoldexpr
ke fungsi:Lihat
help fold-expr
lebih lanjut."Tangkapan Layar":
sumber