Выборочная подсветка vim

12

Я сейчас редактирую некоторые xml и оставляю себе некоторые комментарии, к которым можно вернуться. Как это

<!-- Question: bla bla -->

Я редактирую с помощью vim прямо сейчас, и я хотел бы, чтобы vim выделил Вопрос прямо сейчас, чтобы я мог легко просмотреть свой код и найти все места, которые мне нужно посмотреть. Я знаю, что мне нужно что-то добавить в свой vimrc, но я думаю, что могу искать не ту вещь.

Обновить

Я попытался вставить это в мой, .vimrcно это не имело никакого эффекта:

syn keyword JakeAnnotation      Question

hi JakeAnnotation gui=bold term=bold cterm=bold

Обновление 2

На самом деле я вижу, что то, что я делал раньше, имело некоторый эффект, потому что, когда я делаю это:

:hi

Он показывает мне все, что он выделяет, и одна из записей:

JakeAnnotation xxx term=bold cterm=bold ctermbg=6

( и ххх отформатирован правильно )

Это заставляет меня поверить, что я просто не правильно определяю Вопрос. Вопрос должен быть на линии сам по себе?

Обновление 3

Итак, для пользователя 22303 пост у меня это работает:

highlight MyQuestion cterm=bold term=bold ctermbg=blue ctermfg=black
match MyQuestion /Question/

Однако я подозреваю, что вам разрешено иметь только одно совпадение на файл. Потому что, когда я делаю это:

highlight MyQuestion cterm=bold term=bold ctermbg=blue ctermfg=black
match MyQuestion /Question/
highlight MyRelook cterm=bold term=bold ctermbg=blue ctermfg=black
match MyRelook /Another look/

Первый перестает работать. (Но второй работает).

sixtyfootersdude
источник

Ответы:

9

Я думаю, что мы давали вам некоторые ответы, которые не совсем верны. Вот что можно попробовать, что я проверил на своей машине.

Во-первых, создайте свою собственную новую группу подсветки:

:highlight MyQuestions guifg=red guibg=green

Теперь укажите, что группа выделения будет существовать всякий раз, когда сопоставляется шаблон:

:syntax match MyQuestions /Question/

Это должно начать отображать подсветку текста «Вопрос» в каждой строке, которая имеет этот текст. Чтобы развернуть, чтобы показать всю строку, вы бы изменили текст поиска, чтобы подстановочные знаки соответствовали всей строке, что-то вроде этого:

:syntax match MyQuestions /.*Question.*/

user22303
источник
На самом деле, это сработало только ... Я подозреваю, что вам разрешено проводить только один матч одновременно, см. Обновление № 3 ...
sixtyfootersdude
1
@sixtyfootersdude: Извините, еще раз произошла небольшая ошибка. Вместо этого все команды сопоставления должны быть командами «совпадения синтаксиса». Поэтому вместо [: match MyQuestions /.*Question.*/] вы хотели бы использовать [: syntax match MyQuestions /.*Question.*/]. Это позволяет вам иметь столько разных совпадений, сколько вы хотите. На самом деле это один из наиболее распространенных типов команд, размещаемых в файлах синтаксиса. Но вы можете выполнять их где угодно, в командной строке, vimrc или в любых других сценариях.
user22303
Добавление syntaxinfront match...в моем файле vimrc делает совпадение совсем неэффективным. Это где я должен делать это. Делать это с открытым файлом также не имеет никакого эффекта.
sixtyfootersdude
1
@sixtyfooters: Не уверен, что происходит с тобой, но это определенно способ сделать это. Проверьте в командной строке перед помещением в скрипт (возможно, настройки синтаксиса очищаются где-то в других скриптах, которые загружаются для вашего файла). После определения проверьте, какие группы существуют и какое выделение они имеют, введя простую команду «: highlight» (или выбрав «Синтаксис», «Тест подсветки» в меню графического интерфейса пользователя в gvim). Помните, что вы хотите сначала использовать команду выделения, чтобы создать группу, а затем использовать синтаксическое соответствие, чтобы установить шаблон соответствия.
user22303
@sixtyfooters: я предполагаю, что вы запускаете vim в терминале (т.е. не в gvim), поэтому настройка свойств термина должна работать только. Мне кажется, что синтаксические команды очищаются, когда загружается новый файл, а связанный синтаксический файл выполняется и удаляет все предыдущие синтаксические команды. Итак, просто перепроверьте, при использовании командной строки вы вводите эти команды каждый раз при загрузке файла? Я думаю, что вы можете попробовать протестировать текст в новом буфере, который даже не сохранен и даже не имеет назначенного имени файла.
user22303
5

Файл, который вы ищете, является файлом «синтаксиса». Попробуйте посмотреть в /usr/local/share/vim/syntax/или /usr/share/vim/syntax/. Файл, который вы хотите, это xml.vim.

Самое простое, что нужно сделать, это найти строку, которая имеет

syn keyword xmlTodo         contained TODO FIXME XXX

и измените его на:

syn keyword xmlTodo         contained TODO FIXME XXX Question

Это добавит подсветку «Todo» к любому комментарию, содержащему текст Question.

Если вы собираетесь использовать это для (всегда), было бы лучше скопировать xml.vim в ваш локальный файл, ~/.vim/syntaxчтобы изменения в vim не перезаписывали ваш файл пользовательского синтаксиса.

Обновить

Если вы хотите подобную (sortof) возможность в любом файле, я бы использовал команду 'goto'. Я признаю, что это похоже на hlsearch, который, как вы сказали, вас раздражает.

Во время редактирования, когда курсор находится на слове, введите gdпоиск с текущей точки в файле или gDпоиск с начала. Каждое слово в вашем файле, которое соответствует текущему слову, подсвечивается. Вы можете напечатать, nчтобы перейти к следующему экземпляру этого слова.

Я склонен делать это, потому что вы получаете подсветку и навигацию с минимальным набором текста. Вы выключаете подсветку обычным способом::noh[lsearch]

DaveParillo
источник
Вот это да! Это похоже на то, что я хочу сделать. В настоящее время у меня нет ~/.vim/ folder. If I created it and create the file синтаксиса. Нужно ли ссылаться на него где-нибудь (может быть, в .vimrc?), чтобы сказать vim, чтобы использовать его?
sixtyfootersdude
1
Нет. Vim автоматически ищет его (и несколько других каталогов - например: плагины, цвет, компилятор), и если в вашей домашней области существует файл синтаксиса, он имеет приоритет по умолчанию системы.
DaveParillo
1
Кроме того, для ясности, вы хотите создать каталог syntax и поместить в него файл с именемxml.vim
DaveParillo
Должен ли я положить мой .vimrc в мой .vim dir?
sixtyfootersdude
1
файлы синтаксиса идут в вашем .vim dir. Подсветка синтаксиса предназначена для конкретного языка. Если вы хотите подобную (sortof) возможность в любом файле, я бы использовал команду 'goto'. Я добавлю это к моему ответу.
DaveParillo
2

Вы могли бы просто сделать

:set hlsearch

А потом искать вопрос

Dominik
источник
Это то, чем я занимаюсь, но hlsearch меня раздражает. +1, спасибо за предложение.
sixtyfootersdude
2

У вас есть несколько вариантов.
- один, как упоминал Доминик ... вы можете искать их один за другим (не очень практично)
- два, вы можете сделать «: g / <- Question», чтобы получить «список» их всех (чуть лучше , дает общую картину)
- три, вы можете создать группу выделения, если вы используете только такие комментарии в файлах XML (я не знаю, как выглядит XML, поэтому я не знаю, есть ли некоторые другие виды комментариев в них, а также). Это было бы хорошо, если бы вы установили его в vimrc, так как при обновлении vim более новой версией ваш файл xlm.vim исчезнет.

ладья
источник
+1 Мне нравится это :g/предложение, но его сложно применить, если «Вопрос» не сразу следует за тегом комментария.
DaveParillo
@DaveParillo - ах, да. Ну, как я уже сказал, я ничего не знаю о XML, поэтому я предположил, что это всегда было так.
Ладья
Как настроить группу выделения?
sixtyfootersdude
1
@sixtyfootersdude - см. ": help e410".
Ладья
@Idigas: спасибо за ссылку. Посмотрел, но все еще не смог решить мою проблему. Я добавил обновление в вопрос. Благодарю.
sixtyfootersdude
1

Вам не обязательно помещать команду в ваш vimrc. Вы всегда можете просто ввести его в командной строке, а затем очистить, когда больше не хотите выделять. Команды будут примерно такими:

: привет Вопрос guifg = красный guibg = синий gui = жирный

В gvim (т. Е. Vim с графическим интерфейсом), который задает передний план (guifg), фон и общие настройки персонажа.

если вы хотите избавиться от этого выделения, сделайте следующее:

: hi Вопрос ясен

Используя vim внутри терминала, вы можете изменить эту команду:

: привет Вопрос ctermfg = красный ctermbg = синий термин = жирный

Конечно, вы можете поместить любой из них в свой vimrc, а также можете объединить флаги gui и term в одну команду hi.


[добавлено ниже после того, как я прочитал ответ другого автора]

Извините, я предполагал, что синтаксис ваших строк вопросов уже соответствует настройкам вашего файла синтаксиса для встроенного тега Vim для выделения вопросов. Просто посмотрите на другой ответ, в котором упоминается файл синтаксиса xml для vim, а затем вы можете вводить команды выше, используя группу выделения ToDo вместо Question.

user22303
источник
Пробовал: привет Вопрос ctermfg = красный ctermbg = синий термин = жирный, но не имел никакого эффекта.
sixtyfootersdude
Извините, команда: hi просто установила, как группа вопросов будет выделена. Теперь вы должны указать, какие области документа являются частью группы вопросов. Вы можете сделать это с помощью команды match:: match Question / [шаблон поиска] / или, в вашем случае:: match Question / Question /
user22303
0

Я опаздываю на вечеринку, но я использую TODOи FIXMEименно для этой ситуации.

Большинство, если не все, цветовых схем будут выделены TODOв следующем примере с некоторой комбинацией цвета фона, подчеркивания и курсива:

<tree>
  <!--TODO : do I have to add a trunk tag ?-->
  <branch>
    <leaf>caterpillar</leaf>
    <leaf>caterpillar</leaf>
  </branch>
</tree>

Это не совсем подходит семантически, но работает очень хорошо с чисто функциональной точки зрения.

romainl
источник