如何在Vim中自动将输入的不换行空格替换为普通空格?
问题:粘贴电子书文本到Vim编写的代码中,非换行空格导致GCC编译报错,如何实现自动替换?
从电子书复制文本粘贴到Vim的C代码文件后,GCC编译时会报如下错误:
filename.c:69:6: error: stray ‘\302’ in program
69 | <U+00A0><U+00A0><U+00A0><U+00A0><U+00A0><U+00A0><U+00A0><U+00A0><U+00A0><U+00A0><U+00A0><U+00A0><U+00A0><U+00A0><U+00A0>return 1;
目前手动执行以下命令可解决问题:
:%s/\%ua0/ /g
请问能否通过.vimrc配置,实现终端粘贴等输入操作时自动完成该替换?
解决方案
可以通过Vim的自动命令(autocmd)实现粘贴后自动替换非换行空格,在.vimrc中添加以下配置:
" 退出插入模式时,自动将所有非换行空格(U+00A0)替换为普通空格 autocmd InsertLeave * %s/\%ua0/ /g
配置说明:
autocmd InsertLeave *:监听所有文件类型的「退出插入模式」事件——粘贴操作通常在插入模式下完成,因此粘贴结束退出插入模式时会触发该命令%s/\%ua0/ /g:全局替换文档中所有U+00A0字符为普通空格,逻辑和你手动执行的命令完全一致
如果希望仅针对C/C++这类代码文件生效,可把*替换为对应文件类型:
autocmd InsertLeave *.c,*.cpp %s/\%ua0/ /g
另外,若想实时查看非换行空格的位置,可添加辅助配置:
" 将非换行空格显示为点号,方便排查 set listchars+=nbsp:. set list
内容的提问来源于stack exchange,提问作者tor
相关产品推荐
相关产品推荐

