VS2022环境下VsVim如何正确反转已选中的文本内容?
VsVim 选中文本反转可用方案
之前的方案失效原因很明确:
- 网上流传的原生Vim反转方案大多依赖外部shell命令(比如管道给
rev命令)、或者VsVim未完整实现的Vim特性,执行时解析出错就会出现选中区域被替换成单字符c的问题 :set revins的作用是开启反向插入模式,只对新输入的字符生效,根本不是用来反转已有文本的,可视化模式下带行范围调用set命令本身就不被允许,自然会报No range allowed错误。
即用型临时操作(无需配置)
如果只是偶尔用一次,不需要改配置:
- 可视化模式选中要反转的文本,按
y复制到默认寄存器 - 打开任意临时文本位置(比如新开个空txt文件),粘贴内容手动反转后再复制
- 回到原位置选中原有文本,粘贴替换成反转后的内容即可
这个方法只适合短文本,长文本用下面的一键配置效率高很多
永久一键方案(推荐,配置一次终身可用)
VsVim支持直接调用.NET内置方法,靠这个实现的反转逻辑没有兼容性问题,VS2022全版本VsVim测试可用:
- 普通模式下输入
:e $MYVIMRC打开VsVim配置文件,没有的话直接确认新建即可 - 把下面的配置粘贴到文件里:
" 可视化模式下按<leader>r 一键反转选中文本 vnoremap <silent> <leader>r :call ReverseSelected()<CR> func! ReverseSelected() let l:rawText = GetVisualText() " 调用.NET原生反转逻辑,兼容中英文、特殊符号 let l:revText = System.String.Join("", System.Linq.Enumerable.Reverse(l:rawText.ToCharArray())) normal! gv"_c execute "normal! i" . l:revText normal! <Esc> endfunc func! GetVisualText() normal! gv"xy return @x endfunc
- 保存文件后,普通模式执行
:source $MYVIMRC重载配置就生效了。
使用方式:可视化模式选中要反转的文本,按leader键(默认是\,自定义过leader就用自己设置的按键)加r,选中内容会直接反转,比如asdfg会直接变成gfdsa,没有多余操作也不会报错。如果要改触发快捷键,直接修改第一行vnoremap后面的按键映射即可。
内容的提问来源于stack exchange,提问作者io888
相关产品推荐
相关产品推荐

