2009-05-04 84 views
3

通常,當您在emacs python模式中的空行上點擊tab時,它將循環顯示可用的選項卡縮進。當我點擊標籤時,點在最深的縮進水平,我得到包含最後最佳匹配選項的pabbrev緩衝區。有沒有其他人有這個問題,有沒有寫一個簡單的方法,而不寫任何elisp?Emacs Pabbrev和Python

編輯: Trey,我想保持在python模式下工作pabbrev不會關閉它。

所以我們可以說有2個縮進層次,或者是none,或者是1層,如果它碰到標籤的3倍,第一個會將點放在4個空格處(或者任何縮進設置爲),第二個返回0空間,第三個回到4個空間。

使用一個縮進pabbrev模式將標記4個空格,第二個調出自動完成緩衝區。如果我的觀點左側沒有字母,這不應該發生。 這是否更有意義?

+0

因此,當TAB沒有在點左側有空格時不做pabbrev? TAB應該(在那種情況下)在沒有縮進和1級之間切換(或者在N個可能的級別之間循環)? – 2009-05-05 02:50:11

+0

正確。我會認爲這是人們常見的煩惱,但也許不會。 – jacob 2009-05-05 04:28:03

回答

3

在澄清的要求,光,你需要沿着此線的東西。我敢肯定,你無法逃脫寫出一些elisp。什麼是好(IMO)是,這應該適用於所有模式,而不僅僅是python模式。

(defadvice pabbrev-expand-maybe (around pabbrev-expand-maybe-when-not-after-whitespace activate) 
    "prevent expansion when only whitespace between point and beginning of line" 
    (if (save-match-data 
     (save-excursion 
      (let ((p (point))) 
      (string-match "^\\s-*$" (buffer-substring-no-properties (progn (beginning-of-line) (point)) p))))) 
     (let ((last-command (if (eq last-command this-command) (pabbrev-get-previous-binding) last-command)) 
      (this-command (pabbrev-get-previous-binding))) 
     (pabbrev-call-previous-tab-binding)) 
    ad-do-it)) 
0

No elisp?當然:

M-x pabbrev-mode 

應該將其關閉。但是,如果你不介意的切割/粘貼的elisp,你可以在python緩衝區關閉pabbrev模式:

(add-hook 'python-mode (lambda() (pabbrev-mode -1))) 
1

這是爲什麼遲到?

感謝來自Trey的修補程序,現在應該可以開箱即用。綁定選項卡的方式,pabbrev.el有點頑皮,但你要做什麼,如果你想快速擴張。