转换这个untabify上保存挂机的Emacs与咖啡模式(或所有模式)工作

我发现这个片段添加到我的.emacs会,在保存,去掉标签,并将它们用空格代替(帮助我的文件播放很好地与其他人谁使用空间的球队)。

不幸的是,我的Lisp和的Emacs Lisp印章都不是很强。 这似乎是这个片段将只用于Java的主要方式 - 我怎么能得到这个与咖啡模式的工作?

(defun java-mode-untabify () (save-excursion (goto-char (point-min)) (while (re-search-forward "[ \t]+$" nil t) (delete-region (match-beginning 0) (match-end 0))) (goto-char (point-min)) (if (search-forward "\t" nil t) (untabify (1- (point)) (point-max)))) nil) (add-hook 'java-mode-hook '(lambda () (make-local-variable 'write-contents-hooks) (add-hook 'write-contents-hooks 'java-mode-untabify)))

--------------解决方案-------------

我已经按照我的.emacs对我的作品的代码:

;; untabify some modes
(setq alexott/untabify-modes '(haskell-mode emacs-lisp-mode lisp-mode scheme-mode
erlang-mode clojure-mode))
(defun alexott/untabify-hook ()
(when (member major-mode alexott/untabify-modes)
(untabify (point-min) (point-max))))
(add-hook 'before-save-hook 'alexott/untabify-hook)

你可以添加咖啡模式成模式列表中,为此untabify意愿进行钻削,通过更改列表中alexott / untabify-模式变量以下方式:

(setq alexott/untabify-modes '(haskell-mode emacs-lisp-mode lisp-mode scheme-mode
erlang-mode clojure-mode espresso-mode))

你在这里的片段将适用于任何文本文件。 有没有什么具体的Java它除了事实,它被命名为java-mode-untabify 如果您需要做的唯一一件事就是复制该add-hook电话,改变钩名espresso-mode-hook ,或任何正确的挂钩是咖啡模式。 虽然我可能会建议你改变功能的东西,反映了一个事实,即它不是Java的具体名称。 喜欢的东西cleanup-whitespace-in-buffer ,或任何你喜欢的。

(defun cleanup-whitespace-in-buffer () ; <- more appropriate name
(save-excursion
(goto-char (point-min))
(while (re-search-forward "[ \t]+$" nil t)
(delete-region (match-beginning 0) (match-end 0)))
(goto-char (point-min))
(if (search-forward "\t" nil t)
(untabify (1- (point)) (point-max))))
nil)

(add-hook 'espresso-mode-hook ; <- you can actually add this to any hook
'(lambda ()
(make-local-variable 'write-contents-hooks)
(add-hook 'write-contents-hooks 'cleanup-whitespace-in-buffer)))

警告:

我只是修改您发布的片段。 我不是一台机器上的Emacs现在,所以我没有测试任何这一点。

cleanup-whitespace-in-buffer功能,只需将删除该文件中的每一行的任何尾随空格,然后将其转换非尾随卡口插入空格。 因此,要求add-hook创建一个匿名函数(拉姆达)每当钩子运行时要调用。 该匿名函数安排cleanup-whitespace-in-buffer在缓冲区中运行它被保存之前。

我真的很喜欢亚历克斯·奥特的回答好了很多,因为它是灵活得多。 它设置了运行时所有缓冲区保存功能。 它检查以查看是否正在被保存的缓冲液具有的模式是在指定的模式列表,如果是这样,untabifies缓冲器保存前。 它不会删除尾随空白,但你可以很容易地改变(untabify (point-min) (point-max))调入(cleanup-whitespace-in-buffer)如果你想要的行为。 这使您可以轻松地添加将在保存之前已预处理的文件的其他方式。 它甚至可以,如果由于某种原因,你的模式没有与之相关联的钩。 他的方法是比我更好的建议。 我只是张贴在澄清,因为你说你觉得有点一周的Emacs Lisp的片段是如何工作的利益,这个答案。

分类:elisp的 时间:2012-01-15 人气:0
本文关键词: elisp的
分享到:

相关文章

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 0.395 (s). 9 q(s)