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を使用することですが、それはそのような単純なタスクのための恐ろしい数のキーストロークです。
変数python-indent
は4です。
M-x python-shift-right (C-c >)
M-x python-shift-left (C-c <)
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つのスペースを削除します。
C-x C-xはコードにマークを付け、次にM-x indent-for-tab-modeをマークします
すべての行でタブを押した場合、それは保存です。
列モードを使用することもできます。
列モードで行を選択し、それらすべてに一度に4つのスペースを追加します。
C-<space>
マークを設定するC-x r t
は列モードに入ります(またはC-<RET>
CUAモードをお持ちの場合)<space><space><space><space><RET>
同様の操作を行って4つのスペースを削除できます。マークした領域に4つの列を含め(手順2〜3)、<DEL>
上記のChenのソリューションを更新すると、現在(Emacs 24.4.1でテスト済み)、コマンドの名前が変更されました。したがって、変数python-indentに従ってインデントしたい場合、コマンドはpython-indent-shift-leftとpython-indent-shift-rightです。あなたはできる:
M-x python-indent-shift-right
またはM-x python-indent-shift-left
と入力して発行します
デフォルトのpythonモードのショートカットC-c >
とC-c <
を使用します
それらを再バインドします。たとえば、私が使用するWindowsボタンを備えたキーボードの場合:
(global-set-key (kbd "s-s") 'python-indent-shift-left)
(global-set-key (kbd "s-d") 'python-indent-shift-right)
S-<LEFT>
とS-<RIGHT>
はどちらもPython
メジャーモードで正常に動作します。これは Cuaモード で特に便利です。領域が選択されると、C-c
およびC-x
の動作がコピー/カットに変わります。
構成可能性はEmacsの王様です。単にM-i
with https://github.com/magnars/multiple-cursors.el を使用すると、インデントブロックコマンドを使用できます。それはあなたがすることです:
M->
N回(Nはブロック内の行数)M-i