Vim выделяет все красным цветом после функциональной строки кода, заставляя следующие строки кода не работать - PullRequest
0 голосов
/ 31 августа 2018

У меня есть текстовый файл с разделителями табуляции, например 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, я могу обработать эту таблицу.

Моя проблема в том, что в моем скрипте строка

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

заставляет все ниже отображаться красным цветом в vim, и мой следующий следующий код не запускается. Если я удаляю часть sed -e '$a\', все работает.

У вас есть объяснение этому? Спасибо за вашу помощь.

Ответы [ 2 ]

0 голосов
/ 31 августа 2018

Кажется, Vim неправильно обрабатывает обратную косую черту как особую, даже если обратная косая черта ничего не делает внутри одинарных кавычек. Что показывает :set syntax? Мой Vim правильно все окрашивает с помощью syntax=sh, так что, возможно, ваш файл не воспринимает ваш файл как сценарий оболочки. (Интересно, что вы можете заметить, что подсветка синтаксиса Stack Overflow тоже ошибается.)

Если это так, попробуйте добавить строку shebang, например #!/bin/bash вверху.

Что бы это ни было, более простой способ добавить новую строку в конце - просто повторить ее. Это избавляет от неэффективности sed сканирования по всему входному потоку, чтобы найти EOF.

{ tr '\r' '\n' < test.txt; echo; } > test_tmp
0 голосов
/ 31 августа 2018

Обратная косая черта в '$ a \' не позволяет последней кавычке завершить строку, поэтому она съедает оставшуюся часть сценария. Что вы пытаетесь сделать с этой командой sed?

...