簡體   English   中英

修改緩沖區時如何運行Emacs鈎子?

[英]How do I run an Emacs hook when a buffer is modified?

建立在保存某些文件類型(以及只有那些文件類型)時讓Emacs解壓縮時 ,我想在開始修改緩沖區時運行一個鈎子來解壓縮我的C ++文件。 我嘗試添加鈎子來加載緩沖區,但是當emacs啟動時,它會解除我自動加載的所有可寫文件。

(對於那些想知道我為什么要這樣做的人來說,這是因為我工作的地方強制在文件中使用標簽,我很樂意遵守。問題是我標記了我的文件,告訴我線條何時也是如此很長,但正則表達式匹配行中的字符數,而不是行占用的空間。一行中的4個制表符可以將它推到我的132個字符限制之上,但該行不會被正確標記。因此,我需要一種自動制表和解壓縮的方法。)

看一下變量“before-change-functions”。

也許沿着這條線(警告:代碼沒有測試):

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

這是我添加到我的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 鏈接文本會更改光標顏色 - 實際上光標顏色可能會因設置而異。 這聽起來像是一個比正則表達式代碼更少侵入性的解決方案,但它可能不適合您的需求。

一個不同的,切向的答案。

你提到你的正則表達式不足以判斷何時滿足132個字符的限制。 也許更好的正則表達式......

假設標簽寬度為4,此正則表達式將匹配一行超過132個字符的行。(我認為我的數學正確)

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

最后一個帶括號的表達式是超出限制的字符集。 第一個帶括號的表達式是害羞的

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM