Резюме
- Я не спрашиваю ваше мнение о том, что предлагаемое изменение - хорошее, плохое, удивительное или что-то в этом роде.
- Я просто прошу вашей помощи, чтобы ответить на этот вопрос: выполняет ли изменение, предложенное мной, для окраски синтаксиса комментариев break окраску синтаксиса для чего-то другого (ключевые слова, строки , синтаксические ошибки, ...)?
- Вышеуказанный вопрос не основан на мнении, так как мое изменение либо нарушает, либо нет. Вот и все.
Исходный вопрос
Я создал выпуск # 5876 на странице Vim's GitHub, чтобы предложить изменить vim/runtime/syntax/sed.vim
, но он не получил большое внимание, поэтому я рассматриваю возможность создания PR для изменения.
На самом деле, я создал проблему вместо PR, потому что я не совсем уверен, что изменение не разрушительно, отсюда и этот вопрос.
Проблема связана со строкой 20:
syn match sedComment "^\s*#.*$"
, из-за которой только «полные» комментарии окрашиваются как комментарии. Использование конечных комментариев, следующих за командой (например, разрешенной GNU sed), стимулирует некоторую раскраску красного фона (так как логика окраски синтаксиса считается ошибкой c, я думаю).
Я думаю, что это будет разумно было бы смягчить это определение комментариев, чтобы разрешить комментарии в стиле sed в GNU, по той простой причине, что правило менее ограничительно.
В этом отношении я заметил, что изменение этой строки на
syn match sedComment "\s*#.*$"
т.е. просто снятие якоря ^
, кажется достаточно. Я также попытался протестировать его, поместив #
в строку поиска и замены в сценарии sed, и это выглядит нормально.
Однако я не чувствую уверенности в файлах раскраски синтаксиса Vim, поэтому мне хотелось бы чтобы убедиться, что регулярное выражение, как я его редактировал, не вызывает ложных срабатываний.
Чтобы продемонстрировать, почему я не уверен в этом, возьмите этот однострочный sed
скрипт
s/aaa/bbb/#ccc
здесь #
не окрашен как комментарий, а фон ccc
красный (как ошибка?), Тогда как, просто добавив пробел, дайте правильную окраску:
s/aaa/bbb/ #ccc
Поэтому я думаю, что мое редактирование работает (или, кажется, работает) из-за правил приоритета между несколькими директивами окраски синтаксиса (в отношении этого конкретного примера c с s/aaa/bbb/#ccc
, я думаю, что #
сразу после закрывающего разделителя команда s
имеет значение в языке, но я не знаю, страница GNU Sed man
ничего об этом не говорит).
Edit
Другой пример предложил в комментариях я Следующее, синтаксис окраски которого не нарушен предлагаемым изменением
s/#if !defined(\([^)]*)/#ifndef \1/ # with or without this comment is fine