Berücksichtigt die Wortsyntax das Skript?


9

Ich rufe count-words-region( M-x =) für eine US / RU / IPA-Zeichenfolge auf:

HelloПривheləʊ

Die folgende Meldung wird gedruckt:

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

Alle Symbole haben eine wSyntax, unterscheiden sich jedoch im Skript:

(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

Bedeutet das, dass die Wortgrenze nicht nur durch die Zeichensyntax, sondern auch durch das Zeichenskript definiert wird ?

Ich möchte dieses Verhalten für ausgewählte Modi deaktivieren, um über Wörter, aber nicht über Skripte navigieren zu können. Wie kann dies erreicht werden?

UPDATE Nützliche weitere Diskussion zu Debbugs .

Antworten:


7

Dieses spezifische Verhalten von forward-wordkann durch die Variablen word-combining-categoriesund gesteuert werden word-separating-categories. Wenn Sie das Skript vollständig ignorieren möchten, reicht es aus, das Paar (null. Null) zur ersten Liste hinzuzufügen, z

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

Sie können diese Variable auch ändern, setq-localwenn Sie den Effekt in einem bestimmten Puffer haben möchten.


Wie haben Sie von diesen Variablen erfahren? Ich sehe keine Erwähnung von ihnen im elisp Handbuch ...
JeanPierre

@ JeanPierre Ich habe mir die Quelle angesehen (und stimme zu 100% zu, dass sie dokumentiert werden sollte!)
YoungFrog

3
Bitte M-x report-emacs-bugaktualisieren Sie die Dokumentation.
Phils

2

In der Tat forward-wordund backward-wordauch zeigen, dass es hier mehrere Wörter gibt. Es macht für mich Sinn, dass Zeichen aus verschiedenen Skripten nicht dasselbe Wort enthalten können, aber die Dokumentation sollte diesbezüglich explizit angegeben werden ( hier ). Ich schlage M-x report-emacs-bugvor.

Wenn Sie sich nur über "Wörter" bewegen möchten, ohne das Skript zu beachten, können Sie skip-syntax-forwardund skip-syntax-backward( hier beschrieben ) verwenden.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.