【问题标题】:vim substitute strange chars on printf after rsyncvim 在 rsync 之后替换 printf 上的奇怪字符
【发布时间】:2023-03-12 08:39:01
【问题描述】:

我在这里编辑(macvim)file.c,然后将它同步到服务器。当我在 linux 机器和 vim file.c 中 ssh 时,我注意到了奇怪的字符。在所有 printf 中," 左侧更改为 ?~@~\,右侧更改为 ?~@~]

printf("text");

显示为

printf(?~@~\text?~@~]);

我试图:替代

:s/\<?~@~\\>/"

但它没有改变,我得到了

E486: Pattern not found: \<?~@~\\>

这种替代方法可能是什么?

【问题讨论】:

  • 你能告诉你为什么使用单词边界\&lt;吗? \\&gt; 将被视为反斜杠,&gt;,你需要 \\\&gt; 来表示反斜杠和单词边界...~ 也需要出于某种原因转义
  • 其实不行,我不知道,我应该试试s/\&lt;?\~@\~\\\&gt;/"吗?
  • 不,使用单词边界不适用于给定的示例。尝试s/?\~@\~\\/"
  • 同样的事情 E486
  • 你的 macvim 有一个插件可以用“智能引号”替换引号。您不能用 sed 用普通引号替换它们,因为没有文字 ? @ 和 ] 字符。只是您的 Linux 端的 vim 无法显示 UTF-8 字符。删除插件,在mac端修复文件。您可能还需要修复您的 Linux 设置,使其能够理解 Unicode。

标签: c regex vim macvim


【解决方案1】:

vim 中,~ 是最后一个给定替换字符串的符号,请参阅here。你需要逃避它。

以下内容将替换?~@~\:
:%s/?\~@\~\\/"
对于第二个表达式?~@~]:
:%s/?\~@\~]/"

NB 使用:%s 替换整个文件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多