📄 00000002.htm
字号:
<HTML><HEAD> <TITLE>BBS水木清华站∶精华区</TITLE></HEAD><BODY><CENTER><H1>BBS水木清华站∶精华区</H1></CENTER> <BR>文件的搜寻 <BR> <BR>搜寻特定的字串,并非 EMACS 所特有的功能,相信大多数的 <BR>编辑器都具有如此的功能。但 EMACS 所采取的搜寻方法是, <BR>每键入一个字元就展开搜寻,EMACS 称此种方式的搜寻为 <BR>Incremental Search 。 <BR>当然, EMACS <BR>也提供非 Incremental Search} ,称为 Nonincremental Search。 <BR> EMACS 对於所要搜寻的字串,仍是利用 minibuffer <BR>来输入所欲搜寻的字串。 <BR>此时,输入 minibuffer 的搜寻字串,若全由小写的英文字母 <BR>(lower case)组成,则 EMACS 在展开搜寻的行动时,不论字母 <BR>是否有大小写的差别,会将所有与 minibuffer 具有相同 <BR>英文字母的字串都找寻出来。例如在 minibuffer 处输入 abc, <BR>EMACS 会找寻abc、 Abc、aBc、 abC、ABc、aBC、ABC 等字串。 <BR>所以在 minibuffer 处输入小写的英文字母,就表示所要找寻 <BR>的字串包括大写的字母在内。 <BR> <BR> 如何直接找寻上述例子的 ABC,而不需经过 <BR>abc、Abc、aBc、 abC、 ABc、ABC 等字串呢?欲达如此的效果, <BR>必需在 minibuffer 处,给予大写字母(upper case)的字串。 <BR>例如,在 minibuffer 处,给予 ABC 的字串,此时,缓冲区 <BR>的内容若为abc、 Abc、aBc、 abC、ABc、aBC、ABC ,则会 <BR>直接搜寻 ABC 。所以在 minibuffer 处输入大写的英文字串时, <BR>EMACS 所找寻字串的大小写,就会与minibuffer 字串的大小写 <BR>完全一样。 此种对大小写极度敏感的作法,称为 case sensitive。 <BR>EMACS 对於大小写出现的位置也有差别,现在就先来讨论 <BR>case sensitive 的问题。 <BR> <BR> * minibuffer 的字母都是小写,则可能找到的字串,包含 <BR> 所有大小写的字串。 <BR> 原始文件:abc、 Abc、aBc、 abC、ABc、aBC、ABC <BR> 输入 minibuffer 的字串: abc <BR> search string:abc、 Abc、aBc、 abC、ABc、aBC、ABC <BR> * minibuffer中的字母,若有任一个以上的字母是大写,则可能 <BR> 找到的字串,就如同 minibuffer 所示的一样。 <BR> 原始文件:abc、 Abc、aBc、 abC、ABc、aBC、ABC <BR> <BR> o 输入 minibuffer 的字串: Abc <BR> search string:Abc <BR> o 输入 minibuffer 的字串: aBc <BR> search string:aBc <BR> o 输入 minibuffer 的字串: ABc <BR> search string:ABc <BR> o 输入 minibuffer 的字串: ABC <BR> search string:ABC <BR> <BR>如果希望 minibuffer 输入什麽,缓冲区就找到什麽时, <BR>例如,在 minibuffer中输入 abc,所要找寻的字串就是 abc。 <BR>此时就必需修改 EMACS ``case-fold-search'' 变数的值为 ``nil''。 <BR>因为EMACS 对此变数的预设值是 t,它的意思就是使搜寻成为 <BR>case sensitive。若将此变数改成非 case sensitive 时,在 <BR>minibuffer} 输入 abc,就只会找寻 abc。 <BR> <BR> 知道了 EMACS 对大小写的处理程序後,现在就来谈谈 <BR> incremental search和noincremental search。键入 <BR>第一个字母至minibuffer 时,搜寻的序幕就展开,是为 <BR>incremental search。 <BR> 使用 incremental search时,当 minibuffer <BR>收到第一个搜寻字母时,搜寻行动就从游标所在位置向下开始搜索。 <BR>此时的游标,会从原先游标所在位置移至其下第一个出现此字母的 <BR>地方;当 minibuffer 出现两个字元时,游标也移至其下出现 <BR>此两个字元的地方。当然,这些都必需要以缓冲区中有这些文字为前题, <BR>若找不到任何合适的文字时, <BR> echo area 会出现 ``Failing I-search:'' 的警示语。 <BR> 在 EMACS 中执行 incremental search的方法有两种, <BR>一种是往前的搜寻( forward search),另一种是回头的搜寻 <BR>( backward search。如下,就是二种搜寻所使用的指令: <BR> <BR> * Ctrl-s (isearch-forward) <BR> 游标所在处向前(右)搜寻。 <BR> * Ctrl-r (isearch-backward) <BR> 游标所在处往回(左)搜寻。 <BR> <BR>当使用 Ctrl-s 或 Ctrl-r指令时, EMACS 的 <BR> echo area 会出现 ``I-search:''或 ``I-serach backward:''。当出现这些 <BR>提示字时,就表示其後是要输入搜寻字串。只要键入第一个字元, <BR>搜寻的行动就立即展开了。 虽然如此,仍有几个有关搜寻的关键字 <BR>必需先行讨论,它们是 ``RET''、 ``DEL'' 与``Ctrl-g''。 <BR> <BR> * RET <BR> 当 minibuffer收到 RET 时,游标会停留在最後一个满足搜寻 <BR> 条件之处,且结束搜寻的动作。这种做法的好处是,若所找的资料 <BR> 就是所要的,且又是必需修改的资料,游标停留在该处,即可立即处理。 <BR> 因为,有些离开搜寻状态的方法,会使游标到第一次执行搜寻的位置, <BR> 这就是下面要谈的`` Ctrl-g'' 的处理原则。 <BR> * Ctrl-g``Ctrl-g'' 的用法有二种,其一、是离开搜寻,承如上面所言; <BR> 其二、就是当所键入的搜寻字串,无法找到完全符合的对应字串时, <BR> 可利用 ``Ctrl-g'' 将minibuffer中所能找到的子字串留下, <BR> 而将不能找到的资料除去。 <BR> 所以,若已经找到所要的字串而想离开搜寻时,键入 ``Ctrl-g'' <BR> 除了可以离开搜寻外,还可以将游标带回原先的出发点。根据 <BR> minibuffer 处所给予的资料,完全无误的在缓冲区中找到相对应 <BR> 的文字後,以 ``Ctrl-g'' 可将游标归回原位。但若所给予的资料在缓冲区 <BR> 中无法找到完全对应的字,此时,若想离开搜寻的状态,就必需用「两次」 <BR> 的 ``Ctrl-g'' 才可完全脱离搜寻的状态。 <BR> <BR> 此时,键入的第一个 ``Ctrl-g'' minibuffer 所找到的字串留下,而将 <BR> 无法兑现的字串删除。此时再键入一次 ``Ctrl-g'' ,则会完全离开搜寻的 <BR> 状态,而游标也会自动移回展开搜寻时的位置。 <BR> * DEL <BR> 想要修改 minibuffer 内的字串时,请用DEL(delete-backward-char) 。 <BR> 还记得它吗?它是用来删除字元的,此删除的动作是往回的删除。每执行 <BR> 一次的DEL,就是一个新字串的诞生, 也就是一个新搜寻的展开。值得注意 <BR> 的是,此新展开的搜寻与原先的搜寻方向相反,这个设计是合理的。 因为, <BR> 只要minibuffer 输入任何一个字,搜寻就己展开了,此时,若以DEL 来 <BR> 删除错误的输入,则表示先前所找到的字串也不符需要,所以只能重新来过 <BR> 才是可行之路。这也就是为何每删掉一个字元,搜寻的行动会回走的理由了。 <BR> <BR>要使用搜寻的指令,只需键入 ``Ctrl-s'' 。此时minibuffer会出现 <BR>``I-search:''。若键入 Ctrl-r 後,则出现 ``I-search backward:''。 <BR> <BR>使用搜寻的指令,会有若干情形出现: <BR> <BR> * 首次搜寻,即觅得所要的字串。 <BR> 使用者此时可根据所需来做适当的处理。例如,离开搜寻,修改搜寻到 <BR> 的资料等等。 <BR> * 搜寻不利,必需一而再,再而三的努力,才能找到所要的字串。 <BR> 此时只要重复使用 `` Ctrl-s'' ,游标就移至下一个符合的字串。所以, <BR> 只要所找寻的字串不变.就不需要再给予搜寻的字串。重复使用 <BR> `` Ctrl-s'' 的结果,仍无法找到所要的字串,echo area 会回应出 <BR> ``Failing I-search:'' 的讯息。 <BR> * 若重复使用 `` Ctrl-s'' 的结果,已使 echo area 出现 <BR> ``Failing I-search''後,则表示缓冲区已到了极限。若想再查看已阅□ <BR> 过的资料,只要再使用一次 `` Ctrl-s'' ,就会迫使搜寻从原来的启始点 <BR> 再进行一次的搜寻。 <BR> * 搜寻的过程中,若想回头再查阅已看过的资料时,只要交替使用 <BR> `` Ctrl-s'' 与 `` Ctrl-r'' ,就可以了。 <BR> <BR>EMACS 可以将搜寻过的字串,再拿出来重复使用。因为,EMACS <BR>将使用过的搜寻字串,都放在一个名为 search ring的变数中。 <BR>它与先前讨论过的 kill-ring 类似,都为变数。既为变数,其值就可以 <BR>增减与参阅的。至於如何查阅变数的值,请再行参考 4.4 节 <BR>(EMACS buffer and windows)。 <BR> <BR> 再使用搜寻过的字串,只要将 `` serach-ring''此一变数的 <BR>值取出即可。取出其值的方法有两种,一种是往前(右)的取出, <BR>另一种是往回(左)的撷取,其分界点是以最新使用过的搜寻字串 <BR>为分野。因为 `` search-ring'' 为一个ring,所以撷取的方式, <BR>不是采顺时锺的方向,就是采反时锺的方向。今举一实例说明之。 <BR> <BR>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -