2011-11-14 39 views
2

在Emacs中,我正在編輯一些源代碼,並且我點擊<標籤>。 Emacs將行縮進n個空格。我想改變這種線的縮進量。我怎麼知道應用了什麼規則emacs來縮進n行空格?如何確定emacs爲什麼縮進一定數量?

我想改變n,但我需要弄清楚Emacs剛纔使用的許多與縮進相關的變量中的哪一個。

+1

可能並不是最好的方法,但你可以通過Chk 來查看當你點擊標籤時你所在的模式下調用了什麼函數,並且看看你是否可以從那裏得到變量 – spike

+0

不是答案,但是試試'Mx apropos RET RET'。我會建議嘗試查看'offset'關鍵字。我認爲這可能是每種主要模式的一個變量。 – desudesudesu

+0

爲了回答這個問題,你需要指定文件的模式(C++,perl,Tcl,Java,R,文本等等)。 @spike具有良好的第一步,但很可能該模式將進一步改進與''鍵相關的函數(如果它是一般的縮進函數)。 –

回答

4

通用答案很難。有些模式會比其他模式更明顯,但在一般情況下(因爲他們可以自由地實現縮進但他們希望),我不認爲你會擺脫需要閱讀一些elisp。

的綁定開始,TAB可以工作,但可能會稍微耗時,具體取決於涉及多少層間接參與。

如果您知道所討論的主要模式實現了自己的縮進,那麼您可以嘗試幫助追蹤被調用函數的一種(非嚴格但快速)方法是使用ELP,內置於elisp探查。 elp-instrument-package將用於分析所有名稱與您指定的前綴字符串參數匹配的函數。因此,你可能會做這樣的事情在一個PHP文件中的以下(注意PHP的模式會告訴你,它是由C型衍生)

的Mxelp-instrument-packageRETphp-RET
的Mxelp-instrument-packageRETc-RET
的Mxelp-instrument-packageRETindentRET

現在,在源代碼中鍵入TAB,並運行M-Xelp-results看到其中的儀表功能被稱爲。

在這一點上,你是你自己的 - 尋找可能的嫌疑人,並看看代碼是做什麼 - 但它可以是一個方便的方式來過濾搜索。

完成後,請使用M-xelp-restore-all來防止進一步分析。

1

如果您碰巧樂意讓您的手變得很髒,那麼總是有elisp調試器告訴您Emacs的最新功能。

如果您點擊C-h k TAB,您會發現Emacs正在運行的功能(例如,indent-for-tab-command)那麼你可以做M-x debug-on-entry RET indent-for-tab-command RET。現在,只要你點擊TAB,你就會彈出一個調試器,並可以一步步觀察執行情況。

根據您的調試習慣,這可能是一種令人發狂的或有啓發性的體驗。無論哪種方式,當你完成後別忘了M-x cancel-debug-on-entry