Bagaimana cara menggeser area teks yang dipilih di Emacs dengan jumlah spasi tertentu?

26

Saya menulis kode python sehingga menggeser / memindahkan blok garis adalah penting untuk menghindari melewati setiap baris secara individual. Bagaimana saya bisa melakukan ini tanpa add-on? Apakah ada jenis perintah operasi keystroke untuk melakukan ini?

Vass
sumber
3
Untuk jawaban yang tidak spesifik dengan Python, lihat emacs.stackexchange.com/q/11 dan emacs.stackexchange.com/q/18 .
legoscia

Jawaban:

40

Gunakan perintah indent-rigidly, yang terikat C-x TABsecara default.

Anda dapat menentukan jumlah spasi untuk indentasi dengan menggunakan argumen awalan , seperti C-5 C-x TAB.

Atau Anda dapat menjalankan perintah dan kemudian menggunakan panah kiri / kanan untuk secara interaktif menyesuaikan level indentasi.

glukas
sumber
bagaimana Anda menambahkan argumen awalan?
Vass
1
Coba misalnya C-5 C-x TABuntuk indentasi wilayah saat ini 5 spasi.
glukas
bagus, tapi mengapa baris pertama tidak bergerak juga? Saya harus mengambil bagian terakhir dari garis di atas pilihan untuk membuat kumpulan garis yang ingin saya pindahkan.
Vass
1
Anda tidak perlu memilih apa pun dari baris sebelumnya, tetapi Anda ingin memilih dari awal baris pertama yang ingin Anda indentasi. Misalnya, C-auntuk pindah ke awal baris, C-SPCuntuk mulai menandai wilayah, C-n C-nuntuk turun beberapa baris, C-5 C-x TABuntuk membuat indentasi kedua baris.
glucas
1
"Gunakan panah kiri / kanan untuk secara interaktif menyesuaikan level indentasi" Benarkah? Besar! Saya tidak tahu ini, dan kadang-kadang saya harus menebak berapa banyak ruang yang perlu saya tambahkan atau hapus. Saya harap ini bisa membantu.
imz - Ivan Zakharyaschev
9

Jika Anda digunakan python-mode.el C-c >atau C-c <untuk menggeser blok ke kiri atau kanan

Lompik
sumber
kenapa baris pertama dari seleksi tetap tidak tergerak jika saya tidak memilih bagian terakhir dari baris di atasnya?
Vass
Saya tidak dapat mereproduksi perilaku ini. semua baris pilihan dipindahkan. Emacs 24.4
Lompik
Komentar glucas mengatakan bahwa ini akan terjadi jika Anda tidak memilih dari awal baris
Vass
6

The string-rectangleperintah ( C-x r t) dapat digunakan untuk memasukkan teks yang sewenang-wenang (spasi termasuk) di daerah yang dipilih.

Katakanlah Anda memiliki blok teks ini dan Anda ingin memasukkan 5 spasi di depan semua baris.

abc
  def
    ghi

Pertama pilih daerah "0 kolom" seperti yang ditunjukkan di bawah ini (intinya adalah pada karakter 'a' dan tandanya ada di kolom yang sama di baris yang berisi 'ghi':

▮bc
  def
▯   ghi

Sekarang menggunakan string-rectangle, masukkan teks yang ingin Anda masukkan di wilayah yang dipilih. Dalam contoh ini, kita akan memasukkan 5 spasi pada semua baris termasuk dan di antara titik dan tanda.

C-x r t M-5 SPC RET

Itu akan memberikan teks di bawah gaya berlekuk.

     abc
       def
         ghi
Kaushal Modi
sumber
4

Ada C-x TAB(terikat indent-rigidly). Berikan argumen awalan untuk menunjukkan berapa banyak ruang yang ingin Anda indentasi, negatif menghapus banyak ruang.

Harald Hanche-Olsen
sumber
0

Saya menemukan bahwa dengan menekan Alt-4 dan kemudian SPC, saya mendapatkan hasil yang diinginkan. Tidak yakin apakah ini cara terbaik, tetapi itu berfungsi juga.

Vass
sumber