Спеціальне виділення 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/

Перший перестає працювати. (Але другий працює).

Відповіді:


10

Я думаю, ми подали вам кілька відповідей, які не зовсім правильні. Ось що можна спробувати, що я тестував на своїй машині.

Спочатку створіть свою власну нову групу виділень:

:highlight MyQuestions guifg=red guibg=green

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

:syntax match MyQuestions /Question/

Це повинно почати показувати текст "Запитання" у кожному рядку, що містить цей текст. Щоб розгорнути, щоб показати весь рядок, ви змінили б текст пошуку, щоб у ньому були символи, що відповідають цілому рядку, приблизно так:

:syntax match MyQuestions /.*Question.*/


Насправді, що спрацьовували лише сортивні ... Я підозрюю, що вам дозволено проводити один матч за один раз, дивіться оновлення №3 ...
sixtyfootersdude

1
@sixtyfootersdude: Вибачте, вкотре виникла незначна помилка. Усі команди відповідності повинні бути командами "синтаксичної відповідності". Тож замість [: match MyQuestions /.*Question.*/] ви хочете використовувати [: синтаксичний збіг MyQuestions /.*Question.*/]. Це дозволяє мати скільки завгодно різних матчів. Насправді це один із найпоширеніших типів команд, розміщених у файлах синтаксису. Але ви можете виконати їх у будь-якому місці, або в командному рядку, vimrc або будь-якому іншому сценарії.
користувач22303

Якщо додати syntaxinfront до match...мого файлу vimrc, то збіг взагалі не має ефекту. Це я маю це робити. Зробити це відкритим файлом також не має ефекту.
шістдесят футів

1
@sixtyfooters: Не впевнений, що з вами відбувається, але це точно спосіб. Перевірте в командному рядку перед розміщенням у скрипті (можливо, налаштування синтаксису очищаються десь в інших сценаріях, завантажених для вашого файлу). Визначившись, перевірте, які групи існують та які підсвітки вони мають, видавши голову команду ": виділити" (або вибравши "Синтаксис", "Виділити тест" з меню gui в gvim). Пам'ятайте, що ви хочете спочатку використовувати команду виділення для створення групи, а потім використати "відповідність синтаксису", щоб встановити шаблон відповідності.
користувач22303

@sixtyfooters: Я припускаю, що ви запускаєте vim у терміналі (тобто не gvim), тож встановлення лише властивостей терміна повинно працювати. Мені це здається, що команди синтаксису очищаються, коли завантажується новий файл, а асоційований файл синтаксису працює та очищає всі попередні команди синтаксису. Отже, лише для подвійної перевірки, використовуючи командний рядок, ви повторно вводите ці команди щоразу, коли ви завантажуєте файл? Я думаю, ви можете спробувати тестування тексту з новим буфером, який навіть не збережений і навіть не присвоєно ім'я файлу.
користувач22303

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 не перезаписали ваш власний синтаксичний файл.

Оновлення

Якщо ви хочете подібну можливість (сортоф) у будь-якому файлі, я використовую команду 'goto'. Я визнаю, що це як hlsearch, про який ви сказали, дратує вас.

Під час редагування, коли курсор знаходиться на слові, введіть gdдля пошуку з поточної точки у файлі або gDдля пошуку з початку. Виділено кожне слово у вашому файлі, яке відповідає поточному слову. Ви можете набрати, nщоб перейти до наступного примірника цього слова.

Я схильний робити це, тому що ви отримуєте яскравість та навігацію з мінімальним набором тексту. Ви вимикаєте підсвітку звичайним способом::noh[lsearch]


Оце Так! Це звучить як те, що я хочу зробити. На даний момент у мене немає ~/.vim/ folder. If I created it and create the file синтаксису "чи потрібно мені його посилати кудись (можливо, в .vimrc?), щоб сказати vim, щоб ним користуватися?
шістдесят футів

1
Ні. Vim автоматично шукає його (і кілька інших каталогів - наприклад: плагіни, колір, компілятор), і якщо файл синтаксису існує у вашій домашній області, він має перевагу за замовчуванням у системі.
DaveParillo

1
Крім того, щоб зрозуміти, ви хочете створити каталог syntax і помістити в нього файл під назвоюxml.vim
DaveParillo

Чи повинен я помістити свій .vimrc в мій .vim dir?
шістдесят футів

1
файли синтаксису зберігаються у вашому .vim dir. Підсвітка синтаксису призначена для мови. Якщо ви хочете подібну можливість (сортоф) у будь-якому файлі, я використовую команду 'goto'. Я додам це до своєї відповіді.
DaveParillo


2

У вас є кілька варіантів.
- один, як згадував Домінік ... ви можете шукати тих по одному (це не практично)
- два, ви можете зробити ": g / <- Запитання", щоб отримати "список" усіх (трохи краще , дає загальну картину)
- три, ви можете створити групу виділення, якщо ви використовуєте лише такі коментарі у файлах xml (я не маю уявлення, як виглядає xml, тому я не знаю, чи є такі інші коментарі також в них). Це було б добре, якщо ви налаштували його в vimrc, оскільки, коли ви оновите vim з новою версією, ваш файл xlm.vim вже не буде.


+1 Мені подобається :g/пропозиція, але може бути важко застосувати, якщо "Запитання" не одразу слідує за тегом коментаря.
DaveParillo

@DaveParillo - ах, так. ну, як я вже сказав, я нічого не знаю про xml, тому я припускав, що це завжди було так.
Грак

Як я можу налаштувати групу виділення?
шістдесят футів

1
@sixtyfootersdude - див. ": допомогти e410".
Грак

@Idigas: дякую за довідку. Поглянув, але все-таки не міг вирішити мою проблему. Я додав оновлення у запитання. Дякую.
шістдесят футів

1

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

: привіт Питання guifg = червоний guibg = синій гуй = жирний

У gvim (тобто vim з gui), який встановить передній план (guifg), фон та загальні параметри символів.

якщо ви хочете позбутися від підсвічування, зробіть це:

: привіт Питання чітке

Використовуючи vim всередині терміналу, ви можете модифікувати використання цієї команди:

: привіт Питання ctermfg = червоний ctermbg = синій термін = жирний

Звичайно, ви можете помістити будь-які з них у свій vimrc, а також ви можете поєднати прапори gui та term у єдину команду hi.


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

Вибачте, я припускав, що синтаксис ваших рядків запитань вже відповідає налаштуванням вашого синтаксичного файлу для вбудованого тега виділення "Запитання" Vim. Просто подивіться на іншу відповідь, в якій згадується файл синтаксису xml для vim, і тоді ви можете видавати команди вище, використовуючи групу виділення ToDo замість питання.


Спробував: привіт Питання ctermfg = червоний ctermbg = синій термін = жирний, але не мав ефекту.
шістдесят футів

Вибачте, команда: привіт просто встановила, як буде виділятися група запитань. Тепер ви повинні вказати, які області документа входять до групи питань. Це можна зробити за допомогою команди відповідності:: Питання про відповідність / [шаблон пошуку] / або, у вашому випадку:: відповідати Питання / Питання /
user22303

0

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

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

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

Це не дуже підходить семантично, але працює дуже добре з чисто функціональної точки зору.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.