我是新來的elisp,所以請原諒我,如果以下方法完全笨拙。直接調用命令和使用鍵盤綁定的區別
在我目前正與團隊,有關閉蟒蛇塊用pass
聲明(如果它們沒有被關閉的關鍵字,如else
或except
或終止等)的通用慣例。雖然不同尋常,但它具有如下優點:如果程序無意中發生了更改(使用emacs indent-region
),則始終可以恢復程序的原始縮進。
要獲得現有的代碼行本公約,我寫了一個小elisp的功能:
(defun python-check-indent()
"Check if automatic indentation changes current indent, insert pass keyword if it does."
(interactive)
(move-beginning-of-line 1)
(skip-chars-forward " ")
(if
(< 0
(let (original)
(setq original (point))
(indent-for-tab-command)
(- (point) original)
)
)
(progn
(insert "pass")
(newline)
(indent-for-tab-command)
)
)
(next-line)
)
(global-set-key (kbd "C-`") 'python-check-indent)
的想法很簡單,就是測試是否按Tab會改變縮進,而在這種情況下,插入pass
聲明。爲了便於處理更長的代碼塊,它然後前進到下一行。
當我運行它使用M-x python-check-indent
,它做我想要的(除了它繞着空行稍微移動),也反覆運行它來處理多行。但是,當我使用C-keybinding重複運行它時,它開始搞亂第二次調用中的代碼。
所以,這裏是我的問題:調用一個命令與M-x ...
並使用它的鍵綁定有什麼區別?我怎麼能改變功能不受這種差異?
emacs的版本:GNU Emacs的23.3.1(x86_64的,蘋果達爾文,NS蘋果了AppKit-1038.35)的對2011-03-10 black.porkrind.org
(編輯),目前的解決方法:我現在將它包裝在一個鍵盤宏內,所以它被綁定到Cx e,並且行爲正常。
嗨,這個規則有很大的意義,但不幸的是,當我使用鍵綁定調用函數時,我仍然會得到不同的行爲,而使用M-x python-check-indent時它會正常工作。 –
我懂了!我只需要用python-indent-line替換另一個indent-for-tab-command。非常感謝! –