3

我刚刚注意到在 emacs 中键入的已编译 LaTeX 文档中有一大堆拼写错误,这是因为我没有注意到当我从其他地方粘贴一些文本时,我积累了很多连字,比如 fi 而不是 fi。我已经进行了搜索和替换来修复这个特定的实例,但如果确信没有更多这样的实例就好了。我可以在emacs中做更多的批发来找到所有这些修复吗?

4

2 回答 2

5

如果整个文档预计为 ASCII,那么您可以使用正则表达式搜索该范围之外的任何内容:

C-M-s [^ C-j SPC -~]

即搜索既不是换行符(字符代码 10)也不是空格(32)或波浪号(126)之间的任何内容。任何连字都将超出此范围。

于 2014-03-27T18:26:02.150 回答
2

我不确定您要问什么,但是您可以轻松地搜索(或query-replacereplace-string)任何作为连字的 Unicode 字符,即LIGATURE作为其 Unicode 字符名称的一部分。但是,您必须分别搜索它们中的每一个(嗯,不是真的,但这样做最容易)。

要搜索给定的连字字符,请C-x 8 RET在 Isearch 期间使用,然后键入字符名称的某些部分并完成。

为此,使用Icicles或至少一些其他补全增强功能确实有助于完成子字符串或其他正则表达式

使用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 个,包括阿拉伯语、亚美尼亚语、西里尔语、希伯来语和拉丁语)。

哦,使用Icicles,您不仅可以看到缓冲区中的角色名称*Completions*- 您还可以看到角色名称旁边的角色本身(所见即所得)。

(对于query-replaceetc.,过程与 Isearch 相同。)

于 2014-03-27T20:48:45.617 回答