Как я могу исправить подсветку синтаксиса Emacs для qr "\. [^.] + $"? - PullRequest
0 голосов
/ 27 ноября 2011

Emacs сбивает с толку синтаксис после такой строки, как

fileparse($file, qr"\.[^.]+$");

и считает, что остальная часть файла является строкой.Как мне это исправить?

Ответы [ 2 ]

3 голосов
/ 27 ноября 2011

Дэвид У., вероятно, имеет правильный ответ.Опять же, вероятно, лучше всего избегать использования " в качестве разделителя, но иногда вам нужно использовать ' в качестве разделителя для предотвращения интерполяции, поэтому это может быть полезно для кого-то в этом случае.

Итак, если по какой-то причине вы ДЕЙСТВИТЕЛЬНО хотите использовать разделитель кавычек (или для предотвращения интерполяции с помощью '), вы всегда можете сделать что-то вроде:

fileparse($file, qr"\.[^.]+$"); #"# highlight fix

пример, использующий тот, которыйSO плохо работает:

s'hi'by'; #'# highlight fix

примечание: второй # должен вызвать подсветку комментария в редакторе, чтобы highlight fix показывался как комментарий.

3 голосов
/ 27 ноября 2011

Emacs смущен кавычками в выражении qr. Работает стандартный разделитель регулярных выражений (/):

fileparse($file, qr/\.[^.]+$/);

На самом деле почти все остальное работает.

fileparse($file, qr{(\.[^.]+$/});
fileparse($file, qr*\.[^.]+$*);
fileparse($file, qr#\.[^.]+$#);

Моя версия VIM не смущает кавычки, но я знаю, что старые версии VIM это делали. Размещение кавычек действительно сбивает с толку, потому что выражение qr выглядит как строка (а это не так). Обычно плохая политика - использовать кавычки в качестве разделителей в регулярных выражениях, даже если это технически допустимо.

Однако, действительно важный вопрос: что такое fileparse? Это не стандартная функция Perl. Я предполагаю, что это импортировано из File::Basename? Это было бы правильно?

Согласно имеющейся у меня документации, второй аргумент в fileparse должен быть массивом, а не регулярным выражением в кавычках.

...