Saya ingin menulis perintah yang menentukan "kata di bawah kursor" di VIM. Misalnya, saya memiliki kursor pada sebuah kata dan saya membuatnya muncul dua kali. Misalnya, jika kata tersebut adalah "abc" dan saya ingin "abcabc" maka saya dapat mengetik:
:s/\(abc\)/\1\1/
Tapi kemudian saya ingin bisa memindahkan kursor ke "def" dan menggunakan perintah yang sama untuk mengubahnya menjadi "defdef":
:s/\(def\)/\1\1/
Bagaimana saya bisa menulis perintah di baris perintah sehingga melakukan ini?
:s/\(*whatever is under the commandline*\)/\1\1
sumber
yiw
atasbyw
hanya karena memori otot. Dalam skenario di mana kursor Anda kebetulan berada di karakter pertama dalam kata, Anda harus menghilangkanb
dan cukup ketikyw
vs Anda dapat menghilangkani
inyiw
. Kecelakaan bisa terjadi, dan memperbaiki kesalahan tentu saja lebihSaat dalam mode baris perintah, CTRL+ R CTRL+W akan memasukkan kata di bawah kursor.
Lihat bantuan untuk
c_CTRL-R
daftar semua register khusus lainnya:sumber
yiw
: Yank kata batin (kata di bawah kursor). Perintah ini juga menggerakkan kursor ke awal kata.P
: Tempel sebelum kursor.Anda kemudian dapat memetakan mis:
< ALT > - D
ke perintah ini:sumber
Cara mudah lainnya untuk melakukannya adalah dengan menggunakan
*
perintah.Dalam mode biasa, saat melewati satu kata, ketik
*
menjadikan pola pencarian kata saat ini (misalnya \ <abc \>).:s//
melakukan substitusi menggunakan pola pencarian saat ini, dan\0
di bagian penggantian adalah string yang cocok.Anda kemudian dapat mengulangi perilaku ini, mengucapkan kata "def", baik dengan mengetik lagi, atau dengan mengetik
@:
hanya mengulangi perintah ex terakhir, tanpa perlu <Enter>, dalam hal ini substitusi.Anda juga dapat merekam makro cepat untuk melakukan ini menggunakan
q
perintahKemudian ulangi sesuka hati Anda dengan mengetik
ketika lebih dari kata yang ingin Anda gandakan. Karena ini hanya satu karakter yang kurang dari solusi sebelumnya, itu mungkin tidak sepadan bagi Anda - kecuali Anda akan melakukan ex-perintah lain antara kata-penggandaan, yang akan mengubah perilaku
@:
sumber
Anda harus menghindari garis miring terbalik dalam pemetaan. Anda juga dapat memasukkan string substitusi dalam pemetaan.
sumber
akan melakukan apa yang Anda gambarkan.
juga akan memajukan kursor ke kata berikutnya.
sumber
@ user11211 memiliki cara paling mudah untuk menduplikasi kata di bawah kursor:
yank kata bagian dalam (memindahkan kursor ke awal kata), tempel (sebelum kursor).
misalnya. straigh [t] forward ----> straightforwar [d] straightforward
[] adalah kursor
Untuk menguraikan ...
Anda mungkin ingin mengarahkan kursor ke kata yang digandakan:
straigh [t] forward ----> lugas, lugas []
CATATAN:
adalah kata batin yank (tanpa spasi)
adalah yank semua kata (termasuk spasi kosong).
Oleh karena itu, duplikat kata termasuk spasi, dan kursor posisi.
straigh [t] forward ----> straightforward straightforward []
sumber
sumber
n
flag to:substitute
untuk mencetak berapa kali kata di bawah kursor muncul di buffer saat ini. Cukup pintar, tapi sebenarnya bukan jawaban untuk pertanyaan ini.