Solusi paling sederhana: gunakan ciW
untuk memilih kata yang dibatasi spasi.
Masalah yang lebih besar berkaitan dengan nilai _
karakter dalam tabel sintaksis . Masalahnya adalah _
, secara default, konstituen simbol dalam tabel sintaks, dan Anda ingin memperlakukannya sebagai konstituen kata.
Jika Anda menggunakan emacs 24.4, Anda bisa mencoba mengaktifkannya superword-mode
. Saya belum mencobanya sendiri, jadi jarak tempuh Anda mungkin berbeda.
Alternatif lain adalah memodifikasi tabel sintaksis sendiri dan memberi tahu Emacs bahwa Anda ingin agar _
karakter tersebut diperlakukan sebagai konstituen kata, seperti:
(modify-syntax-entry ?_ "w")
Setelah Anda melakukan itu, ciw
berfungsi seperti yang Anda inginkan, sehingga akan memilih semua abc_def_ghi
daripada hanya adil def
.
Melakukannya dengan cara ini, bagaimanapun, mungkin berlebihan, terutama jika Anda hanya ingin _
menghitung sebagai bagian dari kata untuk objek teks. Sebagai gantinya, Anda dapat memberi saran evil-inner-word
sebagai berikut:
(defadvice evil-inner-word (around underscore-as-word activate)
(let ((table (copy-syntax-table (syntax-table))))
(modify-syntax-entry ?_ "w" table)
(with-syntax-table table
ad-do-it)))
Sekarang, _
masih merupakan konstituen simbol untuk semuanya kecuali objek teks kata-dalam, jadi ciw
akan melakukan apa yang Anda inginkan tanpa menyentuh fungsi dari hal lain.
Anda dapat membaca lebih lanjut tentang memodifikasi tabel sintaks pada node EmacsWiki .
w
,aw
, dll), Anda dapat melakukan hal yang sama dengan fungsi berikut juga:evil-forward-word-begin
,evil-forward-word-end
,evil-backward-word-begin
,evil-backward-word-end
,evil-a-word
,evil-inner-word
. Catatan: Anda harus berubahunderscore-as-word
menjadi nilai yang berbeda, unik (sewenang-wenang).(modify-syntax-entry ?_ "w")
tidak bekerja untuk saya karena suatu alasan. Melakukannya secara interaktif juga tidak berhasil. Adakah yang tahu mengapa atau bagaimana saya bisa men-debug ini? Saya menggunakan Spacemacs jika itu relevan.(modify-syntax-entry ?_ "w" rust-mode-syntax-table)
, maka itu berhasil.superword-mode
tidak memengaruhi pergerakan masukevil-mode
. Jadi bukan konstituen untuk memodifikasi tabel sintaks.Cuplikan berikut akan membuat Evil memperlakukan simbol Emacs sebagai kata.
Ini memiliki keuntungan yang berubah tergantung pada bahasa:
adalah satu simbol
lisp-mode
tetapi dua simbol (dipisahkan oleh-
) dalamc-mode
.sumber
The spacemacs FAQ menawarkan solusi bahasa-spesifik berikut:
Ini juga berfungsi di emacs biasa. Dengan kejahatan, itu bekerja dengan semua perintah yang berhubungan dengan kata (
w
,e
,*
,#
, dll)Secara umum, ini akan melakukannya untuk semua mode utama:
sumber
'prog-mode-hook
opsi untuk mencakup setiap bahasa?Emacs 24 diperkenalkan
superword-mode
, mode minor yang memperlakukan garis bawah sebagai bagian dari kata-kata.evil-mode
menghargai pengaturan ini.Berikut dokumentasinya:
sumber
evil-mode
, sayangnya, ada bug saatsuperword-mode
diaktifkan. Itu menyebabkan beberapa perilaku yang tidak menentu ketikaevil-forward-word-begin
dipanggil: github.com/emacs-evil/evil/issues/721Saya sebenarnya cukup menyukai perilaku ini karena saya mungkin ingin hanya mengedit sebagian kata dan menjaga bagian lain tetap utuh. Jika saya ingin membahas seluruh kata saya selalu dapat menggunakan
E
,W
atauB
, varian huruf besar. Ini memberi saya kontrol yang lebih baik.sumber