Destaque vim personalizado

12

Estou editando alguns xml agora e tenho deixado alguns comentários sobre o que voltar. Como isso

<!-- Question: bla bla -->

Estou editando com o vim agora e gostaria que o vim realçasse a pergunta agora, para que eu possa pesquisar facilmente meu código e encontrar todos os lugares que preciso procurar. Eu sei que preciso adicionar algo no meu vimrc, mas acho que posso estar procurando a coisa errada.

Atualizar

Eu tentei colocar isso no meu, .vimrcmas não teve efeito:

syn keyword JakeAnnotation      Question

hi JakeAnnotation gui=bold term=bold cterm=bold

Atualização 2

Na verdade, posso ver que o que fiz antes teve algum efeito, porque quando faço isso:

:hi

Ele mostra todas as coisas que está destacando e uma das entradas é:

JakeAnnotation xxx term=bold cterm=bold ctermbg=6

( e o xxx está formatado corretamente )

Isso me leva a crer que não estou definindo a pergunta corretamente. A pergunta precisa estar em uma linha sozinha?

Atualização 3

Ok, então, para a publicação do usuário 22303, tenho este trabalho:

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

No entanto, suspeito que você só pode ter uma correspondência por arquivo. Porque quando eu faço isso:

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/

O primeiro para de funcionar. (Mas o segundo funciona).

sixtyfootersdude
fonte

Respostas:

9

Acho que estamos dando algumas respostas que não estão certas. Aqui está algo para tentar que eu testei na minha máquina.

Primeiro, crie seu próprio novo grupo de destaques:

:highlight MyQuestions guifg=red guibg=green

Agora, especifique que o grupo de destaque existirá sempre que um padrão for correspondido:

:syntax match MyQuestions /Question/

Isso deve começar a mostrar o destaque do texto 'Pergunta' em cada linha que contém esse texto. Para expandir para mostrar a linha inteira, você alteraria o texto da pesquisa para ter curingas correspondentes à linha inteira, algo como isto:

:syntax match MyQuestions /.*Question.*/

user22303
fonte
Na verdade, que só sortive trabalhou ... Eu suspeito que você só estão autorizados a ter um jogo em uma atualização ver o tempo # 3 ...
sixtyfootersdude
1
@sixtyfootersdude: Desculpe, mais uma vez houve um pequeno erro. Todos os comandos de correspondência precisam ser comandos de "sintaxe de correspondência". Portanto, em vez de [: match MyQuestions /.*Question.*/], você deseja usar [: sintaxe match MyQuestions /.*Question.*/]. Isso permite que você tenha quantas correspondências diferentes desejar. Esses são, de fato, um dos tipos mais comuns de comandos colocados em arquivos de sintaxe. Mas você pode executá-los onde quiser, como linha de comando, vimrc ou qualquer outro script.
user22303
Adicionar na syntaxfrente do match...meu arquivo vimrc faz com que a correspondência não tenha efeito algum. É aqui que eu deveria estar fazendo isso. Fazer isso em um arquivo aberto também não tem efeito.
Sixtyfootersdude
1
@sixtyfooters: Não tenho certeza do que está acontecendo com você, mas essa é definitivamente a maneira de fazê-lo. Teste na linha de comando antes de inserir um script (é possível que as configurações de sintaxe estejam sendo limpas em algum lugar em outros scripts carregados para o seu arquivo). Uma vez definido, verifique quais grupos existem e que destaque eles têm emitindo um comando ": realce" (ou escolhendo "Sintaxe", "Teste de destaque" no menu da GUI no gvim). Lembre-se de que deseja usar o comando de destaque primeiro para criar um grupo e, em seguida, use 'syntax match' para definir o padrão de correspondência.
user22303
@sixtyfooters: Suponho que você esteja executando o vim em um terminal (ou seja, não o gvim), de modo que definir as propriedades do termo apenas funcione. Parece-me que os comandos de sintaxe estão sendo limpos quando um novo arquivo é carregado e um arquivo de sintaxe associado está sendo executado e limpando todos os comandos de sintaxe anteriores. Então, só para checar, ao usar a linha de comando, você reinsere esses comandos toda vez que carrega um arquivo? Eu acho que você pode tentar testar com texto em um novo buffer que nem é salvo e nem tem um nome de arquivo atribuído ainda.
user22303
5

O arquivo que você está procurando é um arquivo de 'sintaxe'. Tente procurar dentro /usr/local/share/vim/syntax/ou /usr/share/vim/syntax/. O arquivo que você deseja é xml.vim.

A coisa mais simples a fazer é encontrar a linha que tem

syn keyword xmlTodo         contained TODO FIXME XXX

e mude para:

syn keyword xmlTodo         contained TODO FIXME XXX Question

Isso adicionará o destaque 'Todo' a qualquer comentário que contenha o texto Question.

Se você for usar isso para (sempre), será melhor copiar o xml.vim para o seu local, ~/.vim/syntaxpara que as alterações no vim não substituam seu arquivo de sintaxe personalizado.

Atualizar

Se você quiser um recurso semelhante (sortof) em qualquer arquivo, eu usaria o comando 'goto'. Admito que isso é como hlsearch, que você disse que o incomoda.

Durante a edição, quando o cursor estiver em uma palavra, digite gdpara pesquisar a partir do ponto atual no arquivo ou gDpesquisar desde o início. Todas as palavras em seu arquivo que correspondem à palavra atual são destacadas. Você pode digitar npara ir para a próxima instância dessa palavra.

Eu costumo fazer isso, porque você obtém destaque e navegação com digitação mínima. Você desativa o destaque da maneira usual::noh[lsearch]

DaveParillo
fonte
Uau! Isso soa como o que eu quero fazer. Atualmente, não tenho uma ~/.vim/ folder. If I created it and create the file sintaxe. Preciso referenciá-lo em algum lugar (talvez dentro .vimrc?) para dizer ao vim para usá-lo?
Sixtyfootersdude
1
Não. O Vim o procura automaticamente (e alguns outros diretórios - por exemplo: plugins, cores, compiladores) e, se houver um arquivo de sintaxe em sua área inicial, prevalece o padrão do sistema.
18710 DaveParillo
1
Além disso, só para ficar claro, você quer criar um diretório syntax e colocar nele um arquivo chamadoxml.vim
DaveParillo
Devo colocar meu .vimrc no meu dir .vim?
Sixtyfootersdude
1
arquivos de sintaxe vão no seu diretório .vim. O destaque da sintaxe deve ser específico do idioma. Se você quiser um recurso semelhante (sortof) em qualquer arquivo, eu usaria o comando 'goto'. Vou adicioná-lo à minha resposta.
21810 DaveParillo
2

Você poderia simplesmente fazer

:set hlsearch

E, em seguida, procure a pergunta

Dominik
fonte
É isso que tenho feito, mas a pesquisa me incomoda. +1, obrigado pela sugestão.
Sixtyfootersdude
2

Você tem várias opções.
- um, como Dominik mencionou ... você pode procurar por um por um (não é prático)
- dois, você pode fazer ": g / <- Pergunta" para obter uma "lista" de todos eles (um pouco melhor , fornece uma imagem geral)
- três, você pode configurar um grupo de destaque se estiver usando apenas esse tipo de comentários em arquivos xml (não faço ideia de como o xml se parece, então não sei se há alguns outro tipo de comentários neles também). Isso seria bom se você o configurasse no vimrc, pois quando você atualiza o vim com uma versão mais recente, seu arquivo xlm.vim desaparece.

Torre
fonte
+1 Gostei da :g/sugestão, mas pode ser difícil de aplicar se 'Pergunta' não seguir imediatamente a tag do comentário.
21410 DaveParillo
@DaveParillo - ah, sim. bem, como eu disse, eu não sei nada sobre xml, então eu assumi que era sempre assim.
Rook
Como posso configurar um grupo de destaque?
Sixtyfootersdude
1
@sixtyfootersdude - consulte ": ajuda e410".
Rook
@ Idigas: obrigado pela referência. Deu uma olhada, mas ainda não consegui resolver meu problema. Eu adicionei uma atualização na pergunta. Obrigado.
Sixtyfootersdude 17/02/10
1

Você não precisa necessariamente colocar o comando no seu vimrc. Você sempre pode inseri-lo na linha de comando e limpá-lo quando não desejar mais o realce. Comandos seria algo como isto:

: oi Pergunta guifg = guibg vermelho = gui azul = negrito

No gvim (ou seja, vim com uma GUI) que definirá as configurações de primeiro plano (guifg), segundo plano e caracteres gerais.

se você quiser se livrar desse destaque, faça o seguinte:

: oi Pergunta clara

Usando o vim dentro de um terminal, você pode modificar para usar este comando:

: oi Pergunta ctermfg = vermelho ctermbg = termo azul = negrito

É claro que você pode colocar qualquer uma dessas no seu vimrc e também pode combinar as bandeiras gui e term em um único comando oi.


[abaixo adicionado depois de ler a resposta de outro pôster]

Desculpe, eu estava assumindo que a sintaxe das suas linhas de pergunta já correspondia às configurações do seu arquivo de sintaxe para a tag de destaque 'Pergunta' incorporada no Vim. Basta olhar para a outra resposta que menciona o arquivo de sintaxe xml do vim e, em seguida, você pode emitir os comandos acima usando o grupo de destaque ToDo em vez de Pergunta.

user22303
fonte
Tentei: oi Pergunta ctermfg = vermelho ctermbg = termo azul = negrito, mas não teve efeito.
Sixtyfootersdude
Desculpe, o comando: hi apenas estabeleceu como o grupo de perguntas seria destacado. Agora você precisa especificar quais áreas do documento fazem parte do grupo de perguntas. Você pode fazer isso com um comando match:: match Question / [padrão de pesquisa] / ou, no seu caso:: match Question / Question /
user22303
0

Estou atrasado para a festa, mas uso TODOe FIXMEexatamente nessa situação.

A maioria dos esquemas TODOde cores , se não todos, destacará o exemplo a seguir com alguma combinação de cor de fundo, sublinhado e itálico:

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

Realmente não se encaixa semanticamente, mas funciona muito bem do ponto de vista puramente funcional.

romainl
fonte