Skip to content

nvim workflow replace and refactor

ES edited this page Jul 20, 2026 · 1 revision

Neovim 工作流:搜索替换与 surround

这篇讲两类高频操作:

  • 在文件或工作区里批量替换
  • 给文本加、删、换包裹符号

前者主要靠 vv-replace,后者主要靠 mini.surround


1. 搜索替换入口

快捷键 模式 作用
<leader>sr Normal 当前文件替换
<leader>sR Normal 整个工作区替换
<leader>sr Visual 用选区内容做搜索词,在当前文件替换
<leader>sR Visual 用选区内容做搜索词,在工作区替换
<leader>sv Visual 只在当前选区范围内替换

2. 什么时候用 sr,什么时候用 sR

<leader>sr

只改当前文件

适合:

  • 当前组件里统一改 prop 名
  • 当前文件里变量名、文案、class 名要批量调整

<leader>sR

改整个工作区

适合:

  • 跨文件 rename 某个字符串
  • 改接口路径
  • 改 i18n key 字符串
  • 改某个约定名字

经验上:

  • 能局部就先局部,用 sr
  • 确认影响面跨文件,再上 sR

3. Visual 模式的三种语义

这是这套替换工作流最值得记的地方

选区后按 <leader>sr

“把这段选区内容当作搜索词,在当前文件里替换”

选区后按 <leader>sR

“把这段选区内容当作搜索词,在整个工作区里替换”

选区后按 <leader>sv

“只在这块选区范围里替换”

也就是说:

  • sr / sR 更偏“拿选中的文本做 query”
  • sv 更偏“把选区当作用范围”

4. 它和原生 :s 的关系

原生替换依然适合:

  • 一两行的快速替换
  • 你已经非常熟悉 Vim 命令

比如:

  • :s/old/new/
  • :%s/old/new/g
  • cgn

vv-replace 更适合:

  • 你要看结果列表
  • 你要跨文件替换
  • 你要以“面板工作流”而不是命令行记忆来完成替换

可以把它理解成更接近 VS Code 的搜索替换面板


5. surround 入口

快捷键 作用
gsa 添加包裹
gsd 删除包裹
gsr 替换包裹
gsf / gsF 查找右侧 / 左侧包裹
gsh 高亮当前包裹

6. surround 最常用的操作

给一段文本加包裹

  • gsaiw":给当前单词加双引号
  • gsaiw):给当前单词加括号

可以理解为:

  • gsa = add surround
  • iw = inner word

删除包裹

把光标放在包裹内部,然后:

  • gsd" 删除双引号
  • gsd) 删除括号
  • gsdt 删除标签

替换包裹

  • gsr"':把双引号换成单引号
  • gsr)]:把括号换成中括号
  • gsrt:替换标签

7. 标签也能处理

这对写 HTML / JSX 很有用

  • gsat:加标签
  • gsdt:删标签
  • gsrt:换标签

比如给当前节点包一层 div,直接走 gsat


8. 推荐使用场景

改命名字符串

  • 当前文件先 <leader>sr
  • 跨项目再 <leader>sR

改 JSX / HTML 包裹结构

  • 加一层标签:gsat
  • 改标签名:gsrt

改引号、括号、数组对象包裹

  • 优先用 gsr
  • 不要手动删再手动补

9. 相关文档

Clone this wiki locally