emacs下的less-mode

在淘宝的时候就调研过less,一个强大的 CSS 预处理器,但是一直没有整合到项目里。

实践才能出真知,宇宙最新、最强的东西一定要一股脑塞进mss项目里去。

less项目相关

github上的less.js项目,相关使用教程:http://lesscss.org/ (需要翻墙)

emacs下的less文件编辑

emacs下的css-mode无法满足less的嵌套对齐问题,纠结,不过强大的github应该有less-mode的实现,否则我也乘机学习下lisp整一个出来?哈,没那么简单。

运气不错,github上的emacs下less-mode插件

下载 less-mode.el 添加进emacs的配置路径,在 .emacs 添加以下配置

(require 'less-mode) 
(add-to-list 'auto-mode-alist '("\\.less$" . less-mode))

If you use smart-compile:

(add-to-list 'smart-compile-alist '(less-mode . (less-compile)))

If you use Flymake, it will work automatically.

该扩展支持:保存文件时候的自动编译

之前一直臆测,coffeescript,lesscss 服务端编译的话,每次调式都得手动执行编译命令,岂不是非常的烦?

强大的emacs,保存时自动编译可以成为解决方案之一,完全不会有开发时候的不爽呀。

例如:less/xx.less -> css/xx.css, 项目引用 css 路径下的文件,真实编辑的文件是 less 路径下对应的文件。

less-mode.el 继承的也是css-mode, 依旧有缩进的问题,elisp又不熟悉,只能简单的调整了下,不要css-mode的关键词高亮了,能对齐就好了。

改动的地方很少,

(define-derived-mode less-mode css-mode "Less" 
改为 
(define-derived-mode less-mode c-mode "Less"

并添加了2个缩进设置

(c-set-offset 'label' +)
(c-set-offset 'defun-close' /)

根据个人习惯改变了编译命令,会自动的把less文件编译并压缩到css路径

/home/yoo/music/public/less/css.less -> /home/yoo/music/public/css/css.less.css

完整的内容如下:

(require 'derived)
(require 'compile)

(defconst less-font-lock-keywords
  '(("@[^\s:;]+" . font-lock-constant-face)
    ("//.*$" . font-lock-comment-face)))

(defgroup less nil
  "Less mode"
  :prefix "less-"
  :group 'css)

(defcustom less-lessc-command "lessc --no-color"
  "Less compiler command"
  :group 'less)

(defcustom less-lessc-command-c "lessc --no-color -x"
  "Less compiler command"
  :group 'less)

(defcustom less-compile-at-save t
  "If not nil, Less buffers will be compiled on each save"
  :type 'boolean
  :group 'less)

(defcustom less-mode-hook nil
  "Hook run when entering Less mode"
  :type 'hook
  :group 'less)

(defun less-compile ()
  "Compiles the current buffer"
  (interactive)
  ;;(compile (concat less-lessc-command " " buffer-file-name))                                                                                                            
  (compile (concat less-lessc-command-c " " buffer-file-name " > " (replace-regexp-in-string "/less/" "/css/" buffer-file-name) ".css")))

(defun less-compile-maybe ()
  "Runs `less-compile' on if `less-compile-at-save' is not nil"
  (if less-compile-at-save
      (less-compile)))

(defun flymake-less-init ()
  (let* ((temp-file (flymake-init-create-temp-buffer-copy
                     'flymake-create-temp-inplace))
         (local-file (file-relative-name
                      temp-file
                      (file-name-directory buffer-file-name))))
    (list "lessc" (list "--no-color" local-file))))

(when (featurep 'flymake)
  (add-to-list 'flymake-allowed-file-name-masks
               '("\\.less$" flymake-less-init))
  (add-to-list 'flymake-err-line-patterns
               '("! \\(.*\\): on line \\([0-9]+\\): \\(.*\\)"
                 nil 2 nil 3))
  (add-to-list 'flymake-err-line-patterns
               '("! \\(.*\\): \\(.*\\)"
                 nil nil nil 2)))

(define-derived-mode less-mode c-mode "Less"
  "Major mode for editing Less files, http://lesscss.org"
  (run-hooks 'css-mode-hook)
  (c-set-offset 'label' +)
  (c-set-offset 'defun-close' /)
  (when (featurep 'flymake) (flymake-mode t))
  (font-lock-add-keywords nil less-font-lock-keywords)
  (add-hook 'after-save-hook 'less-compile-maybe nil t))

(provide 'less-mode)
;;; less-mode.el ends here

[转帖]在Windows下使用Emacs

Windows下使用Emacs
在Windows下使用Emacs

安装Emacs

安装auctex

安装mule-gbk

安装aspell

安装Mew

用gnuserv给Emacs插上翅膀

安装Emacs
1.     到
http://nqmacs.sourceforge.net
下载emacs的Windows编译版本,包括两个文件 emacs-21.3.50.1-20050130c-w32.zipemacs-21.3.50.1-20050130-lisp.zip
2.     将 emacs-21.3.50.1-20050130c-w32.zip 解压缩到想要放置的目录,这里为 D:\Program Reserved\emacs-21.3.50.1-20050130c-w32
3.     将 emacs-21.3.50.1-20050130-lisp.zip 也解压缩在这个目录,然后设置环境变量
4.
HOME=D:\Program Reserved\emacs-21.3.50.1-20050130c-w32
这样在以后 .emacs.d 目录和 .emacs 文件就都在 $HOME 目录下面了,但是这个方法并不好,因为设置 $HOME 会影响 CygwinMSYS 等很多东西,所以最好的方法是在注册表中设置 HKEY_LOCAL_MACHINE\SOFTWARE\GNU\Emacs\HOME=%emacs_dir%
5.     需要自己添加的el文件放在 D:\Program Reserved\emacs-21.3.50.1-20050130c-w32\site-lisp 里面即可
安装auctex
1.     到
http://www.gnu.org/software/auctex/
下载auctex,然后解压到任意目录,不过不要解压到 $HOME 目录下面,这里解压缩到 D:\auctex
2.     然后可以根据 INSTALL.windows 这个文件进行安装,用cygwin安装的步骤如下:
3.                 $cd d: (或者$cd /cygdrive/d)
4.                 $cd auctex
5.                 $./configure –prefix=d:/”Program Reserved”/emacs-21.3.50.1-20050130c-w32
6.
–with-emacs=d:/”Program Reserved”/emacs-21.3.50.1-20050130c-w32/bin/emacs.exe
7.                 $make
8.                 $make install
(注意上面对于有空格的目录要加双引号,同时用/而不是\,用d:而不是/cygdrive/d)
这样,可以在 $HOME\site-lisp 目录下面看到生成了 auctex 目录,同时在 $HOME 目录下面也生成了一个 var 目录
9.     在 $HOME\.emacs 文件中添加
10.            (require ‘tex-mik)
11.            (setq TeX-electric-escape t)
这样就可以正常使用auctex了
安装mule-gbk
安装mule-gbk后可以显示更多的汉字,比如朱镕基的“镕”,如果不用mule-gbk是无法正确显示的
1.     到
http://mule-gbk.sourceforge.net/
下载mule-gbk,然后解压到任意目录,不过不要解压到 $HOME 目录下面,这里解压缩到 D:\mule-gbk-0.1.2004080701 ,然后仿照auctex的安装方法即可,用cygwin安装的步骤如下:
2.                 $cd d: (或者$cd /cygdrive/d)
3.                 $cd mule-gbk-0.1.2004080701
4.                 $./configure
5.                 $make
6.                 $make lispdir=d:/”Program\ Reserved”/emacs-21.3.50.1-20050130c-w32/site-lisp install
(注意上面和auctex不同,有空格的目录名空格前要加入一个\
最后一条命令中, lispdir 指定的是el文件安装的目录
7.     现在在 .emacs 中加入
8.                 (setq w32-charset-info-alist
9.
(cons ‘(“gbk” w32-charset-gb2312 . 936) w32-charset-info-alist))
10.            (set-w32-system-coding-system ‘chinese-gbk)
11.            (set-selection-coding-system ‘chinese-gbk)
12.            (set-keyboard-coding-system ‘chinese-gbk)
13.            (set-language-environment ‘chinese-gbk)
14.            (setq locale-coding-system ‘chinese-gbk)
15.            (setq current-language-environment “Chinese-GBK”)
呵呵,中文问题解决了
安装aspell
1.     到
http://aspell.net/win32/
下载Windows下的aspell安装程序和词典,这里下载的是 Aspell-0-50-3-3-Setup.exeAspell-en-0.50-2-3.exe
2.     安装即可,这里安装到 D:\Program Reserved\Aspell
3.     设置环境变量,将 D:\Program Reserved\Aspell\bin 加入到 $Path
4.     到
http://kdstevens.com/~stevens/ispell-page.html
下载最新的 ispell.el ,这里下载的是 ispell.el-3.6 ,将其改名为 ispell.el 放到 $HOME\site-lisp 目录下
5.     在 .emacs 中加入
6.                 (setq-default ispell-program-name “aspell”)
7.                 (setq-default ispell-local-dictionary “american”)
8.                 (global-set-key (kbd “”) ‘ispell-complete-word)
这样就可以使用拼写检查功能了,但是绑定到F8上的complete-word命令还是无法使用,这个需要解决
安装Mew
1.     到
http://www.mew.org/Win32/
下载Mew的Windows版本这里下载的是Mew 4.2,文件为 MEW42W0.ZIP
2.     将 MEW42W0.ZIP 解压,这里解压到 E:\Download\Temp\MEW42W0\mew-4.2
3.     安装前需要设置好两个环境变量:一个是 $HOME 变量,当然这在安装emacs的时候已经设置好了,另一个是 $TZ 变量,这个是时区,设置为 JST-8
4.     注意emacs在Windows下需要执行 $HOME\bin\addpm.exe 来进行一下安装,否则Mew会认为没有安装emacs,然后在cygwin下进行编译:
5.                 $cd e:
6.                 $cd Download/Temp/MEW42W0/mew-4.2/
7.                 $./configure
8.                 $make
9.     在命令行下执行
10.            >mew
然后就根据提示来安装吧
11.        注意我安装完成之后发现mew所用的图片都没有安装,将解压出来的mew-4.2目下的 etc 目录复制到 D:\Program Reserved\emacs-21.3.50.1-20050130c-w32\site-lisp\mew\ 就可以了
12.        注意mew中的邮件默认是utf-8编码的,所以需要在mule-gbk的环境下使用utf-8支持,具体看一下 mule-gbk-0.1.2004080701.tar.gz 中的 README.unicode ,具体方法为在在 .emacs 文件中添加
13.            ;; Unicode support, for Emacs CVS (21.3.50) only
14.            (when (fboundp ‘utf-translate-cjk-mode)
15.              ;; Load modified utf-translate-cjk-mode
16.              (require ‘gbk-utf-mode)
17.              ;; Turn on utf-translate-cjk-mode
18.              (utf-translate-cjk-mode 1)
19.              ;; Setup X selection for unicode encoding
20.              (setq x-select-request-type ‘(UTF8_STRING COMPOUND_TEXT TEXT STRING)))
这样,就可以存取中文Unicode编码的文件了,具体使用方法是:
C-x RET f utf-8 RET
将当前缓冲区的编码改为utf-8然后保存
C-x RET c utf-8 RET C-x C-s filename RET
在保存时转换文件格式
C-x RET r utf-8 RET
用这个命令重新以utf-8编码加载文件
21.        mew的设置和使用请看
这里

用gnuserv给Emacs插上翅膀
通常情况下,用Emacs编辑文件需要先启动Emacs,然后C-x C-f,再输入文件的路径,这是很麻烦的,尤其对于用惯了图形界面的人更是不便,这个问题可以用gnuserv解决,
这里
是Windows下编译好的gnuserv。
gnuserv的安装非常简单,将上面压缩包中的 gnuserv.el 放到 $HOME/site-lisp 目录下,再把release文件夹下的几个可执行文件放到 $HOME/bin 目录下,然后在.emacs中加入:
(require ‘gnuserv)
(gnuserv-start)
这样就可以用 gnuclientw.exe 打开文件了,再建立一个 gnuclientw.exe 的快捷方式放到“Documents and Settings\username\SendTo”目录下,就可以用右键的“发送到”菜单把文件传输到Emacs中编辑了。
gnuclientw.exe 默认是用一个新的frame打开文件,在.emacs中添加下面的命令可以设置在原来的frame中打开文件:
;; 在当前frame打开
(setq gnuserv-frame (selected-frame))
;; 打开后让emacs跳到前面来
(setenv “GNUSERV_SHOW_EMACS” “1”)
如果你喜欢在新的frame中打开文件,绑定下面几个控制frame的函数,操作frame会简单一些:
;; 关闭一个frame,绑定到 C-F4
(global-set-key [(control f4)] ‘delete-frame)
;; 在两个frame中切换
(global-set-key [(control tab)] ‘other-frame)
(global-set-key [(control shift tab)] ‘(lambda ()
(interactive)
(other-frame -1)))

本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u1/37510/showart_302322.html

好像没那么复杂,就是.emacs新手总是不知道在哪。。还是linux稳健