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

能否实现Vim映射:用寄存器0替换任意符号包裹内容?

Vim 实现可变包裹符号的内容替换映射

完全可行,以下是具体实现方案,满足你所有需求:

实现步骤

1. 暂存选中内容到独立寄存器

先给可视模式添加 Yank 映射,把选中内容存到自定义寄存器z(选一个未被默认占用的寄存器即可),这样不会改动寄存器0:

vnoremap <silent> y "zy

如果不想修改默认的y键,可以改成其他组合,比如:

vnoremap <silent> <leader>y "zy

之后用v选中文本,按对应的按键(y或<leader>y)暂存内容。

2. 定义可变符号的替换映射与函数

在配置文件中添加以下映射和函数,实现按<leader>r加符号触发替换:

nnoremap <leader>r :call ReplaceWrappedContent(v:char)<CR>
function! ReplaceWrappedContent(char) abort
  " 执行 ci{符号} 操作,删除包裹内容并进入插入模式
  execute "normal! ci" . a:char
  " 粘贴暂存的内容,退出插入模式
  execute "normal! \"zp\<Esc>"
endfunction

3. 使用方式

  • 用v模式选中文本,按暂存按键(比如y)保存内容到z寄存器
  • 移动到目标包裹符号(如"、()所在位置,按下<leader>r",即可替换双引号内的内容为之前选中的文本
  • 按下<leader>r(则替换括号内的内容
  • 操作完成后,按.键可以重复最近一次的替换操作(比如之前用的是<leader>r",.就会再次执行双引号内的内容替换)

关键说明

  • 自定义寄存器z专门用来暂存替换内容,完全不会影响寄存器0的原有内容
  • 函数通过v:char获取后续输入的符号,动态执行ci{符号}操作,适配所有Vim支持的配对符号
  • 整个操作符合Vim的重复机制,.可以正确重复之前的替换动作

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 13:05:04