Doktring untuk modify-syntax-entry
mengatakan sebagai berikut:
(modify-syntax-entry CHAR NEWENTRY &optional SYNTAX-TABLE)
...
The first character of NEWENTRY should be one of the following:
...
/ character-quote. @ inherit from parent table.
| generic string fence. ! generic comment fence.
Apa itu pagar, dan kapan saya akan menggunakannya? Saya tidak dapat menemukan apa pun di manual info.
syntax-highlighting
syntax-table
Wilfred Hughes
sumber
sumber
M-x report-emacs-bug
."
hanya dapat diakhiri oleh orang lain"
. Namun, ketikasyntax-propertize
fungsi khusus digunakan untuk mengenali string, ini tidak mungkin. Sebagai gantinya, Anda dapat menandai titik akhir dari string dan komentar menggunakan|
dan!
, masing-masing. (Dokumentasi mengatakan bahwa kelas sintaks ini terutama harus digunakan ketika menggunakansyntax-table
properti teks, yang merupakan apasyntax-propertize
fungsi set kustom .)Jawaban:
Mereka didokumentasikan dalam manual, tetapi tidak menggunakan kata "pagar". Karakter
!
dan|
terdaftar sebagai "pembatas komentar generik" dan "pembatas string generik" dalam referensi kelas sintaks .Karakter-karakter ini diperkenalkan di Emacs 20.1. Mengutip file BERITA:
Saya tidak dapat menemukan penggunaan
!
dalam mode Emacs standar. Ada beberapa penggunaan|
. Case use yang dimaksud adalah bahasa yang memiliki literal yang menggunakan pembatas selain pembatas string yang biasa, biasanya diatur melalui overlay yang ditambahkan oleh penguncian font berdasarkan konteks. Misalnya, dalam perl, kecocokan ekspresi reguler dapat ditulis/REGEXP/
, ataum/REGEXP/
ataum~REGEXP~
ataum[REGEXP]
sejumlah variasi. Sebuah string literal dapat ditulis'STRING'
tetapi jugaq'STRING'
,q~STRING~
,q[STRING]
, dll Ketika kunci font yang mengakui konstruksi seperti, ia menetapkan karakter quote (/
//
atau'
/'
atau~
/~
atau[
/]
dalam contoh yang saya berikan) ke sintaks pembatas string generik. Bahkan jika pembatas string biasa ada (misalnyaq[foo"bar]
), pembatas itu akan dianggap sebagai bagian biasa dari string, itu tidak akan mengakhiri string.Saya akui bahwa saya tidak melihat manfaat pasti - misalnya mode CPerl melakukan beberapa hal yang sangat mewah dan tidak menggunakan fasilitas ini.
sumber
!
untuk menyorot=begin
...=end
blok.Diambil dari sintaks: jam:
Dengan asumsi bahwa kode sintaks dan kelas sintaks regex merujuk pada hal yang sama, saya sudah menggunakan tutul dari
|
dalamcc-awk.el
yang menggunakan"\\s|"
untuk menyoroti pemisah string tidak seimbang.sumber
python-syntax-stringify
,ruby-syntax-propertize-percent-literal
dan lain - lain . Saya tidak melihat perbedaannya dariSstring
sini.