webdevqa.jp.net

emacs:pythonコードの領域を4スペースでインデント/インデント解除する方法は?

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

理想的には、文脈依存ではないものを希望します(たとえば、インデントがpython構文に関連しない)docstring内のパッセージをインデントできるようにします)。

モード行に(Python)と表示されます。 Webを検索したところ、pythonの代わりに python-mode を使用することについて多くの議論がありましたが、emacsを使い始めたのは数日前なので、デフォルトの変更には注意が必要です。それらを理解する機会があった前に。 python-modeに変更するのが最善の方法である場合は、それを回答として受け入れます。

私が試したこと(マニュアルから):

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

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

60
Ian Mackinnon

変数python-indentは4です。

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

indent-rigidlyは、どの程度インデントするかを示す前置引数を取るので、C-u 42 C-x TAB 42列でインデントします。デフォルトのプレフィックス引数は4であるため、C-u C-x TAB 4列でインデントします。

リージョンをもう一度選択する場合は、C-x C-xその後。

数値の接頭辞を付けてindent-rigidlyコマンドを使用します。

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

9
KeithB

C-x C-xはコードにマークを付け、次にM-x indent-for-tab-modeをマークします

すべての行でタブを押した場合、それは保存です。

4
Nestor A. Diaz

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

列モードで行を選択し、それらすべてに一度に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
Steve Lianoglou

上記の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)
    
3
Amnon Harel

S-<LEFT>S-<RIGHT> はどちらもPythonメジャーモードで正常に動作します。これは Cuaモード で特に便利です。領域が選択されると、C-cおよびC-xの動作がコピー/カットに変わります。

0
Vincent

構成可能性はEmacsの王様です。単にM-i with https://github.com/magnars/multiple-cursors.el を使用すると、インデントブロックコマンドを使用できます。それはあなたがすることです:

  1. M-> N回(Nはブロック内の行数)
  2. M-i
0