You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

VS2022环境下VsVim如何正确反转已选中的文本内容?

VsVim 选中文本反转可用方案

之前的方案失效原因很明确:

  • 网上流传的原生Vim反转方案大多依赖外部shell命令(比如管道给rev命令)、或者VsVim未完整实现的Vim特性,执行时解析出错就会出现选中区域被替换成单字符c的问题
  • :set revins的作用是开启反向插入模式,只对新输入的字符生效,根本不是用来反转已有文本的,可视化模式下带行范围调用set命令本身就不被允许,自然会报No range allowed错误。

即用型临时操作(无需配置)

如果只是偶尔用一次,不需要改配置:

  • 可视化模式选中要反转的文本,按y复制到默认寄存器
  • 打开任意临时文本位置(比如新开个空txt文件),粘贴内容手动反转后再复制
  • 回到原位置选中原有文本,粘贴替换成反转后的内容即可
    这个方法只适合短文本,长文本用下面的一键配置效率高很多

永久一键方案(推荐,配置一次终身可用)

VsVim支持直接调用.NET内置方法,靠这个实现的反转逻辑没有兼容性问题,VS2022全版本VsVim测试可用:

  1. 普通模式下输入:e $MYVIMRC打开VsVim配置文件,没有的话直接确认新建即可
  2. 把下面的配置粘贴到文件里:
" 可视化模式下按<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
  1. 保存文件后,普通模式执行:source $MYVIMRC重载配置就生效了。

使用方式:可视化模式选中要反转的文本,按leader键(默认是\,自定义过leader就用自己设置的按键)加r,选中内容会直接反转,比如asdfg会直接变成gfdsa,没有多余操作也不会报错。如果要改触发快捷键,直接修改第一行vnoremap后面的按键映射即可。

内容的提问来源于stack exchange,提问作者io888

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 09:21:35