在我的.
vimrc中:
noremap z w
当我检查映射时,:map z仅显示:
z * w
当我按z时,我的光标按预期移动(到下一个单词).但是,当我尝试使用像diz或ciz这样的东西时,没有任何反应.在我的屏幕底部,di andci出现在我输入的时候,但是一旦我输入z,Vim就兴高采烈地闲着. diw和ciw仍然按预期工作.
我还需要做什么?是否有我不知道的映射模式?
问题是,iw是单个文本对象,它不是修饰符i motion w.在这种情况下,您需要映射iz和az:
原文链接:https://www.f2er.com/bash/384663.htmlonoremap 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.