我在一个缓冲区中有单词列表,在另一个缓冲区中有一堆文本行。我正在寻找一个缓冲区中的选定单词必须在另一个缓冲区中突出显示。emacs 支持吗?
1 回答
2
试试org-mode。您可以将链接[[file:yourFile::yourSearchExpression]]放入 org-buffer。如果单击链接,yourFile则会搜索缓冲区访问yourSearchExpression(正则表达式)。
我使用下面的扩展。使用此扩展程序,您还可以编写[[buffer:yourBuffer::yourSearchExpression]]. 在这里,yourBuffer必须是缓冲区(不是文件)。但是,您可以事先打开感兴趣的文件。的第一个字符yourSearchExpression可以是运算符。如果是a ,+则从yourBuffer当前点位置开始向前搜索。如果是 a-则从yourBuffer当前点位置开始向后搜索。如果没有给出操作符,则从缓冲区的开头开始向前搜索缓冲区。其他运算符可以很容易地实现。
好消息是您可以轻松地在 org 文件中预先定义搜索。您有一个文件,您可以在其中组织对一个主题的搜索。您搜索的内容可以分布在多个缓冲区中。
如果您稍后需要再次搜索此类型,这将变得很方便。
我最近添加了高光。因此,如果您遇到问题。给我一个便条。
;; 从 isearch 被盗:
(defface search-highlight-face
'((((类颜色) (min-colors 88) (背景光))
;; 背景不能太暗,因为这意味着
;; 当光标在那里时,字符很难看到。
(:背景“洋红色3”:前景“lightskyblue1”))
((((类颜色)(min-colors 88)(背景深色))
(:背景“palevioletred2”:前景“brown4”))
((((class color) (min-colors 16))
(:背景“洋红色4”:前景“青色1”))
((((class color) (min-colors 8))
(:背景“洋红色4”:前景“青色1”))
(t (:inverse-video t)))
“突出显示搜索匹配的面孔。”
:group '搜索-高亮)
(defface search-highlight-other-face
'((((类颜色) (min-colors 88) (背景光))
(:背景“paleturquoise”))
((((类颜色)(min-colors 88)(背景深色))
(:背景“paleturquoise4”))
((((class color) (min-colors 16))
(:背景“绿松石3”))
((((class color) (min-colors 8))
(:背景“绿松石3”))
(t (:下划线 t)))
“面对除了当前匹配之外的懒惰突出显示。”
:group '搜索-高亮)
(需要'cl);; 寻找
(defun search-highlight (se &rest opt)
“就像带有突出显示匹配项的‘search-forward’命令组一样。
请注意,此功能只能在命令中使用,因为它是直接可见的。
当前缓冲区的窗口必须是活动的并且应该是可见的。
选项:
:back 非零:向后而不是向前搜索
:re non-nil: SE 是正则表达式
:noerror non-nil: 找不到时发出错误
:bound 搜索范围
:count 搜索多次(默认为 1)
:face 使用这张脸来突出显示
:others non-nil: 突出显示缓冲区可见区域内的其他匹配项
:recenter 在窗口中垂直居中点(在突出显示其他点之前)
"
(交互式“sSearch 表达式:”)
(搜索高亮清理);;如果之前有什么问题。
(让* (ol
(正则表达式?(当(plist-get opt :re)“-regexp”))
(cmd (intern-soft (concat "search"
(如果(plist-get opt :back)“-backward”“-forward”)
正则表达式?
)))
e)
(当 (funcall cmd se (plist-get opt :bound) (plist-get opt :noerror) (plist-get opt :count))
(setq ol (make-overlay (match-beginning 0) (match-end 0)))
(overlay-put ol 'face 'search-highlight-face))
(当 (plist-get opt :recenter) (recenter))
(如果(plist-get opt:其他)
(保存游览
(转到字符(窗口开始))
(setq e (window-end nil t))
(setq cmd (intern-soft (concat "search-forward" regexp?)))
(while (funcall cmd se et)
(除非 (and ol (= (match-beginning 0) (overlay-start ol)))
(overlay-put (make-overlay (match-beginning 0) (match-end 0))
'脸'搜索-突出显示-其他-脸)))))
(add-hook 'pre-command-hook 'search-highlight-cleanup tt)))
(defun search-highlight-cleanup ()
“删除搜索突出显示模式的突出显示。”
(交互的)
(remove-hook 'pre-command-hook 'search-highlight-cleanup t)
(删除覆盖 0(缓冲区大小)
'脸'搜索-高亮-脸)
(删除覆盖 0(缓冲区大小)
'脸'搜索-突出显示-其他-脸))
(defun org-at-buffer ()
"检查点是否在 [[buffer:BUFFER::SEARCH]]。
BUFFER 只是现有缓冲区的名称。
您可以通过 [[file:...]] 确保缓冲区存在。
::RE 是一个可选的正则表达式。
SEARCH 的第一个字符可能是一个运算符:
+从当前点开始并向前搜索。
- 从当前点开始并向后搜索。
如果缺少运算符,则从 BUFFER 的开头开始在缓冲区中搜索 RE。
"
(保存游览
(让((pt(点))
是
姓名
回覆)
(when (search-backward "[[buffer:" (line-beginning-position) 'noErr)
(前向字符)
(setq b (+ (point) (length "[buffer:")))
(前向);;实际链接
(setq e (1- (点)))
(when (looking-at "\\[") ;; 可选描述
(前向性))
(当(>=(点)pt)
(转到字符 b)
(如果(向前搜索“::” e 'noErr)
(setq
名称(缓冲区子字符串无属性 b(匹配开始 0))
re (buffer-substring-no-properties (match-end 0) e)
)
(setq name (buffer-substring-no-properties be)))
(切换到缓冲区其他窗口名称)
(当重新
(if (and (> (length re) 0) (find (aref re 0) "+-"))
(让 ((op (aref re 0))))
(setq re (子串 re 1))
(条件
((=操作?+)
(当 (= (point) (point-max))
(goto-char (point-min)))
(搜索高亮 re :re t :noerror t :others t :recenter t))
((=操作?-)
(当(=(点)(点-分))
(goto-char (point-max)))
(搜索高亮 re :back t :re t :noerror t :others t :recenter t))
(吨
(错误“意外操作”))))
(goto-char (point-min))
(搜索高亮 re :re t :noerror t :others t :recenter t)))
t)))))
(添加到列表 'org-open-at-point-functions 'org-at-buffer)
于 2013-10-25T19:12:22.443 回答