Bekerja dengan Python di Emacs jika saya ingin menambahkan coba / kecuali pada blok kode, saya sering menemukan bahwa saya harus membuat indentasi seluruh blok, baris demi baris. Di Emacs, bagaimana Anda membuat indentasi seluruh blok sekaligus.
Saya bukan pengguna Emacs yang berpengalaman, tetapi hanya menemukan itu adalah alat terbaik untuk bekerja melalui ssh. Saya menggunakan Emacs pada baris perintah (Ubuntu), bukan sebagai gui, jika itu membuat perbedaan.
C-c >
untuk benar.C-c <
untuk kiriJawaban:
Jika Anda memprogram Python menggunakan Emacs, maka Anda mungkin harus menggunakan mode python. Dengan mode-python, setelah menandai blok kode,
C-c >
atauC-c C-l
menggeser wilayah 4 spasi ke kananC-c <
atauC-c C-r
menggeser wilayah 4 spasi ke kiriJika Anda perlu menggeser kode dengan dua tingkat indensi, atau jumlah arbiter, Anda dapat mengawali perintah dengan argumen:
C-u 8 C-c >
menggeser wilayah 8 ruang ke kananC-u 8 C-c <
menggeser wilayah 8 ruang ke kiriAlternatif lain adalah menggunakan
M-x indent-rigidly
yang terikat padaC-x TAB
:C-u 8 C-x TAB
menggeser wilayah 8 ruang ke kananC-u -8 C-x TAB
menggeser wilayah 8 ruang ke kiriJuga berguna adalah perintah persegi panjang yang beroperasi pada persegi panjang teks, bukan pada baris teks.
Misalnya, setelah menandai wilayah persegi panjang,
C-x r o
menyisipkan ruang kosong untuk mengisi wilayah persegi panjang (secara efektif menggeser kode ke kanan)C-x r k
membunuh wilayah persegi panjang (secara efektif menggeser kode ke kiri)C-x r t
meminta string untuk menggantikan persegi panjang dengan. MemasukiC-u 8 <space>
kemudian akan memasuki 8 spasi.PS. Dengan Ubuntu, untuk menjadikan mode-python mode default untuk semua file .py, cukup instal
python-mode
paketnya.sumber
C-c >
didefinisikan dalam python-mode.el, jadi saya pikir Anda harus menginstalpython-mode
paket di suatu tempat di sepanjang jalan. Senang itu berhasil untuk Anda.C-c C-l
danC-c C-r
harus merupakan binding khusus yang Anda buat sendiri Jika Anda menjalankanemacs -q
(untuk menjalankan emacs tanpa memuat file init) Anda akan melihat tidak ada pengikatan untukC-c C-l
atauC-c C-r
dalam mode Python.Selain itu
indent-region
, yang dipetakanC-M-\
secara default, perintah edit persegi panjang sangat berguna untuk Python. Tandai wilayah sebagai normal, lalu:C-x r t
(string-rectangle
): akan meminta karakter yang ingin Anda masukkan ke setiap baris; bagus untuk memasukkan sejumlah ruang tertentuC-x r k
(kill-rectangle
): menghapus wilayah persegi panjang; bagus untuk menghilangkan lekukanAnda juga dapat
C-x r y
(yank-rectangle
), tetapi itu jarang berguna.sumber
indent-region
dipetakan untukC-M-\
melakukan trik.sumber
Saya telah menggunakan fungsi ini untuk menangani indentasi dan indentasi saya:
Dan kemudian saya menetapkan untuk pintasan keyboard:
sumber
Saya seorang pemula Emacs, jadi jawaban ini mungkin berbatasan dengan tidak berguna.
Tidak ada jawaban yang disebutkan sejauh ini mencakup lekukan kembali literal seperti
dict
ataulist
. MisalnyaM-x indent-region
atauM-x python-indent-shift-right
dan perusahaan tidak akan membantu jika Anda telah memotong-dan-menempelkan literal berikut ini dan membutuhkannya untuk diindentasi ulang dengan masuk akal:Rasanya seperti
M-x indent-region
harus melakukan sesuatu yang masuk akalpython-mode
, tapi itu belum (belum) terjadi.Untuk kasus khusus di mana literal Anda dikurung, menggunakan TAB pada baris tersebut mendapatkan apa yang Anda inginkan (karena spasi tidak memainkan peran).
Jadi apa yang telah saya lakukan dalam kasus seperti ini adalah dengan cepat merekam keyboard keyboard seperti
<f3> C-n TAB <f4>
pada F3, Ctrl-n (atau panah bawah), TAB, F4, dan kemudian menggunakan F4 berulang kali untuk menerapkan makro dapat menyimpan beberapa penekanan tombol. Atau bisa Anda lakukanC-u 10 C-x e
untuk menerapkannya 10 kali.(Saya tahu ini kedengarannya tidak terlalu banyak, tetapi coba inden indentasi ulang 100 baris sampah tanpa kehilangan panah bawah, dan kemudian harus naik 5 baris dan ulangi hal-hal;)).
sumber
Saya menggunakan cuplikan berikut. Pada tab ketika pilihan tidak aktif, itu indentasi garis saat ini (seperti biasanya); ketika pemilihan tidak aktif, itu indentasi seluruh wilayah ke kanan.
sumber
Lakukan indentasi secara interaktif.
Disalin dari posting saya di: Indent beberapa baris di Emacs
sumber
Saya melakukan sesuatu seperti ini secara universal
sumber