3

通常、emacs pythonモードで空の行のタブを押すと、使用可能なタブのインデントが循環します。ポイントが最も深いインデントレベルにあるときにTabキーを押すと、最後のベストマッチオプションを含むpabbrevバッファーが表示されます。他の誰かがこの問題を抱えていますか、elispを書かずにそれを回避する簡単な方法はありますか?

編集:Trey、私はpabbrevをPythonモードで動作させ続けたいのですが、オフにしないでください。

つまり、2つのインデントレベルがあるとしましょう。通常、タブを3回押した場合、最初のレベルは4スペース(またはインデントが設定されているもの)になり、2番目のレベルは0スペースに戻ります。 3番目に4つのスペースに戻ります。

1つのインデントにpabbrevモードを使用すると、マークが4スペースになり、2番目のインデントはオートコンプリート用のバッファーを表示します。私のポイントの左側に文字がない場合、これは起こらないはずです。それはもっと意味がありますか?

4

3 に答える 3

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))
于 2009-05-05T04:48:39.090 に答える
1

応答が遅い場合、これはどうですか?

Treyからのパッチのおかげで、これは箱から出してすぐに機能するはずです。pabbrev.elがややいたずらな方法でタブをバインドしますが、急速な拡張が必要な​​場合はどうすればよいですか。

于 2013-01-16T20:35:42.167 に答える
0

エリスがない?もちろん:

M-x pabbrev-mode

オフにする必要があります。しかし、elisp の切り取り/貼り付けを気にしない場合は、python バッファーで pabbrev モードをオフにすることができます。

(add-hook 'python-mode (lambda () (pabbrev-mode -1)))
于 2009-05-04T21:54:38.693 に答える