当使用:redir重定向外部命令的输出时,Vim将`\ n`转换为`\ r \ n`。

时间:2019-03-30 15:54:38

标签: vim

使用:redir将命令的输出重定向到变量时,似乎所有\n都被\r\n取代了。

例如,运行时

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

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

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

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

然后这些行^M结尾,即不插入回车符。

有人知道我如何防止Vim将\n转换为\r\n吗? (我在Linux上。)

1 个答案:

答案 0 :(得分:1)

您可以使用!cmd代替system(cmd),它以字符串形式返回shell命令的结果:

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

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