Saya lakukan C-a
C-k
C-k
untuk membunuh seluruh titik garis aktif.
Jika saya ingin menyalin garis alih-alih membunuhnya, saya dapat menekan C-/
C-/
tepat setelah mengetik urutan di atas.
Atau, saya bisa melakukannya C-a
C-SPC
C-n
M-w
.
Apakah ada cara yang lebih cepat untuk membunuh atau menyalin seluruh titik garis aktif?
copy-paste
editing
itu hanya
sumber
sumber
kill-whole-line
. :)evil-mode
. Pelajari perintah Vim, Anda tidak akan menyesal!Jawaban:
Anda dapat menggunakan
kill-whole-line
untuk membunuh seluruh titik garis aktif. Posisi titik tidak masalah. Perintah ini terikat C-S-DELsecara default.Anda juga dapat menginstruksikan
kill-line
(terikat pada C-k) untuk membunuh seluruh baris dengan mengatur variabelkill-whole-line
kenil
nilai yang tidak bernilai:Perhatikan bahwa titik tersebut harus berada di awal baris agar ini berfungsi.
Lalu ada dua permata ini (via emacs-fu ):
Dengan ini di tempat Anda dapat membunuh atau menyalin titik garis aktif dengan satu penekanan tombol :
Perhatikan bahwa jika ada wilayah aktif,
kill-region
dankill-ring-save
akan terus melakukan apa yang biasanya mereka lakukan: Bunuh atau salin.Porting
slick-cut
danslick-copy
ke sistem saran baruEmacs 24.4 memperkenalkan sistem saran baru . Sementara
defadvice
masih berfungsi , ada kemungkinan bahwa itu akan ditinggalkan demi sistem baru dalam versi Emacs di masa depan. Untuk mempersiapkan itu, Anda mungkin ingin menggunakan versi terbaru darislick-cut
danslick-copy
:sumber
kill-region
dankill-ring-save
masih berfungsi bahkan ketika wilayah itu tidak "aktif." Ini akan mengesampingkan perilaku itu. Saya menggunakan perilaku itu dari waktu ke waktu, tetapi jika Anda tidak terbiasa menggunakannya dengan cara ini, maka Anda mungkin tidak akan melihat perbedaannya.kill-region
etc dapat digunakan / berguna ketikamark-active
adalahnil
.C-SPC
dua kali untuk mengaktifkan dan kemudian menonaktifkan tanda. Pindahkan kursor di tempat lain dalam file dan jalankankill-region
dan itu akan membunuh wilayah antara titik dan tanda, meskipun tanda itu tidak aktif. Beberapa contoh perintah yang mengatur (tetapi tidak mengaktifkan) tanda adalahyank
danisearch
. Setelah melakukan perintah semacam ini, saya tahu di mana tandanya, bahkan jika itu tidak aktif, dan banyak perintah (termasukkill-region
) akan membiarkan saya menggunakan tandanya tanpa secara eksplisit mengaktifkannya.Solusi yang saya temukan untuk diri saya sendiri adalah dengan menggunakan argumen awalan.
Bagi saya, membunuh setengah baris adalah fitur yang berguna, tetapi saya ingin cara yang lebih mudah untuk membunuh seluruh baris juga. Jadi saya membuatnya sehingga
kill-line
hanya membunuh semua yang terlihat ketika diberi argumen awalan.Dengan makro kecil ini,
C-k
masih membunuh dari titik, tetapiC-3 C-k
menelan tiga baris penuh. Sebagai bonus, kita mendapatkankill-whole-line
perilaku dengan melakukanC-1 C-k
.sumber
kill-ring-save
tidak menerima argumen awalan ...kill-visual-line
pastiC-k
. Saya akan memperbaikinya. Terima kasih lagi.Ada paket bernama
whole-line-or-region
yang menyarankan berbagai perintah bawaan sehingga mereka bertindak pada baris saat ini jika tidak ada wilayah yang aktif, sehinggaM-w
akan menyalin baris saat ini, danC-w
akan membunuhnya, misalnya. Saya telah menggunakan paket ini selama bertahun-tahun, dan merasa sangat diperlukan.Selain itu, paket ini membuatnya sehingga awalan numerik akan menunjukkan jumlah baris yang akan ditindaklanjuti, sehingga
M-2 M-w
akan menyalin dua baris. Jawaban lain di sini tidak menyediakan fungsionalitas praktis itu.Saya mengambil alih pemeliharaan paket di akun github saya ketika penulis berhenti memeliharanya dan menjadi tidak responsif.
whole-line-or-region
juga menyediakan fasilitas untuk menambahkan perilaku ini ke perintah lebih lanjut, jika Anda membutuhkannya.sumber
Ini bukan jawaban untuk emacs ortodoks. Namun, jika Anda bersedia menghujat dengan
evil
pengeditan modal, Anda dapat:dd
untuk garis pembunuhancc
untuk garis salinanKeduanya dapat diawali dengan jumlah baris untuk membunuh / menyalin (misalnya,
4cc
akan menyalin 4 baris berikutnya).sumber
Selain jawaban @itsjeyd, bolehkah saya menyarankan kedua fungsi itu?
Kemudian, definisi kunci (Anda mungkin ingin mengadaptasinya):
(global-set-key (kbd "<f2>") 'xah-cut-line-or-region) ; cut
(global-set-key (kbd "<f3>") 'xah-copy-line-or-region) ; copy
(global-set-key (kbd "<f4>") 'yank) ; paste
Atas perkenan ErgoEmacs
sumber
Sebagai perpanjangan dari jawaban @ itsjeyd di atas, saya memiliki yang berikut. (Logikanya mungkin bisa dibersihkan sedikit dan saya akan ketika saya port ke sistem saran baru, saya mungkin juga akan memperpanjang untuk memperpanjang ke
sexp
/paragraph
jika diulang lagi).Inisial
C-w
/M-w
hanya akan mengambil kata pada titik, sementara memanggilnya kedua kalinya akan mengambil seluruh baris.sumber
Karena Anda ingin melakukannya dengan penekanan tombol minimal, Anda dapat menggunakan paket kunci-kunci David Andersson yang sangat baik . "Kunci nada" adalah dua tombol yang ditekan secara bersamaan, atau satu tombol yang ditekan dua kali.
Anda dapat mengikat akord kunci apa saja ke fungsi-fungsi itu.
sumber
Cara yang kurang ad-hoc adalah mendefinisikan
mark-whole-line
, yang mana Emacs harus memiliki perintah default untuknya.Maka
C-2 C-w
akan melakukan pekerjaan.Itu juga membuat segalanya lebih mudah seperti mengomentari seluruh baris saat ini.
sumber
Ini adalah modifikasi dari jawaban oleh itsjeyd - saat ini jawaban dengan suara terbanyak, dan yang telah saya gunakan selama bertahun-tahun. Namun, ia memiliki masalah: Versi disarankan
kill-ring-save
kadang-kadang akan gagal karena tanda tidak disetel (biasanya di buffer baru), dan bahkan ketika itu berhasil, kursor melakukan tarian aneh setelah menggunakan fungsi untuk menyalin satu baris . Setelah beberapa penggalian, saya sadar bahwa ini terjadi karenakill-ring-save
panggilanindicate-copied-region
setelah melakukan tugasnya, tetapi sebagai titik dan tanda tidak cocok dengan wilayah yang disalin,indicate-copied-region
ditandai wilayah yang salah.Cukup kata. Berikut adalah solusi yang memperbaiki ini:
Tidak ada yang salah dengan saran mereka
kill-region
. Berikut ini adalah varian dari semuanya, secara gaya lebih konsisten dengan yang di atas:Perhatikan bahwa jika
transient-mark-mode
tidak dinyalakan, saran ini tidak melakukan apa pun.sumber
whole-line-or-region
sebagai gantinya; lihat jawabannya oleh @sanityinc.Saya menggunakan paket yang disebut composable.el . Hal yang rapi tentang paket ini adalah memodifikasi Mw dan Cw (menyalin dan membunuh perintah) menjadi lebih seperti Vim dengan twist karena menerima perintah emacs tradisional sebagai gantinya. Jadi,
C-w l
bunuh seluruh lini. Tetapi Anda juga dapat melakukan hal-hal sepertiC-w M->
membunuh file. Kedua perintah bertindak seperti biasa ketika menandai suatu wilayah.sumber