emacs:Pythonコードの領域を4スペース分インデント/インデント解除するには?


60

emacsで選択されたPythonコードの領域があります。その中のすべての行を4スペース分インデントおよびインデント解除する最も効率的な方法は何ですか?

理想的には、コンテキストに依存しないものが必要です(たとえば、インデントがpython構文に関連しない場合、docstrings内のパッセージをインデントできるようにします)。

私のモードラインが表示されます(Python)。Webを検索するpython-modepython、の代わりにを使用することについて多くの議論が見つかりましたが、数日前にemacsを使用し始めたばかりなので、デフォルトを変更する前に理解する機会があります。に変更することpython-modeが最良の選択肢である場合、私はそれを答えとして受け入れます。

私が試したもの(マニュアルから):

  • <TAB> 無効
  • C-M-\ 無効
  • C-x <TAB> (indent-rigidly)すべての行を1列ずつインデントします(および領域の選択を解除します)
  • M-i タブ(長さ8スペース)で1行目をインデントします。
  • C-M-q -「CMqは未定義」

私が見つけた唯一の方法はregex-replaceを使用することですが、それはそのような単純なタスクのための非常に多くのキーストロークです。

回答:


69

変数python-indentが4であると仮定します。

M-x python-shift-right (C-c >)
M-x python-shift-left  (C-c <)

5
私はやらなければならなかったpython-indent-shift-left
nnyby

17

indent-rigidlyは、インデントする量を示すプレフィックス引数を取ります。したがってC-u 42 C-x TAB、42列C-u C-x TABインデントします。デフォルトのプレフィックス引数は4 なので、4列インデントします。

リージョンを再度選択する場合は、C-x C-x後で実行します。


8

indent-rigidlyコマンドには、数値のプレフィックスを付けて使用します。

C-u 4 M-x indent-rigidly4つのスペースC-u -4 M-x indent-rigidlyを削除するには、4つのスペースで領域をインデントします。



3

列モードを使用することもできます。

列モードで行を選択し、それらすべてに一度に4つのスペースを追加します。

  1. インデントする最初の行の列1にジャンプします。
  2. C-<space> マークを設定する
  3. ポイントを最後の行に移動します(1列目に留まります)
  4. C-x r t列モードに入る(またはC-<RET>CUAモードがある場合)
  5. <space><space><space><space><RET>

同様の操作を行って、4つのスペースを削除することができます。マークされた領域に4つの列を含めて(ステップ2〜3)、ヒットします。 <DEL>


3

上記のChenのソリューションを更新し、現在(Emacs 24.4.1でテスト済み)コマンドの名前が変更されています。したがって、変数python-indentに従ってインデントする場合、コマンドはpython-indent-shift-leftおよびpython-indent-shift-rightです。あなたはできる:

  1. 入力するM-x python-indent-shift-rightか、M-x python-indent-shift-left

  2. デフォルトのpython-モードのショートカットを使用C-c >し、C-c <

  3. それらを再バインドします。たとえば、私が使用するWindowsボタン付きのキーボードでは:

    (global-set-key (kbd "s-s") 'python-indent-shift-left) 
    (global-set-key (kbd "s-d") 'python-indent-shift-right)
    


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.