我需要突出显示emacs的工具,以便在使用它时标记文件中的某些行。
它应该像 M-s h l 一样,但应该基于行号而不是正则表达式。我想突出显示当前行,但hl-line-mode
不合适,因为每次按每个行上的特定键时,我都需要突出显示多行。
答案 0 :(得分:13)
我刚刚写了以下内容:
(defun find-overlays-specifying (prop pos)
(let ((overlays (overlays-at pos))
found)
(while overlays
(let ((overlay (car overlays)))
(if (overlay-get overlay prop)
(setq found (cons overlay found))))
(setq overlays (cdr overlays)))
found))
(defun highlight-or-dehighlight-line ()
(interactive)
(if (find-overlays-specifying
'line-highlight-overlay-marker
(line-beginning-position))
(remove-overlays (line-beginning-position) (+ 1 (line-end-position)))
(let ((overlay-highlight (make-overlay
(line-beginning-position)
(+ 1 (line-end-position)))))
(overlay-put overlay-highlight 'face '(:background "lightgreen"))
(overlay-put overlay-highlight 'line-highlight-overlay-marker t))))
(global-set-key [f8] 'highlight-or-dehighlight-line)
(此处查找 - 覆盖 - 指定来自manual page)
它将突出显示当前行,当再次使用时,它将删除它。
也许以下内容也很有用:从缓冲区中移除所有突出显示(可能很危险,如果突出显示重要内容,您可能不需要它)
(defun remove-all-highlight ()
(interactive)
(remove-overlays (point-min) (point-max))
)
(global-set-key [f9] 'remove-all-highlight)
答案 1 :(得分:12)
您可以使用bm.el。您可以从MELPA安装bm.el。
bm.el提供bm-toggle
突出显示和取消当前行的突出显示。
bm.el还提供bm-bookmark-regexp
,仅突出显示匹配的行。
您可以在bm-previous
和bm-next
以下是bm.el
的示例配置(require 'bm)
(global-set-key (kbd "<f5>") 'bm-toggle)
(global-set-key (kbd "<f6>") 'bm-previous)
(global-set-key (kbd "<f7>") 'bm-next)
(global-set-key (kbd "<f8>") 'bm-bookmark-regexp)
答案 2 :(得分:4)
Bookmark+做你要求的。使用C-x p RET
(默认情况下)在点设置书签。您可以为这些书签配置所需的highlighting种类。这类似于bm.el
提供的(syohex的答案),但更灵活。