Vim 在功能性代码行之后以红色突出显示所有内容,使得以下代码行不起作用

Vim highlights everything in red after a functional line of code making the following lines of code not work

我有一个制表符分隔的文本文件,例如test.txt 包含 ^M 个字符且末尾缺少换行符:

Samples  Factor
1        2

使用 tr 和线程 https://unix.stackexchange.com/questions/31947/how-to-add-a-newline-to-the-end-of-a-file ,我能够处理这个 table.

我的问题是在我的脚本中

tr '\r' '\n' < test.txt | sed -e '$a\' > test_temp
mv test_temp test.txt

使下面的所有内容出现在 vim 中的 "red" 中,而我紧随其后的代码不会 运行。如果我删除 sed -e '$a\' 部分,一切正常。

你对此有什么解释吗? 感谢您的帮助。

'$a\' 中的反斜杠阻止最后一个引号结束字符串,因此它会占用脚本的其余部分。你想用那个 sed 命令做什么?

Vim 似乎错误地将反斜杠视为特殊字符,即使反斜杠在单引号内没有任何作用。 :set syntax 显示什么?我的 Vim 使用 syntax=sh 正确地为所有内容着色,所以也许您的文件没有将您的文件视为 shell 脚本。 (有趣的是,您可能会注意到 Stack Overflow 的语法高亮器也会出错。)

如果是这样,请尝试在顶部添加一个 shebang 行,例如 #!/bin/bash

无论如何,在末尾添加新行的一种更简单的方法是简单地回显一个。它摆脱了 sed 扫描整个输入流以查找 EOF 的低效率。

{ tr '\r' '\n' < test.txt; echo; } > test_tmp