在我的.
vimrc中:
- noremap z w
当我检查映射时,:map z仅显示:
- z * w
当我按z时,我的光标按预期移动(到下一个单词).但是,当我尝试使用像diz或ciz这样的东西时,没有任何反应.在我的屏幕底部,di andci出现在我输入的时候,但是一旦我输入z,Vim就兴高采烈地闲着. diw和ciw仍然按预期工作.
我还需要做什么?是否有我不知道的映射模式?
问题是,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 *和* *文本对象执行相同的操作,因为上面的代码只有iz和az工作正常;由于某种原因,我必须输入太慢或键入为iww.