Evidenziazione vim personalizzata


12

Sto modificando alcuni xml in questo momento e mi sono lasciato alcuni commenti su cose a cui tornare. Come questo

<!-- Question: bla bla -->

Sto modificando con vim in questo momento e vorrei che vim evidenziasse la domanda in questo momento in modo da poter facilmente consultare il mio codice e trovare tutti i luoghi che devo guardare. So che devo aggiungere qualcosa nel mio vimrc ma penso che potrei cercare la cosa sbagliata.

Aggiornare

Ho provato a metterlo nel mio .vimrcma non ha avuto alcun effetto:

syn keyword JakeAnnotation      Question

hi JakeAnnotation gui=bold term=bold cterm=bold

Aggiornamento 2

In realtà posso vedere che quello che ho fatto prima ha avuto qualche effetto perché quando lo faccio:

:hi

Mi mostra tutte le cose che mette in evidenza e una delle voci è:

JakeAnnotation xxx term=bold cterm=bold ctermbg=6

( e xxx è formattato correttamente )

Questo mi porta a credere che non sto definendo correttamente la domanda. La domanda deve essere in linea da sola?

Aggiornamento 3

Ok, quindi al post dell'utente 22303 ho questo lavoro:

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

Tuttavia, ho il sospetto che ti sia permesso avere solo una corrispondenza per file. Perché quando faccio questo:

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/

Il primo smette di funzionare. (Ma il secondo funziona).

Risposte:


9

Penso che ti abbiamo dato alcune risposte che non sono assolutamente giuste. Ecco qualcosa da provare che ho testato sulla mia macchina.

Innanzitutto, crea il tuo nuovo gruppo di evidenziazione:

:highlight MyQuestions guifg=red guibg=green

Ora, specifica che il gruppo di evidenziazione esisterà ogni volta che un pattern viene abbinato:

:syntax match MyQuestions /Question/

Ciò dovrebbe iniziare a mostrare l'evidenziazione del testo "Domanda" su ogni riga che contiene quel testo. Per espanderlo per mostrare l'intera riga, è necessario modificare il testo di ricerca in modo che i caratteri jolly corrispondano all'intera riga, in questo modo:

:syntax match MyQuestions /.*Question.*/


In realtà quell'unico problema funzionava ... Ho il sospetto che ti sia permesso di avere solo una partita alla volta, vedi aggiornamento n. 3 ...
sixtyfootersdude,

1
@sixtyfootersdude: Siamo spiacenti, ancora una volta si è verificato un errore minore. Tutti i comandi di corrispondenza devono invece essere comandi di "corrispondenza della sintassi". Quindi invece di [: match MyQuestions /.*Question.*/] dovresti usare [: sintassi match MyQuestions /.*Question.*/]. Ciò ti consente di avere tutte le partite diverse che desideri. Questi sono in effetti uno dei tipi più comuni di comandi inseriti nei file di sintassi. Ma puoi eseguirli ovunque tu voglia, da riga di comando, vimrc o qualsiasi altro script.
user22303

L'aggiunta di syntaxinfront match...nel mio file vimrc fa sì che la corrispondenza non abbia alcun effetto. È qui che dovrei farlo. Anche farlo su un file aperto non ha alcun effetto.
sixtyfootersdude,

1
@sixtyfooters: non sono sicuro di cosa ti stia succedendo, ma è sicuramente questo il modo di farlo. Prova alla riga di comando prima di inserirlo in uno script (è possibile che le impostazioni della sintassi vengano cancellate da qualche parte in altri script caricati per il tuo file). Una volta definito, controlla quali gruppi esistono e quale evidenziazione hanno emettendo un comando ": highlight" (o scegliendo "Sintassi", "Prova evidenziazione" dal menu GUI in gvim). Ricorda che vuoi usare prima il comando highlight per creare il gruppo, quindi usa 'sintassi match' per impostare il pattern di corrispondenza.
user22303

@sixtyfooters: suppongo che tu stia eseguendo vim in un terminale (cioè, non gvim) in modo che l'impostazione delle proprietà del termine funzioni solo. Mi sembra che i comandi di sintassi vengano cancellati quando viene caricato un nuovo file e un file di sintassi associato è in esecuzione e cancellando tutti i precedenti comandi di sintassi. Quindi, solo per ricontrollare, quando si utilizza la riga di comando, si immettono nuovamente questi comandi ogni volta che si carica un file? Penso che potresti provare con il testo nel nuovo buffer che non è nemmeno salvato e che non ha ancora assegnato un nome file.
user22303,

5

Il file che stai cercando è un file di "sintassi". Prova a guardare dentro /usr/local/share/vim/syntax/o /usr/share/vim/syntax/. Il file desiderato è xml.vim.

La cosa più semplice da fare è trovare la linea che ha

syn keyword xmlTodo         contained TODO FIXME XXX

e cambiarlo in:

syn keyword xmlTodo         contained TODO FIXME XXX Question

Ciò aggiungerà l'evidenziazione 'Todo' a qualsiasi commento contenente il testo Question.

Se lo utilizzerai per (mai), sarebbe meglio copiare xml.vim nel tuo locale in ~/.vim/syntaxmodo che le modifiche a vim non sovrascrivano il tuo file di sintassi personalizzato.

Aggiornare

Se si desidera una funzionalità simile (sortof) in qualsiasi file, utilizzare il comando 'goto'. Devo ammettere che questo è come hlsearch, che hai detto ti infastidisce.

Durante la modifica, quando il cursore si trova su una parola, digitare gdper cercare dal punto corrente nel file o gDper cercare dall'inizio. Ogni parola nel tuo file che corrisponde alla parola corrente è evidenziata. Puoi digitare nper passare all'istanza successiva di quella parola.

Tendo a farlo, perché ottieni evidenziazione e navigazione con una digitazione minima. Disattiva l'evidenziazione nel solito modo::noh[lsearch]


Wow! Sembra quello che voglio fare. Al momento non ho una ~/.vim/ folder. If I created it and create the file sintassi` devo fare riferimento in qualche luogo (forse in .vimrc?) per dire a Vim di usarlo?
sixtyfootersdude,

1
No. Vim lo cerca automaticamente (e alcune altre directory - ad esempio: plugin, color, compilatore) e se esiste un file di sintassi nella propria area home, ha la precedenza sul default del sistema.
DaveParillo,

1
Inoltre, per essere chiari, vuoi creare una directory syntax e inserire un file chiamatoxml.vim
DaveParillo,

Dovrei mettere il mio .vimrc nella mia directory .vim?
sixtyfootersdude,

1
i file di sintassi vanno nella tua directory .vim. L'evidenziazione della sintassi deve essere specifica della lingua. Se si desidera una funzionalità simile (sortof) in qualsiasi file, utilizzare il comando 'goto'. Lo aggiungerò alla mia risposta.
DaveParillo,

2

Potresti semplicemente farlo

:set hlsearch

E quindi cerca la domanda


Questo è quello che ho fatto, ma hlsearch mi dà fastidio. +1, grazie per il suggerimento.
sixtyfootersdude,

2

Hai diverse opzioni.
- uno, come ha detto Dominik ... puoi cercarli uno per uno (non così pratico)
- due, puoi fare ": g / <- Domanda" per ottenere un "elenco" di tutti (un po 'meglio , fornisce un'immagine generale)
- tre, è possibile creare un gruppo di evidenziazione se si utilizza solo quel tipo di commenti nei file xml (non ho idea di come sia xml, quindi non so se ci sono alcuni anche altri tipi di commenti). Questo sarebbe utile se lo avessi impostato su vimrc, poiché quando aggiorni vim con una versione più recente, il tuo file xlm.vim sparirà.


+1 Mi piace il :g/suggerimento, ma potrebbe essere difficile applicarlo se "Domanda" non segue immediatamente il tag di commento.
DaveParillo,

@DaveParillo - ah, sì. bene, come ho detto, non so nulla di xml, quindi ho pensato che fosse sempre così.
Arriva il

Come posso impostare un gruppo di evidenziazione?
sixtyfootersdude,

1
@sixtyfootersdude - vedi ": help e410".
Arriva il

@Idigas: grazie per il riferimento. Ho dato un'occhiata ma ancora non sono riuscito a risolvere il mio problema. Ho aggiunto un aggiornamento alla domanda. Grazie.
sixtyfootersdude,

1

Non devi necessariamente inserire il comando nel tuo vimrc. Puoi sempre inserirlo dalla riga di comando e quindi cancellarlo quando non desideri più evidenziare. I comandi sarebbero qualcosa del genere:

: hi Domanda guifg = guibg rosso = gui blu = grassetto

In gvim (cioè vim con una gui) che imposterà le impostazioni di primo piano (guifg), sfondo e carattere generale.

se vuoi sbarazzarti di quel chiarore fai questo:

: ciao Domanda chiara

Utilizzando vim all'interno di un terminale è possibile modificare per utilizzare questo comando:

: hi Domanda ctermfg = red ctermbg = blue term = bold

Ovviamente puoi mettere uno di quelli nel tuo vimrc e puoi anche combinare la bandiera gui e il termine in un singolo comando hi.


[di seguito aggiunto dopo aver letto la risposta di un altro poster]

Spiacenti, stavo supponendo che la sintassi delle righe della domanda corrispondesse già alle impostazioni del file di sintassi per il tag di evidenziazione integrato "Domanda" di Vim. Basta guardare l'altra risposta che menziona il file di sintassi xml per vim e quindi è possibile emettere i comandi sopra usando il gruppo di evidenziazione ToDo anziché la domanda.


Provato: ciao Domanda ctermfg = rosso ctermbg = termine blu = grassetto ma non ha avuto alcun effetto.
sixtyfootersdude,

Siamo spiacenti, il comando: hi ha semplicemente stabilito come il gruppo di domande sarebbe stato evidenziato. Ora devi specificare quali aree del documento fanno parte del gruppo di domande. Puoi farlo con un comando match:: match Domanda / [modello di ricerca] / o, nel tuo caso:: match Domanda / Domanda /
user22303

0

Sono in ritardo alla festa ma uso TODOe FIXMEproprio per questa situazione.

La maggior parte, se non tutti, i temi dei colori evidenzieranno il TODOseguente esempio con una combinazione di colore di sfondo, sottolineatura e corsivo:

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

Non si adatta davvero semanticamente ma funziona molto bene da un punto di vista puramente funzionale.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.