2008-12-11 217 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