1. 基本替换命令
全局替换
" 在整个文件中替换(最常用)
:%s/old/new/g
" 替换时忽略大小写
:%s/old/new/gi
" 替换时需要确认每个替换
:%s/old/new/gc
在可视模式下替换
" 先进入可视模式选择文本,然后输入命令
:'<,'>s/old/new/g
2. 指定范围的替换
按行号范围替换
" 替换第10行到第20行
:10,20s/old/new/g
" 替换从当前行到文件末尾
:.,$s/old/new/g
" 替换从开头到第50行
:1,50s/old/new/g
使用标记替换
" 先在位置A标记为a,位置B标记为b
ma " 在位置A标记为a
mb " 在位置B标记为b
" 替换标记a到b之间的内容
:'a,'bs/old/new/g
3. 使用正则表达式的高级替换
基本正则表达式
" 替换以hello开头的行
:%s/^hello/new/g
" 替换以world结尾的行
:%s/world$/new/g
" 替换所有数字
:%s/\d\+/number/g
" 替换多个空格为单个空格
:%s/\s\+/ /g
分组和反向引用
" 交换两个单词的顺序(使用\1, \2等引用分组)
:%s/\(\w\+\) \(\w\+\)/\2 \1/g
" 在匹配内容前后添加内容
:%s/pattern/prefix_&_suffix/g " &代表匹配的整个内容
4. 特殊字符的替换
处理特殊字符
" 替换包含斜杠的路径(使用其他分隔符避免转义)
:%s#/old/path#/new/path#g
" 或者转义特殊字符
:%s/\/old\/path/\/new\/path/g
" 替换制表符
:%s/\t/ /g " 替换为4个空格
" 替换换行符(需要特殊处理)
:%s/\n/\r/g " 在替换中使用\r表示换行
5. 批量替换的实用技巧
确认替换模式
" 每个替换前确认(非常有用)
:%s/old/new/gc
确认选项:
y:替换当前匹配n:跳过当前匹配a:替换所有剩余匹配q:退出替换l:替换当前匹配后退出
大小写敏感控制
" 忽略大小写
:%s/old/new/gi
" 智能大小写(遵循搜索模式)
:%s/old/new/gI
" 在命令前设置忽略大小写
:set ignorecase
:%s/old/new/g
:set noignorecase
6. 跨文件批量替换
在多个文件中替换
# 在vim外使用sed(Linux命令)
sed -i 's/old/new/g' *.txt
# 或者使用vim的批处理模式
vim -c '%s/old/new/g' -c 'wq' file1.txt file2.txt
在Vim中编辑多个文件
" 打开多个文件
:args *.txt
" 在所有参数文件中执行替换
:argdo %s/old/new/g | update
" 或者只在包含特定模式的文件中替换
:argdo if search('old') | %s/old/new/g | update | endif
7. 实用的批量替换示例
代码重构示例
" 重命名变量(确保单词边界)
:%s/\<oldVar\>/newVar/g
" 更改函数调用格式
:%s/function_name(\([^)]*\))/new_function(\1)/g
" 添加日志语句
:g/error/s/^/console.log("Error: ") /g
文本格式化示例
" 删除行尾空白
:%s/\s\+$//g
" 规范化空格
:%s/ \+/ /g
" 在每行结尾添加分号
:%s/$/;/
8. 撤销和重做替换
" 撤销最后一次替换
u
" 重做被撤销的替换
Ctrl + r
" 查看替换历史
:changes
9. 安全替换的最佳实践
先预览再替换
" 先查看所有匹配项
:/old
" 或者高亮显示所有匹配
:set hlsearch
/old
" 确认无误后再替换
:%s/old/new/g
备份原始文件
" 在替换前保存备份
:w backup_filename
" 或者使用Vim的备份功能
:set backup
:set backupdir=~/vim_backups
10. 高级批量处理技巧
使用宏进行复杂替换
" 录制宏完成复杂替换
qa " 开始录制到寄存器a
/old<CR> " 查找目标
cwnew<Esc> " 替换单词
n " 查找下一个
q " 停止录制
" 执行宏多次
100@a " 执行100次
结合外部命令
" 使用外部命令处理选中的文本
:'<,'>!sed 's/old/new/g'
" 排序选中的行
:'<,'>!sort