在Emacs中,我正在編輯一些源代碼,並且我點擊<標籤>。 Emacs將行縮進n個空格。我想改變這種線的縮進量。我怎麼知道應用了什麼規則emacs來縮進n行空格?如何確定emacs爲什麼縮進一定數量?
我想改變n,但我需要弄清楚Emacs剛纔使用的許多與縮進相關的變量中的哪一個。
在Emacs中,我正在編輯一些源代碼,並且我點擊<標籤>。 Emacs將行縮進n個空格。我想改變這種線的縮進量。我怎麼知道應用了什麼規則emacs來縮進n行空格?如何確定emacs爲什麼縮進一定數量?
我想改變n,但我需要弄清楚Emacs剛纔使用的許多與縮進相關的變量中的哪一個。
如果您使用的是基於cc模式(例如c-mode,C++-mode,java-mode等)的模式,您可以點擊Cc Cs,它會告訴您什麼語法類別該行是。如果你想改變它,點擊C-C C-O,你將被指導整個過程。查看關於定製的cc模式文檔以獲取更多詳細信息:https://www.gnu.org/s/emacs/manual/html_node/ccmode/Customizing-Indentation.html
通用答案很難。有些模式會比其他模式更明顯,但在一般情況下(因爲他們可以自由地實現縮進但他們希望),我不認爲你會擺脫需要閱讀一些elisp。
以的綁定開始,TAB可以工作,但可能會稍微耗時,具體取決於涉及多少層間接參與。
如果您知道所討論的主要模式實現了自己的縮進,那麼您可以嘗試幫助追蹤被調用函數的一種(非嚴格但快速)方法是使用ELP,內置於elisp探查。 elp-instrument-package
將用於分析所有名稱與您指定的前綴字符串參數匹配的函數。因此,你可能會做這樣的事情在一個PHP文件中的以下(注意PHP的模式會告訴你,它是由C型衍生)
的Mxelp-instrument-package
RETphp-
RET
的Mxelp-instrument-package
RETc-
RET
的Mxelp-instrument-package
RETindent
RET
現在,在源代碼中鍵入TAB,並運行M-Xelp-results
看到其中的儀表功能被稱爲。
在這一點上,你是你自己的 - 尋找可能的嫌疑人,並看看代碼是做什麼 - 但它可以是一個方便的方式來過濾搜索。
完成後,請使用M-xelp-restore-all
來防止進一步分析。
如果您碰巧樂意讓您的手變得很髒,那麼總是有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
。
可能並不是最好的方法,但你可以通過Chk來查看當你點擊標籤時你所在的模式下調用了什麼函數,並且看看你是否可以從那裏得到變量 –
spike
不是答案,但是試試'Mx apropos RET RET'。我會建議嘗試查看'offset'關鍵字。我認爲這可能是每種主要模式的一個變量。 –
desudesudesu
爲了回答這個問題,你需要指定文件的模式(C++,perl,Tcl,Java,R,文本等等)。 @spike具有良好的第一步,但很可能該模式將進一步改進與''鍵相關的函數(如果它是一般的縮進函數)。 –