2012-06-21 83 views
1

在過去的3年中,我的工作需要以xml格式編寫和編輯配置文件。 xml標籤中的內容已經發展得如此之多,現在它已變得像一種編程語言。不幸的是,emacs在相同級別的標籤內縮進了所有內容。事情是這樣的:自定義emacs nxml縮進

current emacs indentation in nxml mode

但它會是邪惡的,如果我能得到像縮進以下內容:

how I wish emacs would ident it

我讀過有關定製壓痕多個線程,但我仍然沒有任何線索如何去做。

我試圖創建一個自定義主模式,但這樣做會殺死所有的語法顏色和縮進規則。理想情況下,我想要做的只是修改nxml市長模式縮進規則?不過,我不知道這條規則在哪裏。

此外,如果我可以對某些關鍵詞(如「if」或「set」)進行着色,這將是一項好處。

我知道我在問什麼是一個很大的工作,所以我沒有在這裏要求一個明確的答案。我只是尋求一些幫助,指向正確的方向。

回答

2

可能最好的方法是在標籤內寫入一種新的主​​要語言模式,然後使用a multiple major modes package,這允許多個主要模式在同一個文件中處於活動狀態,因此包含的語言可以擁有自己的語言主要模式。

1

你可能想看看這個例子。

(defun nxml-extra-space-indent() 
    (nxml-indent-line) 
    (when (zerop (current-indentation)) 
    (indent-line-to 4))) 
(setq indent-line-function 'nxml-extra-space-indent) 

我按照現有的主要模式縮進,然後自定義縮進,如果行符合某些標準。
我認爲這是自定義縮進的最簡單方法,因爲您從現有的東西開始,並且不需要知道如何實現特定模式的縮進邏輯。

+0

我喜歡你的想法。我絕對更喜歡調用一個自定義函數來縮進緩衝區,而不是搞亂主要模式。我將在一個函數中工作,如果該行包含'if('然後縮進下面的行,直到包含匹配的括號的行...對我來說不是一件容易的事,因爲我不知道很多elisp。將看到我能走多遠:-) – RafaelGP

+0

此頁面包含您可能需要的大多數正則表達式函數http://www.gnu.org/software/emacs/manual/html_node/elisp/Regexp-Search.html也是一個很好的宏保存遊覽,它返回你的指向前一個位置(例如搜索後)。對於自定義的分子來看看font-lock-add-keywords的文檔 – sabof

+0

這應該讓你開始:) – sabof