首页 > 解决方案 > 当使用 :redir 重定向外部命令的输出时,Vim 将 `\n` 转换为 `\r\n`

问题描述

使用 将命令的输出重定向到变量:redir时,似乎全部\n都替换为\r\n

例如,运行时

redir => m
silent !echo -e "Hallo\nCiao"
redir END
put =m

然后插入缓冲区的新行以 结尾^M,表示回车 ( \r) 字符。

但是,这似乎只在执行外部命令时发生。如果echo我们使用 Vim 的内部echo命令而不是 shell 提供的命令,即

redir => m
" Note the missing `!` in front of `echo`
silent echo "Hallo\nCiao"
redir END
put =m

那么这些行以 结尾^M,即不插入回车。

有谁知道我可以如何防止 Vim 转换\n\r\n? (我在 Linux 上。)

标签: vim

解决方案


代替 !cmd,您可以使用system(cmd)which 将 shell 命令的结果作为字符串返回:

redir => m
    echo system('echo -e "Hallo\nCiao"')[:-2]
redir END

删除最后一个[:-2]EOL。


推荐阅读