如何在Vim中以(插入)选择模式剪切文本而不产生不必要的行为?
我目前正在我的如何在Vim中以(插入)选择模式剪切文本而不产生不必要的行为?,vim,cut,keymapping,Vim,Cut,Keymapping,我目前正在我的.vimrc文件中使用此键映射来模拟Windows剪切键盘快捷键。剪切,意思是复制和删除所选文本 vnoremap“+x 这个键映射是vim附带的mswin.vim脚本的一部分,我不使用它,我只使用该文件中的一些键映射 然后,当我在插入模式下从Vim内选择文本并按下CtrlX时,文本被复制并删除,但会产生不必要的副作用,即光标向后移动几个字符,并执行Vim的CtrlX按下的正常行为,即直接减少光标下的数字 例如,如果我想更改以下代码以剪切第二次出现的单词渲染器,我从以下代码开始:
.vimrc
文件中使用此键映射来模拟Windows剪切键盘快捷键。剪切,意思是复制和删除所选文本
vnoremap“+x
这个键映射是vim附带的mswin.vim
脚本的一部分,我不使用它,我只使用该文件中的一些键映射
然后,当我在插入模式下从Vim内选择文本并按下CtrlX时,文本被复制并删除,但会产生不必要的副作用,即光标向后移动几个字符,并执行Vim的CtrlX按下的正常行为,即直接减少光标下的数字
例如,如果我想更改以下代码以剪切第二次出现的单词渲染器
,我从以下代码开始:
Renderer.setClearColorHex(0x7DB6D5, 1.0);
Renderer.setSize(SCREEN_WIDTH, SCREEN_HEIGHT);
Renderer.setClearColorHex(0x7DB6D5, 1.-1); // <--- oh dear!
.setSize(SCREEN_WIDTH, SCREEN_HEIGHT);
结果是:
Renderer.setClearColorHex(0x7DB6D5, 1.0);
Renderer.setSize(SCREEN_WIDTH, SCREEN_HEIGHT);
Renderer.setClearColorHex(0x7DB6D5, 1.-1); // <--- oh dear!
.setSize(SCREEN_WIDTH, SCREEN_HEIGHT);
Renderer.setClearColorHex(0x7DB6D5,1.-1);//您是否真的使用了mswin.vim
?好了,很多事情都是为了允许在插入模式下进行编辑和所有类似的畸形操作;如果只取出一个小片段,就不能保证它能正常工作
如果您使用MSWIN兼容性,并且此映射已经在MSWIN.vim
中,为什么要将其放在vimrc
中
如果不使用MSWIN兼容性,这里有很多错误的地方:
- “编辑”文本不是在插入模式下完成的,您必须返回到正常模式并在那里执行编辑
- 在正常模式下,
d
是Ctrl+X的正确等效项,因为它删除您希望它删除的内容并将其放入默认寄存器,准备粘贴到其他位置
- 您不需要选择一个单词来删除它,假设您在
Renderer
的R
上,您应该执行dw
来删除它,直到当前单词结束
它与文件Snipmate\after\plugin\Snipmate.vim
中的Snipmate插件冲突
我把这些行注释掉了,一切都很好
" snor <bs> b<bs>
" snor <right> <esc>a
" snor <left> <esc>bi
" snor ' b<bs>'
" snor ` b<bs>`
" snor % b<bs>%
" snor U b<bs>U
" snor ^ b<bs>^
" snor \ b<bs>\
" snor <c-x> b<bs><c-x>
“snor b
“打呼噜
“鼾声毕
“哼‘b’
“snor`b`
“鼾声%b%
“呼噜咕噜
“鼾声^b^
“snor\b\
“鼾声b
这实际上并没有回答问题。“避免这种不必要的行为”的方法是按预期使用Vim。无论如何,我已经尝试复制您的问题,但没有(坏)幸运的是:
成功地剪切了所选内容,而没有减少任何内容。也许你可以尝试使用snoremap
而不是vnoremap
,因为你不是在视觉模式下,而是在选择模式下。另外,请允许我重复我的问题:你是否使用mswin.vim
以及另一个请求:你能粘贴你的e> vimrc
,以便我们可以查看是否有冲突?您的映射(“+x
)应该做的是“删除给定文本并将其放入寄存器+
”。相反,它会“删除给定的文本并将其放入寄存器+
,然后上移一行并减少光标右侧的第一个数字”:“+xk
。这太奇怪了,也许你有其他干扰映射?你是否要提供我要求的其他信息?你用鼠标选择吗?是的,我用鼠标选择。