Emacs ищет специальные лигатуры
Я только что заметил целую кучу опечаток в скомпилированном документе LaTeX, набранном в emacs, из-за того, что я не заметил, что когда я вставлял какой-то текст из другого места, я набирал много лигатур, таких как f вместо fi. Я провел поиск и замену, чтобы исправить этот конкретный экземпляр, но было бы неплохо быть уверенным, что их не было больше. Могу ли я сделать что-нибудь еще в emacs оптом, чтобы найти все такие исправления?
2 ответа
Если ожидается, что весь документ будет в ASCII, то вы можете использовать регулярное выражение для поиска чего-либо за пределами этого диапазона:
CMs [^
Cj SPC -~]
Это поиск всего, что не является ни новой строкой (код символа 10), ни чем-либо между пробелом (32) или тильдой (126). Любые лигатуры будут вне этого диапазона.
Я не совсем уверен, что вы спрашиваете, но вы можете легко найти (или query-replace
или же replace-string
) любые символы Unicode, которые являются лигатурами, то есть имеют LIGATURE
как часть их имени персонажа Unicode. Тем не менее, вы должны искать каждый из них в отдельности (ну, не совсем, но это проще всего сделать).
Для поиска данного лигатурного символа вы используете C-x 8 RET
во время Isearch, затем введите некоторую часть имени персонажа и заполните его.
Для этого действительно полезно использовать Icicles или, по крайней мере, какое-то другое усовершенствование завершения, которое позволяет вам завершить подстроку или другое регулярное выражение.
С сосульками у вас также есть прогрессивное завершение, что означает, что вы можете предоставить несколько подстрок (в общем случае, регулярные выражения) для соответствия.
Например, чтобы найти лигатуру с именем Unicode LATIN SMALL LIGATURE FF
Вы можете сделать следующее:
C-s C-x 8 RET
Это запрашивает у вас имя символа Unicode. Тип ligature S-SPC
соответствовать всем, чьи имена содержат ligature
(соответствие регистрозависимо). Затем введите latin S-SPC
сузить до латинских лигатур. Затем введите small S-SPC
сузить их только до строчных лигатур. Затем введите ffi
чтобы получить только тот, который вы хотите.
C-s C-x 8 RET ligature S-SPC latin S-SPC small S-SPC ffi RET
Порядок, в котором вы предоставляете несколько шаблонов, не имеет значения. И, конечно, вам не нужно использовать несколько шаблонов. Вы можете так же легко сделать это с помощью одного регулярного выражения:
C-x C-x 8 RET latin.*small.*ligature.*ffi RET
Если вы используете C-s C-x 8 RET ligature S-TAB
(или же S-SPC
вместо S-TAB
), вы видите все лигатурные символы (их 517). Если вы используете C-s C-x 8 RET small.*ligature S-TAB
затем вы увидите все строчные лигатуры (их 22, включая арабский, армянский, кириллицу, иврит и латиницу).
Ох, а с помощью сосулек вы видите не только имена персонажей в буфере *Completions*
- вы видите также самих персонажей (WYSIWYG) рядом с их именами.
(За query-replace
и т. д. процедура такая же, как для Isearch.)