3

通常,当您在 emacs python 模式下的空行上单击制表符时,它将循环显示可用的制表符缩进。当我在该点处于最深缩进级别时点击制表符时,我会得到包含最后一个最佳匹配选项的 pabbrev 缓冲区。有没有其他人有这个问题,有没有不写任何elisp的简单方法?

编辑:特雷,我想让 pabbrev 在 python 模式下工作而不是关闭它。

因此,假设有 2 个缩进级别,要么没有,要么通常为 1 级,如果它按 3 次制表符,第一个将把点放在 4 个空格(或任何缩进设置),第二个回到 0 个空格,然后第三回4格。

使用 pabbrev 模式时,第一个缩进标记为 4 个空格,第二个缩进为自动完成提供了一个缓冲区。如果我的观点左侧没有字母,则不应发生这种情况。这更有意义吗?

4

3 回答 3

3

根据明确的要求,您需要类似的东西。我很确定你不能不写一些省略号就逃脱。好的(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 的方式绑定 tab 有点调皮,但是如果你想要快速扩展怎么办。

于 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 回答