Vim: нужна помощь с небольшим кодом сценария, чтобы выделить - PullRequest
3 голосов
/ 03 апреля 2009

Мне нужен код сценария, чтобы выделить «[Capítulo» и «]» и все, что между ними. Спасибо.

Я хочу, чтобы он работал каждый раз, когда я открываю, например, файл .txt. Так же, как подсветка кода.

Ответы [ 2 ]

5 голосов
/ 03 апреля 2009

Вот простой способ сделать это:

в vim, убедитесь, что подсветка синтаксиса включена с :syn on

выполните команду :highlight, чтобы получить список всех имен групп подсветки и примеры того, как они выглядят. Группа Error выглядит так, как будто она хорошо выделяется в моей схеме цветов, поэтому я буду использовать ее в моем примере (но вы можете использовать любое другое имя, например Todo или Search)

:syntax match Error /\[Capítulo[^\]]*\]/ 

Этот шаблон не даст вам жадно сопоставить самый большой кусок. Даже если другие люди предлагают вам использовать регулярное выражение /\[Capítulo.*\]/ - это, вероятно, не то, что вы хотите, потому что оно будет соответствовать всему промежуточному, если в строке два или более таких шаблонов.

Например, /\[Capítulo.*\]/ будет соответствовать всей этой строке:

[Capítulo foo] эти слова не должны выделяться [Capítulo bar]

Тот же пример, но с /\[Capítulo[^\]]*\]/ будет соответствовать только материал внутри []:

[Capítulo foo] эти слова не должны выделяться [Capítulo bar]

С регулярными выражениями это обычная уловка - создавать группу, которая соответствует всему, кроме символа, для которого вы хотите завершить совпадение, вместо использования .*, который будет соответствовать как можно большему числу символов. В этом случае мы делаем группу [^\]]*, которая говорит: " соответствует всему, кроме]. "

Если это работает так, как вы хотите, добавьте строку соответствия синтаксиса без ":" к вашему .vimrc

1 голос
/ 03 апреля 2009

Регулярное выражение - это то, что вы ищете:

Введите / для входа в "режим поиска" и введите:

\[Capítulo.*\]/
...