我在使用 vim 粘贴从电子书复制的文本到源代码时遇到问题,“不可破坏的空格”最终会在编译时收到来自 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
- 使它们成为常规空间。
有没有一种方法可以在 vim 中输入时自动发生这种情况(从终端粘贴),例如
.vimrc
中的命令或设置?
我不是vim专家,我不知道是否有办法自动做你想做的事。但是,我的方法是使用 vim
map
命令将特定的按键序列映射到要执行的命令。实际上,这设置了一个新命令,您可以在文本插入模式之外键入该命令。
为了说明这个概念,这是我在 .vimrc 文件中的两个映射(我使用 ^M
来表示嵌入的换行符。您可以通过键入
<Control>+v
后跟
<Enter>
来嵌入它。
map MM :!clear^M:!make^M
map FF /\${[^}]*}^M
第一个映射 MM
导致运行两个 shell 命令。第一个命令是
clear
,第二个命令是
make
。第二个映射
FF
执行搜索以突出显示
${<something>}
形式的文本(我用它来突出显示模板文件中的占位符变量)。根据上面的示例,我
认为以下内容将执行您想要的操作(选择您想要的任何键序列;我只是使用UU
作为示例):
map UU :%s/\%ua0/ /g^M
如果您使用上述映射,则每当您键入 UU
(在文本插入模式之外)时,都会执行全局搜索和替换。