Apakah emacs memiliki persamaan dengan perintah VIMs ci? Pada dasarnya saya ingin mengganti teks di dalam satu set tanda kutip.
Dalam vim saya dapat ci) atau ci] atau ci} untuk "mengubah bagian dalam *" ...
Dari atas kepala saya, perintah terdekat adalah M-z "
yang menghapus semuanya dari titik ke kejadian berikutnya "" karakter.
Ada juga C-M-k
, alias "kill balanced expression", yang akan menghapus pernyataan tanda kurung penuh atau string yang dikutip ganda, dll. Berdasarkan pada definisi mode saat ini dari "ekspresi seimbang" dan karakter yang saat ini dalam poin (mis. Hanya berfungsi jika kursor ada di pembukaan '"' atau '(' dll).
Demikian pula dengan saran Justin CM-SPACE memberi Anda "mark-sexp" yang akan memilih untuk menyeimbangkan paren, kutipan, dll. Dan kemudian Anda dapat Cw atau apa pun untuk membuatnya pergi. Jika Anda ingin MELIHAT apa yang akan Anda hapus sebelum Anda menghapusnya ...
Iya! Setara dengan VIMs ci "perintah dalam Emacs adalah ... ci" :-)
http://www.emacswiki.org/emacs-de/Vimpulse
Baru saja menemukan pertanyaan ini; berikut adalah solusi khusus yang berfungsi untuk saya:
(defun seek-backward-to-char (chr)
"Seek backwards to a character"
(interactive "cSeek back to char: ")
(while (not (= (char-after) chr))
(forward-char -1)))
(defun delete-between-pair (char)
"Delete in between the given pair"
(interactive "cDelete between char: ")
(seek-backward-to-char char)
(forward-char 1)
(zap-to-char 1 char)
(insert char)
(forward-char -1))
Kemudian ikat hapus-antara-pasangan ke tombol apa pun yang Anda suka. Bagi saya, saya memilikinya terikat pada Cz i.
Saya khawatir saya tidak tahu tentang fitur ci VIM, tetapi apakah Anda sudah melihat Emacs regexp ganti? Saya tidak dapat berbicara dengan semantik yang tepat atau betapa mudahnya untuk digunakan sebagai perbandingan, tetapi itulah yang akan saya gunakan untuk apa yang saya pikir Anda inginkan.
Saya telah membuat mode minor yang menyediakan beberapa fasilitas Vim yang disebut Markit .
sumber
Magnars (penulis situs EmacsRocks) menulis plugin ini untuk melakukan persis apa yang Anda minta.
https://github.com/magnars/change-inner.el
Jelas, Anda juga bisa menggunakan mode Jahat.
sumber
Inilah versi saya yang akan menghapus semuanya dalam (atau termasuk) sepasang karakter yang cocok. Pasangan karakter didefinisikan dalam daftar sehingga karakter awal / akhir yang cocok diketahui. Saya telah memetakannya ke "Cc i" untuk perubahan dan "Cc a" untuk mengubah semuanya.
Itu juga menyalin karakter yang dihapus ke papan klip untuk ditempelkan nanti.
sumber
Ini adalah sesuatu yang saya lewatkan dari Vim, dan
zap-to-char
sepertinya tidak memotongnya dengan benar.Ini adalah upaya sederhana saya untuk membuat ulang "ci" dan "ca":
Biasanya, case-condition tidak diperlukan, karena parameter ketiga (opsional) dari search-forward / search-backward dimaksudkan untuk menunjukkan apa yang harus dilakukan jika pencarian gagal. Tetapi karena alasan tertentu, menempatkan pencarian kedua sebagai parameter ketiga untuk yang pertama menghasilkan perilaku aneh.
sumber
Saya mencoba solusinya di sini, tetapi menemukan masing-masing dari mereka menginginkan sesuatu, jadi saya datang dengan ini. Ini menerima pembatas awal atau akhir, dan menggunakan fungsi Emacs bawaan untuk menghindari memerlukan tabel terjemahan untuk pembatas.
sumber