在Vim中,为什么我不能将键重新映射到`w`?

在我的. 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.

相关文章

解决方案:解决linux下vim乱码的情况:(修改vimrc的内容)全...
Linuxvi/vim所有的UnixLike系统都会内建vi文书编辑器,其他的...
      vim正则匹配:空行:/^$/  /^[\t]*$/注释...
$select-editorSelectaneditor.Tochangelater,run'sele...
上次手贱忘了保存,这次就简单做个备忘吧,把踩过的坑记一下...
Linux之文本编译器小结vim的优势所有的UNIX-LIKE习通都会内置...