发现一个CSS文件编辑利器-rainbow-mode 。这个el可以使得css文件,在颜色代码显示颜色。非常直观
不过,每次启动emacs后手动m-x rainbow-mode才能打开此模式。又什么方法,可以每次启动emacs后,自动打开改模式?
我参考了http://ar.newsmth.net/thread-4c0e86d44f946a.html 这个帖子的方法,进行配置。
如下是帖子内容:
看了一下rainbow-mode.el
我觉得应该是autoload搞的,你看看下面这段话,
是GNU Emacs Lisp Reference Manual(GELRM)里关于autoload的一段叙述:
The autoload facility allows you to make a function or macro
known in Lisp, but put off loading the file that defines it. The
first call to the function automatically reads the proper file to
install the real definition and other associated code, then runs
the real definition as if it had been loaded all along.
我在rainbow-mode的基础上,定义了一个global-rainbow-mode,
然后直接打开这个global-rainbow-mode就可以在每个buffer都自动打开
rainbow-mode,你把下面这段话放到.emacs里去吧
;; -------------------------------------------------------------------
;; 配置 rainbow-mode
;; -------------------------------------------------------------------
(require 'rainbow-mode)
;; -------------------------------------------------------------------
;; 定义一个全局的 rainbow-mode
;; -------------------------------------------------------------------
(define-globalized-minor-mode global-rainbow-mode
rainbow-mode rainbow-turn-on
:initialize 'custom-initialize-delay
:init-value (not (or noninteractive emacs-basic-display))
:group 'rainbow
:version "24")
;; -------------------------------------------------------------------
;; 打开 global-rainbow-mode
;; -------------------------------------------------------------------
(global-rainbow-mode)
可是贴上以上文件,放到emacs配置文件中,提示如下错误:
Warning (initialization): An error occurred while loading `/home/xxxx/.emacs':
Symbol's value as variable is void: global-rainbow-mode
To ensure normal operation, you should investigate and remove the
cause of the error in your initialization file. Start Emacs with
the `--debug-init' option to view a complete error backtrace.
这个问题,有那个知道怎么解决吗?
emacs CSS文件编辑利器-rainbow-mode(直观显示css颜色)
-
- 帖子: 237
- 注册时间: 2011-10-11 10:16
-
- 帖子: 750
- 注册时间: 2006-03-19 11:39
Re: emacs CSS文件编辑利器-rainbow-mode(直观显示css颜色)
试试
[lisp]
(add-to-list 'auto-mode-alist '("\\.css\\'" . rainbow-mode))
[/lisp]
[lisp]
(add-to-list 'auto-mode-alist '("\\.css\\'" . rainbow-mode))
[/lisp]
-
- 帖子: 237
- 注册时间: 2011-10-11 10:16
Re: emacs CSS文件编辑利器-rainbow-mode(直观显示css颜色)
kardinal 写了:试试
[lisp]
(add-to-list 'auto-mode-alist '("\\.css\\'" . rainbow-mode))
[/lisp]
非常感谢,,你的代码可用,解决我一个很长时间没有解决的问题。
用emacs 写php和html,太方便了。。。。
-
- 帖子: 237
- 注册时间: 2011-10-11 10:16
Re: emacs CSS文件编辑利器-rainbow-mode(直观显示css颜色)
(add-to-list 'auto-mode-alist '("\\.css\\'" . rainbow-mode))-------------后来才知道,这种方法不是最好的,有时失效,需要手动,用autoload才是最完美的。
-
- 帖子: 750
- 注册时间: 2006-03-19 11:39
Re: emacs CSS文件编辑利器-rainbow-mode(直观显示css颜色)
alist 中有相同的键时要注意顺序问题
autoload 实际上属于惰性加载的范畴,它是一种特殊对象,类似函数、列表之类,和你要解决的问题应该没有关系
我觉得你需要的是 find-file-hook,尽管从字面上,autoload 似乎意思也差不多
实际上 'auto-mode-alist 应该和某个 hook 有关,比如 find-file-hook(应该是这个名字,我很挺长时间没用 emacs 了,你可以自己研究一下),如果 'auto-mode-alist 的行为不符合预期或者你不能控制,你可以试试修改 find-file-hook
autoload 实际上属于惰性加载的范畴,它是一种特殊对象,类似函数、列表之类,和你要解决的问题应该没有关系
我觉得你需要的是 find-file-hook,尽管从字面上,autoload 似乎意思也差不多
实际上 'auto-mode-alist 应该和某个 hook 有关,比如 find-file-hook(应该是这个名字,我很挺长时间没用 emacs 了,你可以自己研究一下),如果 'auto-mode-alist 的行为不符合预期或者你不能控制,你可以试试修改 find-file-hook
-
- 帖子: 237
- 注册时间: 2011-10-11 10:16
Re: emacs CSS文件编辑利器-rainbow-mode(直观显示css颜色)
谢谢回复。。你对emacs理解得很深刻。kardinal 写了:alist 中有相同的键时要注意顺序问题
autoload 实际上属于惰性加载的范畴,它是一种特殊对象,类似函数、列表之类,和你要解决的问题应该没有关系
我觉得你需要的是 find-file-hook,尽管从字面上,autoload 似乎意思也差不多
实际上 'auto-mode-alist 应该和某个 hook 有关,比如 find-file-hook(应该是这个名字,我很挺长时间没用 emacs 了,你可以自己研究一下),如果 'auto-mode-alist 的行为不符合预期或者你不能控制,你可以试试修改 find-file-hook
(add-to-list 'auto-mode-alist '("\\.css\\'" . rainbow-mode))----其实是可以解决的,不过在css-mode下面,我试过有点问题,有时总不能自动加载。
应该就是你所说的“注意顺序问题”。
“我觉得你需要的是 find-file-hook,尽管从字面上,autoload 似乎意思也差不多”-----你提供的方法,也是正常的。
我发现用如下代码,就非常完美。css 可以自动加载,即使html 里面含有css的代码,也可以自动加载。
(dolist (hook '(css-mode-hook html-mode-hook sass-mode-hook))
(add-hook hook 'rainbow-turn-on))
这应该也是和你的方法差不多。
-
- 帖子: 750
- 注册时间: 2006-03-19 11:39
Re: emacs CSS文件编辑利器-rainbow-mode(直观显示css颜色)
你提到的这些,涉及到主模式和辅模式的问题
find-file-hook 通过 auto-mode-alist 确定打开文件后使用的主模式
而你后面贴的是在确定并开启 html sass 等主模式后使用的辅模式
其实类似代码是比较常用的,推荐一个实用函数
[lisp]
(defun concat-symbol (&rest lst)
(intern (apply 'concat (mapcar (lambda(x)(if (symbolp x) (symbol-name x) x)) lst))))
[/lisp]
你的代码可以写成这样
[lisp]
(dolist (hook
'(css
html
sass
......))
(add-hook
(concat-symbol hook '-mode-hook)
'rainbow-turn-on))
[/lisp]
find-file-hook 通过 auto-mode-alist 确定打开文件后使用的主模式
而你后面贴的是在确定并开启 html sass 等主模式后使用的辅模式
其实类似代码是比较常用的,推荐一个实用函数
[lisp]
(defun concat-symbol (&rest lst)
(intern (apply 'concat (mapcar (lambda(x)(if (symbolp x) (symbol-name x) x)) lst))))
[/lisp]
你的代码可以写成这样
[lisp]
(dolist (hook
'(css
html
sass
......))
(add-hook
(concat-symbol hook '-mode-hook)
'rainbow-turn-on))
[/lisp]
- jobinson99
- 帖子: 1169
- 注册时间: 2007-04-28 15:14
- 系统: NixOS+虚拟机各种系统
- 联系:
Re: emacs CSS文件编辑利器-rainbow-mode(直观显示css颜色)
我以前都是自己手写实现这个功能,这个不错,比较全面
另外,有人把中文的颜色名也这么处理么?比如白=white=#ffffff
我是这么配置的:
另外,有人把中文的颜色名也这么处理么?比如白=white=#ffffff
我是这么配置的:
代码: 全选
(require 'rainbow-mode)
(dolist (hook '(css-mode-hook
html-mode-hook
python-mode-hook
c++-mode-hook
lisp-mode-hook))
(add-hook hook (lambda () (rainbow-mode 1))))
黑色的不是眼睛,而是眼圈
关注和实现科技领域未来3年内有大规模普及潜力、能改善穷人生活品质的技术/应用。
NixOS + lxqt + 无人生产线 + 无人农场 (已发明全套山地农业机械 + 线性喷洒系统,成片农业采收系统)+ 随身设备,柔性电路,冷热双调衣……
关注和实现科技领域未来3年内有大规模普及潜力、能改善穷人生活品质的技术/应用。
NixOS + lxqt + 无人生产线 + 无人农场 (已发明全套山地农业机械 + 线性喷洒系统,成片农业采收系统)+ 随身设备,柔性电路,冷热双调衣……