Custom vim highlighting
I am editing some xml right now and I have been leaving myself some comments of things to come back to. Как это
<!-- Question: bla bla -->
I am editing with vim right now and I would like vim to highlight Question right now so that I can easily look through my code and find all the places I need to look at. I know I need to add something in my vimrc but I think that I might be searching for the wrong thing.
Обновить
I tried putting this in my .vimrc
but it had no effect:
syn keyword JakeAnnotation Question
hi JakeAnnotation gui=bold term=bold cterm=bold
Обновление 2
Actually I can see that what I did before had some effect because when I do this:
: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/
Первый перестает работать. (Но второй работает).
6 ответов
Я думаю, что мы давали вам некоторые ответы, которые не совсем верны. Вот что можно попробовать, что я тестировал на своей машине.
Во-первых, создайте свою собственную новую группу подсветки:
:highlight MyQuestions guifg=red guibg=green
Теперь укажите, что группа выделения будет существовать всякий раз, когда сопоставляется шаблон:
:syntax match MyQuestions /Question/
Это должно начать отображать подсветку текста "Вопрос" в каждой строке, которая имеет этот текст. Чтобы развернуть, чтобы показать всю строку, вы бы изменили текст поиска, чтобы подстановочные знаки соответствовали всей строке, что-то вроде этого:
:syntax match MyQuestions /.*Question.*/
Файл, который вы ищете, является файлом "синтаксиса". Попробуйте посмотреть в /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]
У вас есть несколько вариантов.
- один, как упоминал Доминик... вы можете искать их по одному (не очень практично)
- два, вы можете сделать ": g / <- Question", чтобы получить "список" их всех (немного лучше, дает общую картину)
- три, вы можете создать группу выделения, если вы используете только такие комментарии в файлах XML (я не знаю, как выглядит XML, поэтому я не знаю, есть ли в них какие-то другие комментарии). также). Это было бы хорошо, если бы вы установили его в vimrc, поскольку при обновлении vim более новой версией ваш файл xlm.vim исчезнет.
Вы могли бы просто сделать
:set hlsearch
А потом искать вопрос
Вам не обязательно помещать команду в ваш vimrc. Вы всегда можете просто ввести его в командной строке, а затем очистить, когда больше не хотите выделять. Команды будут примерно такими:
: привет Вопрос guifg= красный guibg= синий gui= жирный
В gvim (т. Е. Vim с графическим интерфейсом), который будет устанавливать передний план (guifg), фон и общие настройки персонажа.
если вы хотите избавиться от этого выделения, сделайте следующее:
: hi Вопрос ясен
Используя vim внутри терминала, вы можете изменить эту команду:
: привет Вопрос ctermfg= красный ctermbg= синий термин = жирный
Конечно, вы можете поместить любой из них в свой vimrc, а также можете объединить флаги gui и term в одну команду hi.
[ниже добавлено после того, как я прочитал ответ другого автора]
Извините, я предполагал, что синтаксис ваших строк вопросов уже соответствует настройкам вашего файла синтаксиса для встроенного тега Vim для выделения вопросов. Просто посмотрите на другой ответ, в котором упоминается файл синтаксиса xml для vim, и затем вы можете выполнить команды выше, используя группу выделения ToDo вместо Question.
Я опаздываю на вечеринку, но я использую TODO
а также FIXME
именно для этой ситуации.
Большинство, если не все, цветовые схемы выделят TODO
в следующем примере с некоторой комбинацией цвета фона, подчеркивания и курсива:
<tree>
<!--TODO : do I have to add a trunk tag ?-->
<branch>
<leaf>caterpillar</leaf>
<leaf>caterpillar</leaf>
</branch>
</tree>
Это не совсем подходит семантически, но работает очень хорошо с чисто функциональной точки зрения.