La sintassi delle parole tiene conto dello script?


9

Chiamo count-words-region( M-x =) sulla stringa US / RU / IPA:

HelloПривheləʊ

Viene stampato il seguente messaggio:

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

Tutti i simboli hanno wsintassi, ma differiscono nello script:

(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

Ciò significa che il limite di parole è definito non solo dalla sintassi char ma anche dallo script char ?

Vorrei disabilitare questo comportamento per le modalità selezionate per poter navigare tra le parole ma non tra gli script. Come si può ottenere questo?

AGGIORNAMENTO Utile ulteriore discussione sui debbugs .

Risposte:


7

Questo comportamento specifico di forward-wordpuò essere controllato dalle variabili word-combining-categoriese word-separating-categories. Se si desidera ignorare completamente lo script, è sufficiente aggiungere la coppia (zero. Zero) al primo elenco, ad es.

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

Puoi anche cambiare quella variabile con setq-localse vuoi l'effetto in un buffer specifico.


Come hai scoperto queste variabili? Non ne vedo menzione nel manuale di elisp ...
JeanPierre,

@JeanPierre Ho guardato la fonte (e il 100% concorda sul fatto che dovrebbe essere documentato!)
YoungFrog

3
Si prega M-x report-emacs-bugdi avere la documentazione aggiornata.
phils,

2

Anzi, forward-worde backward-wordmostra anche che ci sono diverse parole qui. Per me ha senso che caratteri di diversi script non possano essere nella stessa parola, ma la documentazione dovrebbe essere resa esplicita al riguardo ( qui ). Suggerisco al M-x report-emacs-bugriguardo.

Se vuoi semplicemente spostarti tra "parole" ignorando lo script, puoi usare skip-syntax-forwarde skip-syntax-backward(descritto qui )

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.