`

Emacs 中的查找

    博客分类:
  • php
 
阅读更多
原文地址:http://emacser.com/ann77/Emacs/EmacsSearch.html




Emacs 中的查找
最基本的东西

C-s 开始正向查找
C-r 开始方向查找
这两个命令进入了查找模式,在 Emacs 中的术语叫做 Incremental Search , 也就是在你输入要 查找的字符的时候,同时高亮显示找到的部分。

在查找模式下的一些操作

下面的操作都是先按 C-s 或者 C-r 后, 进入 Incremental Search Mode 之后的操作。

C-r , C-s , 分别是向前查找和向后查找当前输入的内容。
如果当前内容是空的,也就是说你连续两次输入 C-s ,那么就是 “查找下一个 (Find next)”的 操作。第一次是C-s 把你带入了 Incremental Search Mode , 第二次的 C-s 表示查找上一次查 过的东西。 C-r 类似,只不过方向相反。

C-w 查找光标除所在的单词
例如, 你可以输入 C-r 然后马上输入 C-w , 光标所在位置的单词就自动变成了要查找的内容。

多次输入 C-w 后面的单词就会一个一个 的变成了查找内容一部分。

C-w 还可以和上面介绍的 C-s C-r 配合使用。C-s 进入 Incremental Search Mode. 然后输入 void f 然后光标会停留在一个 void f 的单词上,也许是 void far ,然后用 C-s 或者 C-r 找 到某个 void f 的地方,然后 C-w 就可以把 f 后面的单词补全了。

C-y 把光标所在位置到行尾的部分作为查找内容
和 C-w 类似,只不过输入的不是一个单词, 而是整整一行。

M-y 把 kill ring 中的东西输入为当前要查找的内容
M-c 切换大小写敏感。
M-r 切换是普通查找还是正则表达式查找。
M-e 编辑要查找的内容
Incremental Search 会随着用户的输入不断的改变光标的位置,有的时候很讨厌,那么就可以 M-e 编辑要查找的内容,然后按 Enter 回到 Incremetal Search 。

M-n M-p 浏览查找历史纪录
可以查找以前 查找过的内容。

C-q C-j 查找多行文字。
如果你要的查找的内容是多行文字,也就是说,查找内容中含有换行字符 C-j 但是, Enter 键又 作为结束查找的操作,一按 Enter 就退出了查找模式了。那么 C-q C-j 可以解决这个问题。 可 以查看 如何输入特殊的控制字符 。

用 Nonincremental Search 查找

如果不习惯 Incremetal Search 的方式,那么可以 C-s <RET> ,也就是按了 C-s 之后,马上按 一个回车,就用 Nonincremental Search 的方式查找,这种查找方式和普通的编辑器几乎一样。

使用 moccur 在所有打开的文件内查找

本来 M-x occur 可以在一个 buffer 的查找某一个正则表达式。 moccur 提供更加强大 的功能。安装了 moccur 之后 ,如果进入 incremetal 查找功能,除了上面介绍的一些 功能,有多了两个新的功能。下面的操作都是先按 C-s 或者 C-r 后 进入 Incremental Search Mode 之后的操作。

M-o, 小写的 o , 列出来当前 buffer 内的所有查找内容
M-O, 大写的 O , 列出来所有打开的 buffer 中出现的查找内容。
安装 moccur 的方法。下载 color-moccur.el, 然后按照文件头的提示或者参考 Emacs 安装一个扩展包的方法

在多个文件中查找

find-dired

运行外部命令 find , 产生文件列表,然后进入 dired 模式。

find-grep-dired

运行外部命令 find,用 grep 过滤文件, ls 产生目录列表,然后进入 dired 模式,这样 列出所有包含某些字符的文件列表。可以使用 dired-do-query-replace-regexp 在文件列 表中查找并替换。可以递归所有子目录。可以用各种条件过滤文件,详细可以查看 find 命 令的帮助。

grep

在当前目录中查找指定的 regexp 。

grep-find

运行 find , grep ,然后产生类似于 compile 的结果,可以查看哪些文件在什么地方包含 了匹配了指定的 regexp 。用 C-x ` 浏览结果。可以递归所有子目录。,详细可以查看 find 命令的帮助。

dired-do-query-replace-regexp

在任何 dired 模式下,对于所有带有标记的文件进行查找替换。

替换

在 transient mode 下,如果 region 是激活状态下,那么就调用 query-replace-selection , 这个函数和 query-replace 几乎完全一样,不同的是, query-replace-selection 用当前选择的 region 作为被替换的部分,而不是等用户输入。

(defun query-replace-selection (to-string &optional delimited start end)
  "query reqlace the current selection in transient mark mode."
  (interactive (list
                (read-from-minibuffer (format "Query replace %s with: "
                                              (buffer-substring (point) (mark)))
                                      nil nil nil
                                      query-replace-to-history-variable
                                      (buffer-substring (point) (mark))
                                      t)
                nil nil nil
                ))
  (perform-replace (buffer-substring (point) (mark)) to-string t nil delimited nil nil start end))
(wcy-define-2bind-transient-mode
wcy-query-replace-or-query-replace-selection
'query-replace-selection
'query-replace)
(global-set-key (kbd "M-%") 'wcy-query-replace-or-query-replace-selection)

wcy-define-2bind-transient-mode 的定义参见 其他编辑技巧 中的 C-w 部分。

;; 在 C-s 进入 incremental search 的时候, 按 M-i , 替换当前查找内容
(define-key isearch-mode-map (kbd "M-i") 'isearch-query-replace-current)
(defun isearch-query-replace-current ()
  "replace current searching string."
  (interactive)
  (let ((case-fold-search isearch-case-fold-search)
        (from-string isearch-string))
    (if (not isearch-success)
        (message "search string not found")
      (progn
       (isearch-exit)
       (goto-char (min (point) isearch-other-end)))
      ;;(isearch-abort)
      (perform-replace
       from-string
       (read-from-minibuffer (format "Query replace %s with: "
                                     from-string)
                             from-string nil nil
                             query-replace-to-history-variable
                             from-string
                             t)
       t ; query flag
       isearch-regexp
       nil))))
;; 进入 incremental search mode 之后,有些命令可以根据光标所在位置补全要查找内容,
;; 例如 C-w 可以补全一个词。但是如果按多了 C-w 就不能回退了,而且不能精确定位,
;; 下面的键绑定重新定义了一些常用的光标移动命令,根据光标移动,自动补齐查找内容,
;; 例如 C-f 自动补齐光标处的一个字符。
(define-key isearch-mode-map (kbd "C-e") 'isearch-move-point)
(define-key isearch-mode-map (kbd "C-a") 'isearch-move-point)
(define-key isearch-mode-map (kbd "M-e") 'isearch-move-point)
(define-key isearch-mode-map (kbd "M-a") 'isearch-move-point)
(define-key isearch-mode-map (kbd "C-M-e") 'isearch-move-point)
(define-key isearch-mode-map (kbd "C-M-a") 'isearch-move-point)
(define-key isearch-mode-map (kbd "C-f") 'isearch-move-point)
(define-key isearch-mode-map (kbd "C-b") 'isearch-move-point)
(define-key isearch-mode-map (kbd "M-f") 'isearch-move-point)
(define-key isearch-mode-map (kbd "M-b") 'isearch-move-point)
(define-key isearch-mode-map (kbd "C-M-f") 'isearch-move-point)
(define-key isearch-mode-map (kbd "C-M-b") 'isearch-move-point)
(defun isearch-move-point ()
  (interactive)
  (when isearch-success
    (save-excursion
      (let ((overriding-terminal-local-map nil)
            (old-point (or isearch-other-end (point))))
        (call-interactively (key-binding (this-command-keys)))
        (setq isearch-string (buffer-substring-no-properties  old-point
                                                              (point))
              isearch-message
              (mapconcat 'isearch-text-char-description
                         isearch-string "")
              ;; Don't move cursor in reverse search.
              isearch-forward (cond
                               ((< old-point (point)) t)
                               ((> old-point (point)) nil)
                               ((= old-point (point)) isearch-forward))
              )))
    (isearch-search-and-update)))
分享到:
评论

相关推荐

    emacs 快速配置脚本包

    快速搭建的主要思想是采用执行注册表脚本 设定 emacs 查找配置文件的路径为 c: emacs home emacs 同时又在此文件中定位到我们现在刚下载的路径 及更改 home 目录的方式 包含最基本的配置 颜色 字体等 脚本以及常用的...

    用emacs进行批量查找替换的例子

    NULL 博文链接:https://weiyongqing.iteye.com/blog/1779440

    王垠 王纯叶的emacs配置

    王垠 王纯叶的emacs配置,打包成chm了, 方便查找些emacs技巧

    Emacs插件_Projectile

    一个Emacs插件,支持快速定位到项目文件,支持项目全文查找。

    linux-一个emacs插件用于从当前目录向上查找最近的Makefile并执行make命令

    一个emacs插件用于从当前目录向上查找最近的Makefile,并执行make命令

    fiplr:[已弃用]项目包中的Emacs模糊查找

    Fiplr-在Emacs的项目中查找 该项目已被弃用,转而使用 Fiplr(发音为FIP-ler,如在Project中的Find所示)是一个Emacs软件包,可让您使用模糊匹配在复杂的目录树中查找和打开文件。 一个关键的设计目标是使Fiplr真正...

    RMS 的 Emacs 设计论文两篇

    RMS 的 Emacs 设计论文两篇,可以直接从官网上查找到

    emacs配置文件和基本插件

    emacs的配置文件,适用于emacs22.x和23.x,是我在网上找的然后整理的,配合mingw使用的,压缩包里的内容要放在根目录下才能好用,查找根目录的方法是:先按C-x再按C-f然后输入~符号再回车就会看到根目录了.

    Emacs安装包,直接解压就可以用了

    emacs安装包,下载直接解压就可以用,自己上网查找使用教程

    Racer对Emacs的支持—自动完成(另请参阅公司和自动完成)-Rust开发

    目录Racer for Emacs完成查找定义描述Emacs的功能和类型Racer这是Racer的官方Emacs软件包。 目录Racer for Emacs Completion查找定义描述功能和类型安装测试您的设置测试Completion racer.el支持变量,函数和模块的...

    devdocs-lookup:在devdocs.io上快速查找Emacs API

    Emacs devdocs查找 该软件包提供了一个交互式功能devdocs-lookup ,通过浏览器快速跳转至上特定API的文档。 它的工作方式类似于 ,使用本地配置的completing-read选择条目。 当前支持的“主题”与devdocs.io相同。 ...

    Matlab代码verilog-emacs:ICer的emacs配置

    在.Xresources中设置字体,它比在.emacs中设置字体快 箱/深度一个Perl脚本,用于通过root.txt查找项目根目录,因此您应该新建一个root.txt bin / ripgrep 如果使用的是MacOS,请使用命令brew install ripgrep进行...

    使用模拟 退火 查找“最佳”编译器选项_Emacs Lisp_代码_下载

    使用模拟 退火 查找“最佳”编译器选项_Emacs Lisp_代码_下载

    transient-emacs:Atom编辑器VS代码的Emacs模式

    从杀死环历史记录中选择抽出文本 键绑定 有关详细的键绑定,请参见keymaps / transient-emacs.cson(用于atom)或package.json(用于代码)。 按键绑定 Atom编辑器命令 VS代码命令 档案 ctrl-x ctrl-b 模糊查找器...

    使用Emacs开发iPhone应用程序的教程--千锋培训

    文档介绍了前言,环境设定,设定 XCode 的外部编辑器,macs 中管理 Objective-C 文件,编译与执行,查找帮助,扩展设置,打开头文件,补全,安装,设 置,安装,设 置,Text macros(模板),安 装,设 置,自动插入...

    pdf-mode.el:在 Emacs 中编辑原始 PDF 文件的主要模式

    pdf-mode.el - 在 Emacs 中编辑原始 PDF 文件pdf-mode是在 Emacs 中编辑 PDF 文件的主要模式。 它并不完美,但它应该是一个很好的起点。 它可能对正在生成 PDF 的可怜人有用; 绝对对我有用。 特征: PDF实体解析器...

    kaarvok:从 emacs 中的模板生成目录结构

    将查找以.etpl结尾的文件以查找可能的替换,其他文件将直接复制。 文件和目录名称可以只是或包含变量,并将被扩展。 变量由kaarvok-template-var-delimiter (默认为“$!”) kaarvok-template-var-delimiter 。 ...

    emacs.d:快速,强大的Emacs设置

    您可以使用最少的设置在Windows上查找&grep文件在Linux / Windows / Cygwin / macOS / WSL(适用于Linux的Windows子系统)上用Emacs 26.3、27.1、28测试尊重Emacs Vanilla键绑定和目录布局可在使用,并在表中的...

    dotemacs:我的 .emacs 文件

    Joe Schafer 的 Emacs 自定义设置一些用于初始化、填充和正确放置存储库的命令。...-batch --eval '(byte-compile-file "js2-mode.el")'结构初始化文件init.el是 Emacs 默认查找此文件 ( ~/.emacs.d/init.el ) 的~/.e

    atom-emacs-mode

    要在Atom启动时自动启用emacs-mode,请将以下代码放入您的初始化脚本中: atom . packages . activatePackage ' emacs-mode ' 特征 常规Emacs密钥绑定(请参见下文) 杀死戒指 缓冲区查找器(Cx b),文件查找器...

Global site tag (gtag.js) - Google Analytics