2008-12-11 47 views
3

建立在Getting Emacs to untabify when saving certain file types (and only those file types)上,我想运行一个钩子来解开我的C++文件,当我开始修改缓冲区时。我尝试添加钩子来加载缓冲区,但是这样会使emacs启动时自动加载的所有可写入文件变得无法识别。 (对于那些想知道为什么我这么做的人,这是因为我工作的地方强制使用文件中的标签,我很高兴遵守这些标签。问题是我标记了我的文件以告诉我当行太长时,但是正则表达式匹配行中的字符数,而不是行占用多少空间。行中的4个制表符可以将它推到远远超过我的132个字符的限制,但行不会被标记。适当因此,我需要一种方法来tabify和untabify自动)如何修改缓冲区时运行Emacs钩子?

+0

似乎更好的正则表达式可以解决您的问题。 – 2008-12-12 20:20:06

回答

1

这是我加入到我的emacs文件untabify负载:

(defun untabify-buffer() 
    "Untabify current buffer" 
    (interactive) 
    (untabify (point-min) (point-max))) 

(defun untabify-hook() 
    (untabify-buffer)) 

; Add the untabify hook to any modes you want untabified on load 
(add-hook 'nxml-mode-hook 'untabify-hook) 
+0

就像我在问题中所说的那样,我不想要这样的东西,因为当emacs启动时,我经常会加载数十个文件,即使我不需要它们,它也会通过并消除它们。当我关闭emacs时,所有的缓冲区都很脏,我需要保存它们。谢谢,不过。 – user45425 2008-12-12 16:28:36

3

以一个LO确定变量“before-change-functions”。

沿着这条线也许东西(警告:代码未测试):

(add-hook 'before-change-functions 
      (lambda (&rest args) 
      (if (not (buffer-modified-p)) 
       (untabify (point-min) (point-max))))) 
0

这个答案是切向的,但可能是有用的。

软件包wide-column.el link text在光标经过给定列时更改光标颜色 - 实际上光标颜色可能因设置而异。这听起来像是一种比正则表达式代码更少侵入性的解决方案,但它可能不适合您的需求。

+0

谢谢,这是一个有趣的解决方案。我想我更喜欢标记文件的表面,这样我就可以看到线条很长而不必定位光标。尽管如此,这很整齐。我可能会用它来做其他事情。 :) – user45425 2008-12-12 16:30:31

0

和另一个切向的答案。

您提到您的正则表达式不足以说明何时满足了132个字符限制。也许是一个更好的正则表达式...

此规则表达式将与行的时候有超过132个字符,假设标签宽度4,(我觉得我得到了数学右)

"^\\(?: \\|[^ \n]\\{4\\}\\)\\{33\\}\\(.+\\)$" 

最后加括号的表达式是超过限制的字符集合。第一个加括号的表达式是shy