Bagaimana cara menghapus beberapa karakter pertama dari setiap baris?


Jawaban:


28

Itu bahkan lebih mudah! Sekali lagi, gunakan perintah persegi panjang . Pindah ke salah satu sudut persegi panjang yang ingin Anda hapus, tekan C-SPCuntuk mengatur tanda. Pindah ke sudut lain dari persegi panjang dan tekan C-x r d( delete-rectangle). Misalnya, pindah ke baris pertama yang ingin Anda tindak lanjuti, tekan C-aatau homeuntuk pergi ke awal baris, pindah ke bawah ke baris terakhir yang ingin Anda tindak lanjuti, untuk pindah ke sudut kanan bawah, dan kemudian untuk menghapus.C-u number C-fC-x r d

Jika baris terakhir memiliki lebih sedikit dari jumlah karakter yang diinginkan, mungkin lebih mudah menggunakan sudut kiri bawah dan kanan atas. Atau, Anda dapat menyisipkan karakter sampah (ini berguna jika baris pertama dan baris terakhir lebih pendek).

Anda dapat menggunakan C-x r kuntuk membunuh persegi panjang, yang memungkinkan Anda untuk menarik ( C-x r y) nanti (pindah ke sudut kiri atas tempat di mana Anda ingin memasukkannya).

Anda juga dapat menggunakan C-x r t( string-rectangle) dan memasukkan string kosong.

Perintah persegi panjang didasarkan pada posisi kolom. Jika Anda ingin menghapus n karakter, bukan n kolom (yang membuat perbedaan dengan karakter multi-kolom seperti tab), Anda dapat menggunakan penggantian ekspresi reguler : ganti ^.\{42\}dengan nol untuk menghapus 42 karakter pertama dari setiap baris.


3
alih-alih mencoba mengingat semua perintah persegi panjang, Anda juga dapat menggunakan Cx spc, alih-alih C-spc, yang mengubah wilayah Anda menjadi persegi panjang dan semuanya berfungsi.
Malabarba

1
@Malabarba Hanya sejak Emacs 24 sekalipun. (Menulis ini di mesin dengan Emacs 23. Mereka masih banyak di sekitar.)
Gilles 'SO-stop being evil'

2
Belasungkawa ... :-(
Malabarba

Ini hanya bekerja untuk saya di GNU Emacs 23.4.1 (x86_64-pc-linux-gnu, GTK + Versi 2.24.21) dari 2013-10-25 di allspice, dimodifikasi oleh Debian
davidrmcharles

4

Kemungkinan lain: Saya sangat suka menggunakan banyak kursor untuk tugas-tugas seperti ini. Tersedia dalam package.elmelalui MELPA, itu menjadi bagian tak terpisahkan dari emacs saya. Saya hanya akan memilih I said(dan mungkin termasuk baris sebelum), gunakan M-x mc/mark-all-like-this, dan berada di jalan saya. Jika Anda ingin lebih banyak kontrol berbutir halus, Anda dapat menggunakan mc/mark-next-like-thisatau mc/mark-next-lines.

Pengikat kunci saya:

(use-package multiple-cursors
  :bind (("C->"   . mc/mark-next-like-this)
         ("C-M->" . mc/mark-all-like-this-dwim)))

Batu Emacs yang wajib! episode: http://emacsrocks.com/e13.html


3

Jika Anda telah cua-modemengaktifkan, maka:

  • C-a untuk pindah ke awal baris,
  • C-RET untuk memulai persegi panjang,
  • Kemudian pindah dengan tombol panah atau emacs move command like C-f
  • DEL untuk menghapus pilihan

Saya lebih suka cua-modecara kerjanya, dibandingkan dengan persegi panjang standar Emacs di mana yang setara adalah:

  • C-a untuk pindah ke awal baris,
  • C-SPC untuk memulai persegi panjang,
  • Kemudian pindah dengan tombol panah atau emacs move command like C-f
  • C-x r d untuk menghapus pilihan

The cua-modemenyimpan tiga penekanan tombol dibandingkan dengan standar Emacs persegi panjang.


3

Demi kelengkapan: menghapus 3 karakter pertama dari setiap baris (secara formal: dari titik aktif, atau di wilayah) dapat dilakukan dengan mengganti regexp ^...(atau lebih umum:) ^.\{3\}dengan string kosong.

Penjelasan: dalam regexen, ^berarti "awal garis", .berarti "karakter apa saja", dan \{n\}berarti " n pengulangan hal sebelumnya".

Ini memiliki manfaat tambahan untuk menjadi interaktif (kecuali jika ada yang menekan !, yang membuat query-regexp-replacesemuanya diganti mulai sekarang tanpa pertanyaan lebih lanjut).


1
Mengapa downvotes?
mbork

0

Dan satu kemungkinan lagi:

F3C-aC-3C-dC-nF4

merekam makro keyboard, pada dasarnya mengatakan "pindah ke awal baris, hapus tiga karakter, dan pindah ke baris berikutnya". Kemudian, Anda dapat memutar ulang hingga akhir buffer dengan C-uF4, atau C-xC-krmenerapkannya ke garis di wilayah. Ini memiliki satu kelemahan: itu akan rusak ketika setiap baris memiliki kurang dari 3 karakter.


-1

Jika itu hanya sebuah garis, Anda dapat zap-to-char dengan Mz dengan asumsi bahwa karakter tidak diulangi antara titik dan yang Anda ingin hapus hingga. Untuk beberapa kasus, ini lebih cepat daripada membuat wilayah.

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.