emacs: bagaimana cara indent / unindent region kode python sebanyak 4 spasi?


60

Saya memiliki wilayah kode python yang dipilih dalam emacs. Apa cara paling efisien untuk membuat indentasi dan menghapuskan setiap baris di dalamnya dengan 4 spasi?

Idealnya saya ingin sesuatu yang tidak peka konteks (mis. Itu akan memungkinkan saya untuk indent bagian dalam dokumen di mana lekukan tidak berhubungan dengan sintaks python).

Baris mode saya menunjukkan (Python). Mencari di web saya menemukan banyak diskusi tentang penggunaan python-modealih-alih python, tetapi saya hanya mulai menggunakan emacs beberapa hari yang lalu jadi saya waspada untuk mengubah default sebelum saya memiliki kesempatan untuk mengerti dan mereka. Jika beralih ke python-modeadalah pilihan terbaik, saya senang menerimanya sebagai jawaban.

Apa yang saya coba (dari manual):

  • <TAB> tidak berpengaruh
  • C-M-\ tidak berpengaruh
  • C-x <TAB> (indent-kaku) indentasi setiap baris dengan satu kolom (dan batal memilih wilayah)
  • M-i indentasi satu baris pertama dengan tab (panjang 8 spasi)
  • C-M-q - "CMq tidak ditentukan"

Satu-satunya cara yang saya temukan adalah menggunakan regex-replace, tetapi itu adalah penekanan tombol yang sangat banyak untuk tugas yang begitu sederhana.

Jawaban:


69

Dengan asumsi bahwa variabelnya python-indentadalah 4:

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

5
Saya harus melakukannya python-indent-shift-left.
nnyby

17

indent-rigidlymengambil argumen awalan yang menunjukkan berapa banyak indentasi oleh, jadi C-u 42 C-x TABindentasi oleh 42 kolom, dan karena argumen awalan default adalah 4, C-u C-x TABindentasi oleh 4 kolom.

Jika Anda ingin memilih wilayah lagi, lakukan C-x C-xsesudahnya.


8

Gunakan perintah indent-rigidly dengan awalan angka.

C-u 4 M-x indent-rigidlyuntuk membuat inden wilayah dengan empat spasi, C-u -4 M-x indent-rigidlyuntuk menghapus empat spasi.


4

Cx Cx tandai kode dan kemudian Mx indent-for-tab-mode

Itulah save jika Anda telah menekan tab untuk setiap baris.


3

Anda juga bisa menggunakan mode kolom.

Pilih garis dalam mode kolom, lalu tambahkan empat spasi untuk semuanya sekaligus:

  1. Lompat ke kolom 1 dari baris pertama yang ingin Anda indentasi.
  2. C-<space> untuk menetapkan tanda
  3. pindahkan titik ke baris terakhir (tetap di kolom satu)
  4. C-x r tuntuk masuk ke mode kolom (atau C-<RET>jika Anda punya mode CUA)
  5. <space><space><space><space><RET>

Anda dapat melakukan manuver serupa untuk menghapus empat spasi - cukup sertakan 4 kolom di wilayah yang ditandai (langkah 2-3) dan tekan <DEL>


3

Memperbarui solusi Chen di atas, saat ini (diuji pada Emacs 24.4.1) perintah telah diubah namanya. Jadi, dengan asumsi Anda ingin membuat indentasi sesuai dengan variabel python-indent, perintahnya adalah python-indent-shift-left dan python-indent-shift-right. Kamu bisa:

  1. keluarkan mereka dengan mengetik M-x python-indent-shift-rightatauM-x python-indent-shift-left

  2. gunakan cara pintas python-mode default C-c >danC-c <

  3. rebind mereka. Misalnya, pada keyboard dengan tombol windows saya menggunakan:

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


0

Keduanya S-<LEFT>danS-<RIGHT> berfungsi dengan baik dalam Pythonmode utama. Ini terutama nyaman dalam Mode Cua di mana C-cdan C-xperubahan perilaku untuk menyalin / memotong ketika suatu daerah dipilih.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.