Vim按键映射在链式命令中失效:dht/cht无法工作的问题排查
问题原因
你当前的映射错误地将普通模式下的h映射成了进入插入模式的i命令,而非文本对象的前缀i;同时t的映射仅在普通/运动模式生效,没有覆盖文本对象所需的操作符等待和可视模式,导致dht/cht无法被解析为合法的“删除/修改内部单词”操作。
具体来说:
noremap h i是普通模式映射,按h会直接进入插入模式,而非作为文本对象前缀使用。当你输入dh时,实际是执行d+ 进入插入模式的i,这本身就不符合文本对象的语法,只是dhw碰巧因为后续的w被解析成diw才正常工作。noremap t w同样只覆盖了普通/运动模式,在文本对象的语境下(比如di之后),t的映射没有生效,导致dit不是合法的文本对象操作。
解决方案
修改映射,针对文本对象所需的操作符等待模式(omap)和可视模式(xmap)配置,同时删除普通模式下错误的h映射:
map u <Up> map n <Left> map e <Down> map i <Right> " 配置文本对象前缀:h 替代 i(操作符等待+可视模式) omap h i xmap h i " 配置文本对象:t 替代 w(操作符等待+可视模式) omap t w xmap t w
这样修改后:
- 普通模式下按
h不会再进入插入模式,而是在操作符等待(比如按d/c之后)和可视模式下作为文本对象前缀使用。 dht会被解析为diw(删除内部单词),cht会被解析为ciw(修改内部单词),和你预期的一致。
内容的提问来源于stack exchange,提问作者goldlil
相关产品推荐
相关产品推荐

