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

如何实现类似Vim中dw/dd的操作,将对应范围文本替换为等长空格?

实现空格覆盖类d操作的方案

临时使用方法(无需修改配置)

如果你只是偶尔需要这个操作,不需要自定义配置,可以直接用Vim自带功能实现:

  1. 按下v进入可视模式,选中你要覆盖的范围:
    • 要实现类似dw的效果就按vw选中到单词结尾
    • 要实现类似daw的效果就按vaw选中整个单词
    • 要实现类似d$的效果就按v$选中到行尾
  2. 选中后按下r再敲空格,选中区域就会全部被替换为等长度的空格,完全符合你给出的示例需求。

永久配置方法(支持类d指令的语法)

如果需要高频使用这个功能,可以在你的Vim/Neovim配置文件中添加自定义映射,实现和d操作完全一致的使用逻辑,下面示例把功能绑定到<leader>r(<leader>默认是反斜杠\,也可以自己修改):

" 普通模式映射:支持搭配motion使用,用法和d指令完全一致
nnoremap <leader>r :set opfunc=ReplaceWithSpace<CR>g@
" 可视模式映射:直接替换选中内容为空格
vnoremap <leader>r :call ReplaceWithSpace(visualmode(), 1)<CR>

function! ReplaceWithSpace(type, ...)
  let sel_save = &selection
  let reg_save = @@
  set selection=inclusive

  if a:0
    silent exe "normal! `<" . a:type . "`>y"
  elseif a:type == 'line'
    silent exe "normal! '[V']y"
  elseif a:type == 'block'
    silent exe "normal! `[\<C-V>`]y"
  else
    silent exe "normal! `[v`]y"
  endif

  let spaces = repeat(' ', strlen(@@))
  call setreg('"', spaces, getregtype('"'))

  if a:0
    silent exe "normal! gvP"
  else
    silent exe "normal! `[v`]p"
  endif

  let &selection = sel_save
  let @@ = reg_save
endfunction

配置完成后重启Vim即可使用,操作逻辑和d指令完全一致:

  • <leader>rw:等价于空格版dw,覆盖光标到当前单词结尾的内容为空格
  • <leader>raw:等价于空格版daw,覆盖整个当前单词为空格
  • <leader>r$:等价于空格版d$,覆盖光标到行尾的内容为空格
  • <leader>rgg:等价于空格版dgg,覆盖光标到文件开头的所有内容为空格

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 05:00:02