修改缓冲区时如何运行Emacs挂钩? 当我开始修改缓冲区时,我想运行一个钩子来取消我的C++文件。我尝试在加载时添加钩子来解除缓冲区的绑定,但是它解除了所有在emacs启动时自动加载的可写文件的绑定

修改缓冲区时如何运行Emacs挂钩? 当我开始修改缓冲区时,我想运行一个钩子来取消我的C++文件。我尝试在加载时添加钩子来解除缓冲区的绑定,但是它解除了所有在emacs启动时自动加载的可写文件的绑定,emacs,tabs,elisp,buffer,Emacs,Tabs,Elisp,Buffer,(对于那些想知道我为什么要这么做的人来说,这是因为我工作的地方强制要求在文件中使用制表符,我很乐意遵守。问题是我标记文件,告诉我什么时候行太长,但regexp匹配的是行中的字符数,而不是行占用的空间。一行中的4个制表符可以将它推到m以上y限制为132个字符,但该行不会被适当标记。因此,我需要一种方法来自动禁用和取消禁用。)以下是我添加到emacs文件中以在加载时取消禁用的内容: (defun untabify-buffer () "Untabify current buffer" (in

(对于那些想知道我为什么要这么做的人来说,这是因为我工作的地方强制要求在文件中使用制表符,我很乐意遵守。问题是我标记文件,告诉我什么时候行太长,但regexp匹配的是行中的字符数,而不是行占用的空间。一行中的4个制表符可以将它推到m以上y限制为132个字符,但该行不会被适当标记。因此,我需要一种方法来自动禁用和取消禁用。)

以下是我添加到emacs文件中以在加载时取消禁用的内容:

(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)

查看变量“更改函数之前”

可能是这样的(警告:代码未测试):


这个答案无关紧要,但可能有用


当光标经过给定的列时,包wide-column.el会更改光标颜色,实际上,光标颜色可能会根据设置而变化。这听起来不像正则表达式代码那样具有侵入性,但它可能不适合您的需要。

和一个不同的切向答案

您提到您的regexp不够好,无法判断何时达到了132个字符的限制。也许是更好的regexp

假设制表符的宽度为4,这个regexp将在超过132个字符时匹配一行


最后一个括号内的表达式是超出限制的字符集。第一个括号内的表达式是。

正如我在问题中所说的,我不想要这样的东西,因为我经常在emacs启动时加载几十个文件,即使我不需要它们,它也会通过并取消它们。当我关闭emacs关闭,所有缓冲区都脏了,我需要保存它们。不过,谢谢。谢谢,这是一个有趣的解决方案。我想我更喜欢标记文件的面,这样我就可以看到行长,而不必定位光标。不过,这还是有点整洁。我可以将它用于其他事情。:)似乎更好的regexp可以解决您的问题。
(add-hook 'before-change-functions 
          (lambda (&rest args) 
            (if (not (buffer-modified-p))
                (untabify (point-min) (point-max)))))
"^\\(?: \\|[^   \n]\\{4\\}\\)\\{33\\}\\(.+\\)$"