Niestandardowe podświetlanie vimów

12

Obecnie edytuję trochę xml i zostawiam sobie komentarze na temat rzeczy, do których warto wrócić. Lubię to

<!-- Question: bla bla -->

Obecnie edytuję za pomocą vima i chciałbym, aby vim podświetlił pytanie w tej chwili, dzięki czemu mogę łatwo przejrzeć mój kod i znaleźć wszystkie miejsca, na które muszę spojrzeć. Wiem, że muszę coś dodać w moim vimrc, ale myślę, że mogę szukać niewłaściwej rzeczy.

Aktualizacja

Próbowałem to włożyć, .vimrcale nie przyniosło to żadnego efektu:

syn keyword JakeAnnotation      Question

hi JakeAnnotation gui=bold term=bold cterm=bold

Aktualizacja 2

Właściwie widzę, że to, co robiłem wcześniej, miało pewien efekt, ponieważ kiedy to robię:

:hi

Pokazuje mi wszystkie rzeczy, które wyróżnia, a jednym z wpisów jest:

JakeAnnotation xxx term=bold cterm=bold ctermbg=6

( a xxx jest poprawnie sformatowany )

To prowadzi mnie do przekonania, że ​​po prostu nie definiuję poprawnie pytania. Czy samo pytanie musi być na linii?

Aktualizacja 3

Ok, więc do posta użytkownika 22303 mam ten działający:

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

Podejrzewam jednak, że możesz mieć tylko jedno dopasowanie na plik. Ponieważ kiedy to zrobię:

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/

Pierwszy przestaje działać. (Ale drugi działa).

sześćdziesiąt stóp
źródło

Odpowiedzi:

10

Myślę, że dostarczamy ci odpowiedzi, które nie są do końca właściwe. Oto coś do wypróbowania na moim komputerze.

Najpierw utwórz własną nową grupę wyróżnień:

:highlight MyQuestions guifg=red guibg=green

Teraz określ, że grupa wyróżnień będzie istnieć za każdym razem, gdy zostanie dopasowany wzór:

:syntax match MyQuestions /Question/

Powinno to zacząć pokazywać wyróżnienie tekstu „Pytanie” w każdym wierszu z tym tekstem. Aby rozwinąć, aby wyświetlić całą linię, zmień tekst wyszukiwania, aby symbole wieloznaczne pasowały do ​​całej linii, mniej więcej tak:

:syntax match MyQuestions /.*Question.*/

użytkownik22303
źródło
Właściwie to tylko selektywne działało ... Podejrzewam, że możesz mieć tylko jeden mecz na raz, patrz aktualizacja # 3 ...
sixtyfootersdude
1
@sixtyfootersdude: Przepraszamy, ponownie wystąpił drobny błąd. Wszystkie polecenia dopasowania muszą zamiast tego być „dopasowaniem składni”. Więc zamiast [: dopasuj MojeQuestions /.*Question.*/] powinieneś użyć [: dopasuj składnię MyQuestions /.*Question.*/]. Dzięki temu możesz mieć tyle różnych dopasowań, ile chcesz. Są to w rzeczywistości jeden z najczęstszych rodzajów poleceń umieszczanych w plikach składniowych. Ale możesz je wykonać w dowolnym miejscu, w wierszu poleceń, vimrc lub w innych skryptach.
user22303
Dodanie syntaxinfront do match...mojego pliku vimrc powoduje, że dopasowanie nie ma żadnego efektu. Czy właśnie tam powinienem to robić. Wykonanie tego w otwartym pliku również nie ma wpływu.
sixtyfootersdude
1
@sixtyfooters: Nie wiesz, co się z tobą dzieje, ale to zdecydowanie sposób na zrobienie tego. Testuj w wierszu poleceń przed umieszczeniem w skrypcie (możliwe, że ustawienia składni są usuwane gdzieś w innych skryptach, które są ładowane dla twojego pliku). Po zdefiniowaniu sprawdź, jakie grupy istnieją i jakie mają wyróżnienia, wydając puste polecenie „: highlight” (lub wybierając „Składnia”, „Test podświetlenia” z menu GUI w gvim). Pamiętaj, że chcesz najpierw użyć polecenia wyróżnienia, aby utworzyć grupę, a następnie użyć „dopasowania składni”, aby ustawić wzorzec dopasowania.
user22303
@sixtyfooters: Zakładam, że używasz vima w terminalu (tj. nie gvim), więc ustawienie właściwości terminu powinno działać. Wydaje mi się, że polecenia składniowe są usuwane, gdy nowy plik jest ładowany, a powiązany plik składniowy jest uruchomiony i usuwa wszystkie poprzednie polecenia składniowe. Tak więc, aby dokładnie sprawdzić, czy przy użyciu wiersza poleceń ponownie wpisujesz te polecenia za każdym razem, gdy ładujesz plik? Myślę, że możesz spróbować przetestować tekst w nowym buforze, który nawet nie jest zapisany i nawet nie ma jeszcze przypisanej nazwy pliku.
user22303
5

Plik, którego szukasz, to plik „składniowy”. Spróbuj zajrzeć do /usr/local/share/vim/syntax/lub /usr/share/vim/syntax/. Plik, który chcesz to xml.vim.

Najprostszą rzeczą jest znalezienie linii, która ma

syn keyword xmlTodo         contained TODO FIXME XXX

i zmień na:

syn keyword xmlTodo         contained TODO FIXME XXX Question

Spowoduje to dodanie podświetlenia „Todo” do każdego komentarza zawierającego tekst Question.

Jeśli zamierzasz używać tego (zawsze), najlepiej skopiować plik xml.vim do lokalnego ~/.vim/syntaxpliku, aby zmiany w vimie nie zastąpiły twojego niestandardowego pliku składni.

Aktualizacja

Jeśli chcesz podobną (sortof) funkcję w dowolnym pliku, użyłbym polecenia „goto”. Przyznaję, że to jest jak hlsearch, co, jak powiedziałeś, denerwuje cię.

Podczas edytowania, gdy kursor znajduje się na słowie, wpisz, gdaby wyszukać od bieżącego punktu w pliku lub gDod początku. Każde słowo w pliku, które pasuje do bieżącego słowa, jest podświetlone. Możesz wpisać, naby przejść do następnej instancji tego słowa.

Zwykle to robię, ponieważ wyróżniasz się i nawigujesz przy minimalnym pisaniu. Podświetlenie wyłączasz w zwykły sposób::noh[lsearch]

DaveParillo
źródło
Łał! Brzmi jak to, co chcę robić. Obecnie nie mam ~/.vim/ folder. If I created it and create the file składni` czy muszę odwoływać się do niej gdzieś (być może w .vimrc?), żeby powiedzieć vimowi, żeby go używał?
sixtyfootersdude
1
Nie. Vim automatycznie go szuka (i kilka innych katalogów - na przykład: wtyczki, kolor, kompilator), a jeśli plik składni istnieje w twoim obszarze domowym, ma on pierwszeństwo przed domyślnymi ustawieniami systemu.
DaveParillo
1
Dla jasności chcesz utworzyć katalog syntax i umieścić w nim plik o nazwiexml.vim
DaveParillo
Czy powinienem umieścić mój .vimrc w moim .vim reż?
sixtyfootersdude
1
pliki składniowe przejdź do katalogu .vim. Podświetlanie składni ma być specyficzne dla języka. Jeśli chcesz podobną (sortof) funkcję w dowolnym pliku, użyłbym polecenia „goto”. Dodam to do mojej odpowiedzi.
DaveParillo
2

Możesz po prostu zrobić

:set hlsearch

A następnie wyszukaj pytanie

Dominik
źródło
To właśnie robiłem, ale irytuje mnie hlsearch. +1, dziękuję za sugestię.
sixtyfootersdude
2

Masz kilka opcji.
- jeden, jak wspomniał Dominik ... możesz wyszukiwać je jeden po drugim (nie jest to praktyczne)
- dwa, możesz zrobić ": g / <- Pytanie", aby uzyskać „listę” ich wszystkich (trochę lepiej , daje ogólny obraz)
- po trzecie, możesz skonfigurować grupę wyróżnień, jeśli używasz tego rodzaju komentarzy w plikach xml (nie mam pojęcia, jak wygląda xml, więc nie wiem, czy są jakieś inne komentarze również w nich). Byłoby dobrze, gdybyś skonfigurował go w vimrc, ponieważ kiedy odświeżysz vim nowszą wersją, twój plik xlm.vim zniknie.

Wieża
źródło
+1 Podoba mi się ta :g/sugestia, ale może być trudna do zastosowania, jeśli „Pytanie” nie następuje natychmiast po tagu komentarza.
DaveParillo
@DaveParillo - ah, tak. cóż, jak powiedziałem, nie wiem nic o xml, więc założyłem, że zawsze tak było.
Gawron
Jak skonfigurować grupę wyróżnień?
sixtyfootersdude
1
@sixtyfootersdude - patrz „: help e410”.
Gawron
@Idigas: dzięki za odniesienie. Spojrzałem, ale nadal nie mogę rozwiązać mojego problemu. Dodałem aktualizację do pytania. Dzięki.
sixtyfootersdude
1

Nie musisz koniecznie umieszczać polecenia w swoim vimrc. Zawsze możesz po prostu wpisać go w linii poleceń, a następnie wyczyścić, gdy nie chcesz już podświetlania. Polecenia wyglądałyby mniej więcej tak:

: cześć Pytanie guifg = czerwony guibg = niebieski gui = pogrubiony

W gvim (tj. Vim z GUI), który ustawi pierwszy plan (guifg), tło i ogólne ustawienia znaków.

jeśli chcesz pozbyć się tego wyróżnienia, zrób to:

: cześć Pytanie jasne

Korzystając z vima w terminalu, możesz zmodyfikować, aby użyć tego polecenia:

: hi Pytanie ctermfg = czerwony ctermbg = niebieski termin = pogrubiony

Możesz oczywiście umieścić dowolne z nich w swoim vimrc, a także możesz połączyć flagi GUI i termiczne w jedno polecenie hi.


[poniżej dodane po przeczytaniu odpowiedzi innego plakatu]

Przepraszam, zakładałem, że składnia linii pytań już odpowiada ustawieniom pliku składni dla wbudowanego znacznika wyróżnienia „Pytanie” Vima. Wystarczy spojrzeć na drugą odpowiedź, która wspomina o pliku składni xml dla vima, a następnie możesz wydawać polecenia powyżej, używając grupy wyróżnień Zadanie zamiast pytania.

użytkownik22303
źródło
Próbowałem: cześć Pytanie ctermfg = czerwony ctermbg = niebieski termin = pogrubiony, ale nie przyniósł żadnego efektu.
sixtyfootersdude
Niestety, polecenie: hi jedynie ustaliło sposób wyróżnienia grupy pytań. Teraz musisz określić, które obszary dokumentu są częścią grupy pytań. Możesz to zrobić za pomocą polecenia dopasowania:: dopasowanie pytania / [wzorzec wyszukiwania] / lub, w twoim przypadku:: dopasowanie pytania / pytania /
22303
0

Spóźniam się na imprezę, ale używam TODOi FIXMEwłaśnie w tej sytuacji.

Większość, jeśli nie wszystkie, schematy kolorów wyróżnią poniższy rysunek TODOz pewną kombinacją koloru tła, podkreślenia i kursywy:

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

Nie pasuje tak naprawdę semantycznie, ale działa bardzo dobrze z czysto funkcjonalnego punktu widzenia.

romainl
źródło