Menggunakan expand-region
Saya akan merekomendasikan menginstal expand-region
paket (tersedia di Melpa juga). Ini akan berguna untuk mengedit situasi yang disebutkan dalam contoh Anda dan banyak lagi.
expand-region
cerdas. Berdasarkan mode utama, ini akan mencoba mencari tahu apa yang Anda coba pilih. Saya tidak tahu dari bahasa mana Anda memiliki cuplikan contoh jadi saya akan menggunakan cuplikan kode contoh Anda dan sedikit memodifikasinya untuk Python (hapus;). Jadi penjelasan saya di bawah ini adalah dengan potongan kode di bawah ini dalam python-mode
buffer.
ref = open('specific-file-name')
Jika titik di sebelah satu kutipan
Kotak hitam vertikal di bawah ini menunjukkan bagaimana kursor akan terlihat.
# point on left of left quote, the cursor is hiding the quote under it
ref = open(▮specific-file-name')
# point on left of right parenthesis, the cursor is hiding the parenthesis under it
ref = open('specific-file-name'▮
Dalam kedua kasus, ketika Anda melakukannya M-x er/expand-region
, 'specific-file-name'
akan dipilih dan Anda kemudian dapat menekan DEL
(atau backspace) untuk menghapus pilihan.
Jika Anda telah delete-selection-mode
mengaktifkan (Saya ingin itu diaktifkan secara pribadi), Anda dapat mulai mengetik setelah melakukan seleksi dan itu akan menimpa seleksi.
Tentu saja, jika Anda menggunakan er/expand-region
banyak, Anda akan mengikatnya dengan kunci pendek yang mengikat. Saya suka mengikatnya C-\
. Jadi dengan poin di sebelah satu kutipan: C-\fname
akan memberi sayaref = open(fname);
Jika titik ada di suatu tempat di dalam tanda kutip
Menggunakan expand-region
, intinya tidak perlu dekat dengan tanda kutip. Tetapi dalam kasus ini, Anda hanya perlu beberapa stroke kunci (biasanya satu atau dua lagi).
Katakanlah posisi kursor seperti di bawah sekarang:
# cursor shown below is hiding the i character under it
ref = open('specif▮c-file-name')
Menggunakan ikatan yang sama seperti yang saya gunakan di atas:
- Pertama kali saya menekan
C-\
akan memilih specific
.
Sekarang saya hanya perlu menekan \
untuk memperluas pemilihan ( expand-region
fitur). Itu akan memilih specific-file-name
.
Jika Anda telah terikat er/expand-region
untuk C-=
, memukul =
lagi akan melakukan ekspansi tambahan. Baca dokumentasinya tentang cara mengikat kunci untuk penambahan / kontraksi seleksi secara bertahap.
- Memukul
\
sekali lagi akan memilih 'specific-file-name'
.
- Sekarang Anda melanjutkan dengan menekan
DEL
untuk menghapus pilihan dan kemudian ketik fname
. Jika delete-selection-mode
diaktifkan, Anda dapat melewati DEL
stroke.
Singkatnya, dengan delete-selection-mode
diaktifkan, stroke kunci seperti: C-\\\fname
.
Menggunakan change-inner
Saya juga menemukan change-inner
paket oleh expand-region
penulis utama (yang digunakan expand-region
sebagai back-end) untuk melakukan persis apa yang dilakukan Vim ci
(dan juga mengubah bagian luar ).
Dari paket README:
change-inner
memberi Anda ci
perintah vim , membangun expand-region
. Ini paling mudah dijelaskan dengan contoh:
function test() {
return "semantic kill";
}
Dengan titik setelah kata semantik
change-inner "
akan membunuh isi string
change-outer "
akan membunuh seluruh string
change-inner {
akan membunuh pernyataan-kembali
change-outer {
akan membunuh seluruh blok
ref = open(|'specific-file-name');
,,C-M-k
akan memberiref = open(|);
. Kutipan juga sexps seimbang .delete-everything-inside-parens
hal semacam itu, bukandelete-first-sexp-inside-parens
.evil
mengemulasi sebagian besar Vim, dan itu objek teks keluar dari kotak.Dengan kata lain, dengan
evil
diaktifkan dan menggunakan ikatan kunci default,ci(
akan melakukan persis apa yang Anda minta: ubah apa yang ada di dalam tanda kurung terlampir.Lebih tepatnya,
ci(
akan berantaievil-change
keevil-inner-paren
. Anda juga dapat membuat objek teks sewenang-wenang sendiri sesuka Anda.sumber
evil
, mengapa Anda menginginkan yang bukanevil
alternatif?Menggunakan smartparens
Membunuh
1) Gunakan
C-M-u
(sp-backward-up-sexp
) untuk keluar dari'
pembatas.2) Gunakan
C-0 C-M-k
(0
awalan +sp-kill-sexp
) untuk membunuh hal-hal di dalam sexp saat ini atauC-k
(sp-kill-hybrid-sexp
). Yang terakhir hanya berfungsi ketikasmartparens-strict-mode
diaktifkan dan sexp saat ini cocok dalam satu baris.Tandai dan hapus / bunuh / salin
1) Temukan jalan Anda ke awal sexp (dalam contoh ini
C-M-u sp-backward-up-sexp
sudah cukup), tetapkan tandaC-SPC
dan pergi ke akhir sexp dengansp-end-of-sexp
.2) Kemudian Anda dapat melakukan apa pun yang Anda inginkan:
C-w
untuk membunuh wilayah,M-w
untuk membunuh-ring-save (menyalin) wilayah,backspace
menghapusnya tanpa mengacaukan cincin pembunuhan (hanya dengandelete-selection-mode
)Fungsi mark-inside-sexp
smartparens
Paket memilikisp-mark-sexp
fungsi yang menandai seluruh sexp berikutnya, yaitu pembatas dan hal-hal di antara mereka.Anda bisa menggunakan fungsi seperti ini untuk membuang pembatas dari pilihan:
Keluar dari sexp Anda menggunakan
C-M-u
berulang kali dan tandai mark-inside-sexp-using-sp dan kemudian memutuskan apa yang harus dilakukan dengan wilayah aktif.sumber