7

Emacs python-mode を使用しています。私は私の中でこれを使ってそれを呼び出します.emacs

(add-to-list 'load-path "~/emacs/python-mode.el-6.0.3/")
(autoload 'python-mode "python-mode" "Python Mode." t)
(add-to-list 'auto-mode-alist '("\\.py\\'" . python-mode))
(add-to-list 'interpreter-mode-alist '("python" . python-mode))
(require 'python-mode)
(add-hook 'python-mode-hook
      (lambda ()
    (set-variable 'py-indent-offset 4)
    ;(set-variable 'py-smart-indentation nil)
    (set-variable 'indent-tabs-mode nil)
    (define-key py-mode-map (kbd "RET") 'newline-and-indent)
    ;(define-key py-mode-map [tab] 'yas/expand)
    ;(setq yas/after-exit-snippet-hook 'indent-according-to-mode)
    ))

私が書いた場合、それは一般的に問題ありません。

if condition:

Return キーを押すと、カーソルがインデントされた改行に適切に配置されます。問題は、インデントから正しく終了しないことです。他のシステムでは、インデントされた句の本文 (if文の本文など) に新しい行を作成して Backspace キーを押すと、バックスペースではなく、インデントで 1 レベル飛び出します。たとえば、私が持っていた場合:

if condition: 
  statement1
  statement2

そして、リターン、バックスペースを押した後statement2、カーソルをここに置きます:

if condition: 
  statement1
  statement2
<-- cursor position

多くの識別レベルがあり、これを行わない場合、適切なインデント レベルに到達するまで手動でバックスペースする必要があるため、Python の編集は不可能になります。エラーが発生しやすく、面倒です。

for something:
  for other:
    if hello:
      while x:
         statement1
         <-- How to indent back to level of "for other"?

編集: 「emacs -nw」として emacs を実行している間、これを機能させることができませんでした (サーバーにリモートでログインしていて、X インターフェイスを開始したくありません)。「-nw」を削除して、より遅い X インターフェイスをリモートで使用して emacs を使用すると、すべて動作します...これはなぜでしょうか? バックスペースなどに関連するシェル構成の問題でしょうか?

これはどのように修正できますか?句の中にいる場合は、インデント レベルでバックスペースするだけです。ありがとう。

4

5 に答える 5

5

最新バージョンの Emacs では、python-mode.el ではなく python.el を使用してください。.emacs からこれらの行をすべて削除すると、デフォルトで python.el が有効になり、.py ファイルを開くと Python モードになると思います。

私のシステムで空白のデフォルト設定をテストしたところ、バックスペースは適切にあなたの例で1レベルのインデントに戻りました.

したがって、答えは「何もしないでください」のようです。:)


Ubuntu では、標準の emacs インストールの一部である emacs23-common パッケージによって python.el が提供されます。

% dpkg -S /usr/share/emacs/23.3/lisp/progmodes/python.elc
emacs23-common: /usr/share/emacs/23.3/lisp/progmodes/python.elc
于 2012-01-30T23:55:29.623 に答える
1

これはバグです。

最近、py-smart-indentation が誤って 4 の値を推測していました。

問題を迅速に修正するには、python-mode.el のバグを次の場所に報告してください。

https://bugs.launchpad.net/python-mode

于 2012-07-21T09:14:34.580 に答える
1

私の推測では、 python-mode.el は異なるインデント幅を持つことをサポートしていません。最後の例では、インデントに 2つと3 つのスペースを使用しています。インデントごとに常に4つのスペースを使用しないのはなぜですか? 4 スペースを使用するのが標準的なスタイルです。

編集済み:新しいファイルを開いて最後の例をコピーすると、あなたの言ったことを再現できました。ただし、閉じて再度開くと、インデントから正しく終了できました。コードを選択し、C-c :閉じる/再度開くことなく (py-guess-indent-offset) を押すことで、同じことができます。

于 2012-02-09T21:42:43.960 に答える
1

バックスペースの代わりに、 を押してください<tab>。次の論理インデント位置にジャンプする必要があります。

于 2012-10-10T23:21:23.217 に答える
0

現在のトランクに固定

bazaar を使用して取得します。

bzr branch lp:python-mode

またはhtml経由download-button

https://launchpad.net/python-mode resp. http://bazaar.launchpad.net/~python-mode-devs/python-mode/python-mode/files

于 2012-07-21T21:09:39.193 に答える