emacs怎么可视化有色标记文本

就是我编辑文本的时候,需要给一块东西打上标记,而且能带上颜色,表示这里被标记了,不会随着我去查看别的地方,这块地方的颜色就不见了,我希望这个标记能够同时打在多个地方.

1 个赞

但是问题是我不是搞工程的,我们使用的emacs是不允许下载package的,所以必须是emacs自带的.

(defun highlight-region (beg end)
  (interactive "r")
  (overlay-put (make-overlay beg end)
               'face 'highlight))

选中区域以后M-x highlight-region RET。这个的好处是随便什么区域都可以。如果是根据正则高亮,或者高亮符号,可以用highlight-regexphighlight-symbol-at-point

1 个赞

可以自己挨个试着玩玩,这个是 Emacs 自带的

key 		binding
M-s h . 		highlight-symbol-at-point
M-s h f 		hi-lock-find-patterns
M-s h l 		highlight-lines-matching-regexp
M-s h p 		highlight-phrase
M-s h r 		highlight-regexp
M-s h u 		unhighlight-regexp
M-s h w 		hi-lock-write-interactive-patterns

相关文档

3 个赞

对任何文本都可标记注释,而且对原文本无改变。

都不是我想要的,我更想要的功能是,我可以拖动一个部分然后他就被高亮标注了,最好还可以同时多次使用,因为我有一个不知道怎么搞出来的高亮标注,但是他一个时刻只能标注一个地方,所以很烦躁

你想要的功能写几行elisp就可以实现,但是如果要找内置现成的好像没有。 如果不能写elisp的话,应该没有办法。

可以教我写一写吗?最好不是要我背诵,而是能够理解一点点语法,要不然默不出来。

氖是搞神码的?

elisp 实现东西之后,用户用就 okay 了?为啥还要默写?

感觉回到了高中,背诵唐诗宋词的时代。

我愿意帮助楼主。

但是我不知道楼主到底想实现怎样的功能?能教我一下么?最好不要背诵,而是能理解一点点的文字,要不然真的很难理解楼主的。


稍微简化一下长难句。 Sorry

就是我编辑文本的时候

okay 什么样的文本?程序语言,自然语言,还是?

需要给一块东西打上标记

比如想彩色水笔在一张纸上,画画?

而且能带上颜色

可以的。

表示这里被标记了

annotate.el 是可以做到的。

不会随着我去查看别的地方

可以的,打开任何一个 buffer 都是可以用水彩笔标记的。关机之后,保存在本地。

这块地方的颜色就不见了

不会的。只要保存在电脑里,确保安全就好。

我希望这个标记能够同时打在多个地方

没有问题的,可以在任何文件下涂写。

symbol-overlay 是个很不错好用的插件。符合你的需要。

如果是Emacs Lisp 零基础的话教也是很难,成本很高的。自己加功能再怎么简单也算是比较高级的用法了。

如果你有一点基础的话,你大概需要

  1. overlay – 用来给一个范围标记样式,上面有人提到的make-overlayoverlay-put
  2. region – 你用鼠标选出的那个区域在Emacs里面叫做region。
  3. define-key – 用来把写的命令绑定在按键上,或者你需要 (4)
  4. hook – 在某个情况下执行特定函数
  5. face – 用来表达样式的概念
  6. 视你需要保存的持久程度,可以存入变量或写入文件。
1 个赞

只是以前曾经背过emacs的一些配置,然后有c++语言基础,您如果能够给个参考代码的话,我去简单学习一下。想问一下,就是学习时间不会很长吧,还有就是有没有好的资料,因为我需要只学习我需要学习的,因为主要精力还是需要放在c++,不然会被D死。

我不能使用插件。 。 。 。 。 。

annotate.el 这个包 5年前只有 39 行,有效行?

楼主这种特殊需求,就算是专业人士,也得花一些时间来教你。

我把这个包的原型代码,放在这里,我们可以一起来背。

(defgroup annotate nil
  "Annotate files without changing them."
  :version 0.1
  :group 'text)

(defcustom annotate-file "~/.file-annotations"
  "File where annotations are stored."
  :type 'file
  :group 'annotate)

(defcustom annotate-highlight-face 'highlight
  "Face for annotations."
  :type 'face
  :group 'annotate)

(defcustom annotate-annotation-face 'highlight
  "Face for annotations."
  :type 'face
  :group 'annotate)

(defcustom annotate-annotation-column 90
  "Where annotations appear."
  :type 'number
  :group 'annotate)

(defun annotate-create-annotation (start end &optional arg)
  "Create a new annotation for selected region."
  (interactive "r")
  (let* ((overlay-highlight (make-overlay start end))
         (eol (save-excursion (move-end-of-line nil) (point)))
         (overlay-eol (make-overlay eol eol))
         (prefix (make-string (- annotate-annotation-column (annotate-line-length)) ? )))
    (overlay-put overlay-highlight 'face annotate-highlight-face)
    (overlay-put overlay-eol 'after-string
                 (concat prefix (propertize
                                 (read-from-minibuffer "Annotation: ")
                                 'face annotate-annotation-face)))))

(defun annotate-line-length ()
  "The length of the line from beginning to end."
  (save-excursion
    (move-end-of-line nil)
    (let ((eol (point)))
      (move-beginning-of-line nil)
      (- eol (point)))))
2 个赞

课程0,理解

(defun annotate-create-annotation (start end &optional arg)
  "Create a new annotation for selected region."
  (interactive "r")
  (let* ((overlay-highlight (make-overlay start end))
         (eol (save-excursion (move-end-of-line nil) (point)))
         (overlay-eol (make-overlay eol eol))
         (prefix (make-string (- annotate-annotation-column (annotate-line-length)) ? )))
    (overlay-put overlay-highlight 'face annotate-highlight-face)
    (overlay-put overlay-eol 'after-string
                 (concat prefix (propertize
                                 (read-from-minibuffer "Annotation: ")
                                 'face annotate-annotation-face)))))
  1. 楼主明白 interactive “r” 的含义么?可以用别的字符么?
  2. let* 在干什么? 它和 let 的区别是?假设楼主知道了 let 的意义。

假设楼主知道了 let 的用法,那么:

  1. 为什么要定义4个变量? 或者说,我们在“可视化有色标记文本的时候”,我们对 emacs 下了什么样的命令。

这就带出了,Emacs 如何从内存读取 机器码,然后将识别出的文字,呈现在显示器上。

如果把目光聚焦在一个字上。 那么有色标记的意思是什么?


@casouri 的代码

(defun highlight-region (beg end)
  (interactive "r")
  (overlay-put (make-overlay beg end)
               'face 'highlight))

请问 下面两个关键词在 Emacs 中代表什么?

  • face
  • highlight
3 个赞

为什么不能使用插件?如果是不能联网,可以从可以联网的机器下载回来拷贝进去

感觉像是从事机密工作的程序员。

1 个赞

比较好奇的是不让用 package 的话,为啥非要用 emacs ?没有安装任何 package 的 emasc 难道有什么我不知道的好处?