Cara tercepat untuk memindahkan blok kode ke baris tertentu

8

Katakanlah Anda memiliki kode pada baris 4, 5, 6. Kemudian Anda ingin memindahkan blok kode ini ke titik awal baris 9 dan juga menghapus baris 4, 5, 6.

Apa cara tercepat, yaitu paling sedikit pukulan kunci, untuk mencapai ini? Apakah fungsi khusus lebih cocok?

Edgar Aroutiounian
sumber

Jawaban:

6

Mulai dari awal baris 4 ( ESC 4 ESC g gatau M-4 M-g M-guntuk pergi ke sana), C-3 C-k C-2 C-n C-y(atau ESC 3 C-k down down C-yjika Anda tidak suka menahan pengubah) akan melakukan ini.

Jika Anda tidak ingin melakukan aritmatika di kepala Anda, tetapi pilih garis secara visual, lalu

  • Pindah ke awal zona untuk bergerak
  • C-SPC untuk menetapkan tanda
  • Turun ke awal baris pertama untuk dipertahankan
  • C-w untuk memotong
  • Pindahkan ke bawah ke tempat Anda ingin menyisipkan teks yang dipotong
  • C-y untuk menempel

Saya tidak berpikir ada cara untuk membuat ini lebih pendek kecuali Anda bersedia kehilangan fleksibilitas (misalnya, jika Anda sering ingin memindahkan blok tepat tiga baris). Anda harus memberikan tiga lokasi: awal blok untuk dipindahkan, akhir blok untuk dipindahkan, dan tujuan. Dalam urutan di atas, ada satu penekanan tombol di setiap lokasi, yang serendah yang didapat.

Gilles 'SANGAT berhenti menjadi jahat'
sumber
8

Jika jaraknya tidak besar Anda bisa menggunakan teks-pindah :

masukkan deskripsi gambar di sini

Dalam hal pukulan kunci, bagi saya itu adalah:

  1. Pilih wilayah:

    C-SPCC-nC-nC-n

  2. Pindahkan wilayah:

    H-S-nH-S-nH-S-n

( move-text-downdiikat ke H-S-n)

welldan97
sumber
Anda juga dapat memberikan argumen numerik nke move-text-downdan move-text-up. Ini memperpendek langkah (2) menjadi M-3 H-S-n.
itsjeyd
3

Anda bisa menggunakan memperluas-wilayah untuk menandai blok, jika itu adalah unit semantik, seperti fungsi (Situs web paket menjelaskan ini lebih terinci). Kemudian gerakkan itu seperti yang dijelaskan oleh respons yang lain. Tergantung di mana Anda berada di blok, satu ketukan dapat menandai semuanya.

rlazo
sumber
Dapatkah Anda memperluas ini? Apa maksudmu blok nyata? Seperti blok fungsi?
Edgar Aroutiounian
Ya, istilah yang digunakan dalam paket adalah "unit semantik" yang dapat berupa kata, baris, blok kode, fungsi, kelas, seluruh file. Saya telah mengedit jawaban untuk menyertakan tautan ke paket yang menjelaskan hal ini dengan lebih baik.
rlazo
2

Jika Anda menggunakan evil-mode, Anda alternatif dapat menggunakan experintah: :4,6m9(yang moves garis 4ke 6garis 9).

shosti
sumber
Saya tidak mengerti menyebutkan fitur eksotis seperti emulasi ketika itu tidak ada hubungannya dengan pertanyaan.
Gilles 'SO- stop being evil'
2
Gilles: evil-modetidak jelas - ia memiliki hampir 18.000 unduhan di melpa. Jawaban lain yang digunakan expand-region, yang juga merupakan paket eksternal. Untuk situs tanya jawab, mungkin baik untuk menyertakan beberapa cara untuk mencapai hal yang sama dengan paket yang berbeda (meskipun mungkin baik untuk membuat beberapa pedoman).
shosti