Apakah sintaksis kata memperhitungkan skrip?

9

Saya menelepon count-words-region( M-x =) pada string US / RU / IPA:

HelloПривheləʊ

Pesan berikut dicetak:

Region has 1 line, 4 words, and 14 characters.

Semua simbol memiliki wsintaks, tetapi berbeda dalam skrip:

(char-syntax ?H) ; ?w
(char-syntax ?П) ; ?w
(char-syntax ?ʊ) ; ?w
(aref char-script-table ?H)  ; script: latin
(aref char-script-table ?П)  ; script: cyrillic
(aref char-script-table ?ʊ)  ; script: phonetic

Apakah itu berarti bahwa batas kata didefinisikan tidak hanya oleh sintaks char tetapi juga oleh script char ?

Saya ingin menonaktifkan perilaku ini untuk mode yang dipilih agar dapat menavigasi kata-kata tetapi tidak di skrip. Bagaimana ini bisa dicapai?

PEMBARUAN Diskusi lebih lanjut yang bermanfaat tentang debbugs .

gavenkoa
sumber

Jawaban:

7

Perilaku spesifik ini forward-worddapat dikontrol oleh variabel word-combining-categoriesdan word-separating-categories. Jika Anda ingin mengabaikan skrip sepenuhnya, cukup menambahkan pasangan (nil. Nil) ke daftar pertama, misalnya

(let ((word-combining-categories (cons '(nil . nil)
                                       word-combining-categories)))
  (forward-word))

Anda juga dapat mengubah variabel itu dengan setq-localjika Anda ingin efek dalam buffer tertentu.

YoungFrog
sumber
Bagaimana Anda menemukan tentang variabel-variabel ini? Saya tidak melihat mereka dalam manual elisp ...
JeanPierre
@JeanPierre Saya melihat sumbernya (dan 100% setuju bahwa itu harus didokumentasikan!)
YoungFrog
3
Harap M-x report-emacs-bugperbarui dokumentasi.
phils
2

Memang, forward-worddan backward-wordjuga menunjukkan ada beberapa kata di sini. Masuk akal bagi saya bahwa karakter dari skrip yang berbeda tidak boleh dalam kata yang sama, tetapi dokumentasi harus dibuat eksplisit tentang hal itu (di sini ). Saya menyarankannya M-x report-emacs-bug.

Jika Anda hanya ingin memindahkan skrip mengabaikan "kata-kata", Anda dapat menggunakan skip-syntax-forwarddan skip-syntax-backward(dijelaskan di sini )

JeanPierre
sumber