Saya menemukan bahwa jika Anda memasukkan awalan numerik sebelum mengeksekusi perintah ex, konvensi yang berlaku adalah mengatur perintah untuk menyiapkan operasi melintasi rentang garis. Itu dijelaskan dalam dokumentasi,
JUMLAH GARIS
Ketika Anda tahu berapa banyak baris yang ingin Anda ubah, Anda bisa mengetikkan angka dan kemudian ":". Misalnya, saat Anda mengetik "5:", Anda akan mendapatkan:
:.,.+4
Sekarang Anda bisa mengetik perintah yang ingin Anda gunakan. Ini akan menggunakan rentang "." (baris saat ini) hingga ". + 4" (empat baris ke bawah). Jadi itu mencakup lima baris.
Sekarang yang saya hadapi adalah fungsi khusus saya, yang ini:
function! MyAmazingEnhancedDot()
if v:hlsearch == 1
:normal! .n
else
:normal! .j
endif
endfun
Ini hanya cara untuk merampingkan tugas berulang yang mencakup pengulangan operasi pada berbagai baris atau lebih dari serangkaian kecocokan pencarian.
Fungsi ini terikat ke hotkey. Seperti Alt+ .atau apa pun.
Tujuan saya adalah untuk dapat melakukan sesuatu yang sangat kuat: Saya harus bisa mengetik /varName<CR>ciwnew-var<ESC>n9<Alt+.>
untuk mencapai penggantian 10 contoh varName
menjadi new-var
.
Apa yang sebenarnya terjadi jika saya melakukan ini adalah ia tidak melakukan penggantian nama dan 9 baris dimanipulasi dengan .
operasi edit saya yang disimpan dari kolom 0.
Saya hanya bisa berasumsi bahwa Vim adalah menafsirkan penekanan tombol saya demikian: :.,.+8 normal! .n
.
Di sisi setengah kaca, :normal! .j
kasus ikatan sebenarnya bekerja, karena j
gerakan yang tidak memiliki efek tidak ada konsekuensi dalam situasi ini. (Saya masih membutuhkannya j
untuk membuatnya berfungsi dalam kasus penggunaan interaktif non-numerik-awalan).
Jadi pertanyaan saya adalah bagaimana saya bisa mengesampingkan perilaku perluasan garis yang diterapkan Vim pada ikatan saya? Apa yang akan fantastis adalah jika saya bisa membaca awalan angka sebagai argumen atau sesuatu seperti itu.
sumber
nnoremap <M-.> :<C-u>call MyAmazingEnhancedDot(v:count1)<cr>
dan melewatkancommand -count=1 EDot call MyAmazingEnhancedDot(<count>)
?:9EDot
. Jika Anda tidak menggunakan banyak perintah ex maka lewati saja.