Emacs搜索指南
首先,输入 C-h i
进入Info buffer. 按下 d
跳转到Info文档的最顶层,然后再按下 M-<
跳转到buffer的起始位置.
输入 C-s lisp
开始增量搜索 "lisp".
按下回车会终止搜索,同时取消对匹配内容的高亮.
使用 C-r
可以实现向后搜索.
接下来,输入 C-s C-s
可以再次搜索最后一次搜索的字符.
按下 M-e
可以编辑要搜索的字符串. 让我们删掉minibuffer中的“lisp”,输入"mode",再按下回车开始新的搜索.
再次按下 M-p
,你会发现光标回到minibuffer,而你可以通过 M-p
和 M-n
来遍历之前搜索过的字符串,然后按下回车后就能够再次搜索这个字符串了.
现在让我们再一次输入 M-<
回到Info buffer的起始位置.
按下 C-s
开始新一轮的查找.
这一次我们输入 C-q C-j
来查数换行符.
这里 C-q
用来取消 C-j
或者说回车的特殊意义,而将它看成普通字符来看待: 如果你不输入 C-q
, 而直接按下 C-j
,则会直接退出搜索提示窗口.
我们按下 C-g
取消这次搜索.
接下来,我们用 C-s
来搜索mail.
注意到 “Mail” 与 “mail” 都会被搜索出来: 搜索是不区分大小写的.
按下 C-u C-SPC
可以跳回到你搜索前的位置.
在搜索的过程中,你随时可以通过按下 M-c
(或者 M-s c
) 来切换是否大小写敏感: 你会发现,按一下之后,只有“mail”高亮了.
在搜索过程中, 按下 M-s SPC
可以切换是否“宽松地匹配空格”: 所谓宽松地匹配空格,是指当你搜索类似“mail client”(间隔3个空格)字符串时,依然能够匹配字符串“mail client”.
在搜索过程中,还可以按下 M-s w
开启单词搜索. 这时搜索"mail"并不会匹配“email”.
现在尝试搜索一下 maii
,会发现查找不到符合条件的内容,接下来按下 DEL
删除最后那个字符.
让我们再次搜索“mail”.
按下回车,定位到第一次出现mail的位置然后按下 M-b
回退一个单词的位置.
接下来按下 C-s C-w
搜索光标处的单词(此时应该是“mail”).
让我们再试试按下 C-s C-w C-w
会发现可以搜索光标处的多个单词.
按下 C-s C-M-y
则表示搜索光标处的字符.
类似的,按下 C-M-y C-M-y
会将接下来的两个字符也纳入搜索字符串中.
按下 C-M-w
会删除搜索字符串中最后那个字符.
再次按下 C-g
退出搜索.
Info buffers 默认情况下是只读的: 在单词上按下 M-d
可以拷贝该单词.
但是在一般的buffer中,你需要先用 C-M-SPC
选中光标处的“sexp”(这里,“sexp”就是指的一个单词), 然后再通过 M-w
拷贝它(或者说,将它放到kill-ring中).
现在再次按下 C-s
, 然后按下 C-y
将文本粘贴(或者说是yank)到搜索域中.
按下 C-s C-M-i
会出现一个新window,列出了针对当前搜索字符串的所有可能的补全.
让我们再次按下 M-<
回到buffer起始位置,然后按下 C-s
再次搜索“mail”.
现在按下 M-s o
会发现列出了所有包含“mail”的那些行.
按下 C-s
再按下 M-r
(或者 M-s r
) 可以切换到基于正则表达式的搜索.
打开一个 org-mode buffer. 不断的按下 M-TAB
直到进入概览模式(此时所有内容都被折叠起来了).
尝试搜索下一被隐藏的内容: 你会发现当光标跳到搜索的内容处时,该处的内容会自动展现开来.
退出这次搜索吧.
依然在这个 org-mode buffer中, 按下 M-TAB
折叠起所在的子树然后按下 C-s M-s i
可以只搜索可见文本的内容. 隐藏的文本不会纳入匹配.
在任何buffer中, 按下 C-s C-h b
都可以浏览搜索的选项.
那些让我相见恨晚的功能有:
- C-s M-e 可以编辑搜索字符串
- C-s M-w 可以搜索光标处的单词
- C-s M-r 切换是否进行正则匹配
- C-s M-s o 用当前搜索字符串调用occur
- C-s C-M-i 补全当前的搜索字符串