【问题标题】:Emacs python-mode.el comments start a new lineEmacs python-mode.el 注释开始一个新行
【发布时间】:2012-12-08 07:49:18
【问题描述】:

我在 Emacs 中使用 python-mode.el 来编辑一些 Python 代码,它有一个最烦人的功能,它会自动缩进注释然后开始一个新行。例如,如果我有这个:

def x():
    y = 1
<cursor is here, at root indentation level>

然后在根缩进级别加一个#:

def x():
    y = 1
    #
<cursor is now here>

它会自动缩进,插入 #,并在 # 之后插入回车。这让我疯狂。我希望我的 cmets 准确地留在我放置它们的位置!有什么建议?

我查看了该模式的 elisp 代码,但找不到任何东西,也无法在网上其他地方找到任何东西。我所能找到的只是 cmets 不会用于未来的缩进(py-honor-comment-indentation),但与评论本身无关。也不是奇怪的回车。

【问题讨论】:

  • FWIW,与 Emacs 捆绑的 python 模式不会遇到这个问题,AFAICS。

标签: python emacs comments indentation python-mode


【解决方案1】:

提交了错误报告

https://bugs.launchpad.net/python-mode/+bug/1092847

M-x 自定义 py-electric-comment-p RET

将它设置为 `nil' 应该可以解决它。

另见变量 `py-indent-cmets'

【讨论】:

    【解决方案2】:

    好的,找到了。

    有问题的函数是 py-electric-comment。

    默认情况下,可以在插入 # 后调用它。您可以通过将 py-electric-comment-p 设置为 nil 来禁用此功能。

    您也可以通过编辑这部分功能来编辑py-electric-comment:

        (let ((orig (copy-marker (point)))
                    (indent (py-compute-indentation)))
          (unless (eq (current-indentation) indent)
                (goto-char orig)  ;;; REMOVE THIS LINE
                  (beginning-of-line)
                  (delete-horizontal-space)
    

    这将使您保持启用 py-electric-comment 但不会尝试返回到原始缩进级别,从而解决原始问题。

    【讨论】:

    • 其实这只解决了部分问题。需要有一个 if check in 来检查下一行。
    猜你喜欢
    • 2013-11-06
    • 2012-08-25
    • 1970-01-01
    • 2023-04-03
    • 2014-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多