就是我编辑文本的时候,需要给一块东西打上标记,而且能带上颜色,表示这里被标记了,不会随着我去查看别的地方,这块地方的颜色就不见了,我希望这个标记能够同时打在多个地方.
但是问题是我不是搞工程的,我们使用的emacs是不允许下载package的,所以必须是emacs自带的.
(defun highlight-region (beg end)
(interactive "r")
(overlay-put (make-overlay beg end)
'face 'highlight))
选中区域以后M-x highlight-region RET
。这个的好处是随便什么区域都可以。如果是根据正则高亮,或者高亮符号,可以用highlight-regexp
和highlight-symbol-at-point
。
可以自己挨个试着玩玩,这个是 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
相关文档
对任何文本都可标记注释,而且对原文本无改变。
都不是我想要的,我更想要的功能是,我可以拖动一个部分然后他就被高亮标注了,最好还可以同时多次使用,因为我有一个不知道怎么搞出来的高亮标注,但是他一个时刻只能标注一个地方,所以很烦躁
你想要的功能写几行elisp就可以实现,但是如果要找内置现成的好像没有。 如果不能写elisp的话,应该没有办法。
可以教我写一写吗?最好不是要我背诵,而是能够理解一点点语法,要不然默不出来。
氖是搞神码的?
elisp 实现东西之后,用户用就 okay 了?为啥还要默写?
感觉回到了高中,背诵唐诗宋词的时代。
我愿意帮助楼主。
但是我不知道楼主到底想实现怎样的功能?能教我一下么?最好不要背诵,而是能理解一点点的文字,要不然真的很难理解楼主的。
稍微简化一下长难句。 Sorry
就是我编辑文本的时候
okay 什么样的文本?程序语言,自然语言,还是?
需要给一块东西打上标记
比如想彩色水笔在一张纸上,画画?
而且能带上颜色
可以的。
表示这里被标记了
annotate.el 是可以做到的。
不会随着我去查看别的地方
可以的,打开任何一个 buffer 都是可以用水彩笔标记的。关机之后,保存在本地。
这块地方的颜色就不见了
不会的。只要保存在电脑里,确保安全就好。
我希望这个标记能够同时打在多个地方
没有问题的,可以在任何文件下涂写。
symbol-overlay
是个很不错好用的插件。符合你的需要。
如果是Emacs Lisp 零基础的话教也是很难,成本很高的。自己加功能再怎么简单也算是比较高级的用法了。
如果你有一点基础的话,你大概需要
- overlay – 用来给一个范围标记样式,上面有人提到的
make-overlay
和overlay-put
。 - region – 你用鼠标选出的那个区域在Emacs里面叫做region。
- define-key – 用来把写的命令绑定在按键上,或者你需要 (4)
- hook – 在某个情况下执行特定函数
- face – 用来表达样式的概念
- 视你需要保存的持久程度,可以存入变量或写入文件。
只是以前曾经背过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)))))
课程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)))))
- 楼主明白 interactive “r” 的含义么?可以用别的字符么?
- let* 在干什么? 它和 let 的区别是?假设楼主知道了 let 的意义。
假设楼主知道了 let 的用法,那么:
- 为什么要定义4个变量? 或者说,我们在“可视化有色标记文本的时候”,我们对 emacs 下了什么样的命令。
这就带出了,Emacs 如何从内存读取 机器码,然后将识别出的文字,呈现在显示器上。
如果把目光聚焦在一个字上。 那么有色标记的意思是什么?
偷 @casouri 的代码
(defun highlight-region (beg end)
(interactive "r")
(overlay-put (make-overlay beg end)
'face 'highlight))
请问 下面两个关键词在 Emacs 中代表什么?
- face
- highlight
为什么不能使用插件?如果是不能联网,可以从可以联网的机器下载回来拷贝进去
感觉像是从事机密工作的程序员。
比较好奇的是不让用 package 的话,为啥非要用 emacs ?没有安装任何 package 的 emasc 难道有什么我不知道的好处?