Neovim中使用yw复制单词时如何忽略尾随空格
Neovim执行
yw复制单词带尾随空格的解决方法 问题原因
这不是配置错误或者bug,是Vim/Neovim的原生设计逻辑:w动作的默认行为是移动到下一个单词的起始位置,yw作为y(复制)+w的组合操作,复制范围自然是从当前光标位置到下一个单词开头前的所有内容,当前单词后面跟多少空格,都会被算进复制范围里。
比如光标在Hello开头时,w会跳到后面World的首字母W处,复制内容就会带上Hello后面的空格;变量名后接一堆空格对齐到等号时,w会直接跳到等号位置,复制内容就会带上中间所有连续空格。
解决方法
零配置原生方案
不用改任何配置,直接用yiw(复制内部单词)代替yw就行。这个操作只会选中光标所在位置的单词本身,前后的空格、标点全不会带,不管单词后面跟多少空格,复制出来的都是纯单词内容,完全符合常规复制单词的预期。
改配置适配原有使用习惯
如果你用惯了yw不想改快捷键,选下面任意一种映射加到配置文件里即可:
- 保留
yw“从光标当前位置开始复制”的原有逻辑,只去掉后面的尾随空格:把yw映射到ye。e动作是跳到当前单词的最后一个字符,复制范围到词尾就截止,自然不会带后面的空格。
Neovim Lua配置(0.5+版本通用):
Vimscript配置(全版本Vim/Neovim兼容):vim.keymap.set('n', 'yw', 'ye', { noremap = true, silent = true })
注意:这个映射下如果光标不在单词开头,只会复制光标位置到词尾的内容,和原生nnoremap <silent> yw yeyw的范围逻辑完全一致,只是截断了后面的空格。 - 让
yw不管光标落在单词哪个位置,都直接复制整个完整单词、不带任何空格:把yw映射到yiw,这是很多用户日常使用的通用配置,比原生yw的实用性更高。
Lua配置:
Vimscript配置:vim.keymap.set('n', 'yw', 'yiw', { noremap = true, silent = true })nnoremap <silent> yw yiw
配置生效之后再执行yw,示例里的Hello、LongVariableName后面的尾随空格就不会被一起复制了。
内容的提问来源于stack exchange,提问作者kishikaisei
相关产品推荐
相关产品推荐

