Проблема в том, что iw
- это отдельный текстовый объект, он не является модификатором i
+ motion w
.Вам необходимо отобразить iz
и az
в этом случае:
onoremap iz iw
onoremap az aw
.Обратите внимание, что это будет ждать, пока вы нажмете z
только в течение некоторого времени (см. :h 'timeoutlen'
).Чтобы он работал как iw
(например, подождите z
навсегда), вам следует попробовать следующее:
function s:MapTOPart(tostart)
let char=getchar()
if type(char)==type(0)
let char=nr2char(char)
endif
return a:tostart.((char is# 'z')?('w'):(char))
endfunction
onoremap iz iw
onoremap az aw
onoremap <expr> i <SID>MapTOPart('i')
onoremap <expr> a <SID>MapTOPart('a')
Вам придется сделать то же самое для всех i*
и a*
текстовые объекты, которые вы используете, потому что с приведенным выше кодом хорошо работают только iz
и az
;по какой-то причине iw
необходимо либо набрать слишком медленно, либо ввести iww
.