计算机‎ > ‎软件‎ > ‎Linux‎ > ‎

国瑞学用 emacs 续四

发布者:guo rue,发布时间:2016年3月28日 下午9:13   [ 更新时间:2016年3月28日 下午9:43 ]
递增搜索,第 1 部分
递增搜索是 Emacs 中我喜欢的特色之一。当您开始输入时,它们马上开始匹配文本。它的好处是您常常不需要输入整个词就可以完成搜索。

标准的向前递增搜索是由 C-s 命令启动的。从光标位置向后搜索是由 C-r(isearch-backward)命令来完成。有各种内部搜索命令可使用;您可以输入以下命令来得到全部描述:
C-h d isearch-forward
突出显示的包括递增匹配:向前匹配用 C-s 和向后匹配用 C-r。还有,当您到达您的目标时,按 Enter 或 C-g 来终止搜索。

递增搜索,第 2 部分
现在试用递增搜索。把光标移到练习文档的开头,再输入 C-s。提示符出现在小缓冲区中 ― I-search:。然后,慢慢地输入您想搜索的词的字母。随着您增加每个字母,突出显示区域在您的缓冲区中行进,显示您已输入部分的第一个匹配。在下面的屏幕片段中,您可以看到第一个匹配在紫红色中,下一个可能的匹配在淡绿色中。

正则表达式搜索
正则表达式搜索也是递增的但使用正则表达式来提供更强大的搜索功能。我不准备在本教程中讲正则表达式,但您可以找到很多不错的印刷的或在线的参考资料。

启动向前正则表达式搜索的方法是输入 ESC C-s(也就是,Esc 键,然后 Ctrl 键加“s”键)。类似地,向后搜索的方法是使用 ESC C-r。

例如,让我们假定由于奇怪的原因我的文本中的某处有 bartok 和 footok。我想找到任一个的最接近的实例,为此我可以只用一次正则表达式搜索而不是搜索两个再记下行号等。

现在,我可能输入
ESC C-r bar\|foo
它先匹配上面的 bartok。然后,随着我加上表达式的“或 foo”部分,该命令从搜索点开始重新检查,发现 footok 才是真正最接近的。现在,我可以用 C-r 或 C-s 来分别向后或向前递增搜索缓冲区中的各种 foo 和 bar。

替换文本
Emacs 中,替换命令有两种基本类型。第一种是无条件替换,它基于字符串或正则表达式规范。没有缺省的键绑定(由此我不得不得出结论它并不被认为是重要的),但它的使用方法是输入 M-X replace-string(或 M-x replace-regexp)。跟在后面的是目标字符串/表达式和替换字符串。替换是无条件的并且仅从光标位置开始向前替换。

第二个命令 query-replace 的绑定键是 M-%(另一个需按 Shift 的击键)。您在小缓冲区中的提示符后输入目标和替换字符串后,每个匹配按顺序被突出显示,您会收到该采取什么操作的提示。按 ? 将显示各种可能的回答的全部列表。最常见的是:“y”表示替换并继续,“n”表示跳过并继续,“q”表示退出,还有 ! 表示无条件替换剩下的全部匹配。

在练习缓冲区中试用这些命令。

搜索和替换总结
下面的表总结了我们已讲过的 Emacs 基本搜索和替换功能。记住,您可以得到任何命令的详细帮助,不管它有没有键绑定,方法是输入 C-h d command-name。
键绑定 操作(命令)
C-s isearch-forward
C-r isearch-backward
<find> search-forward
Esc C-s isearch-forward-regexp
Esc C-r isearch-backward-regexp
n/a replace-string
M-% query-replace