Eu instalei o gvim no Fedora e no Win7. Eu descobri que o vim e o gvim no Fedora não destacavam o nome da função no código c, enquanto o gvim no win7 o destacava.
Eu descobri que no win7, vim73/syntax/c.vim
tem as linhas adicionais no final:
syn match cFunction "\<[a-zA-Z_][a-zA-Z_0-9]*\>[^()]*)("me=e-2
syn match cFunction "\<[a-zA-Z_][a-zA-Z_0-9]*\>\s*("me=e-1
hi cFunction gui=NONE guifg=#B5A1FF
Se eu adicionar essas linhas c.vim
no Fedora, o gvim também poderá destacar o nome da função.
Para manter a portabilidade, quero apenas modificar o .vimrc
para destacar o nome da função. No entanto, depois de adicionar essas linhas ao .vimrc
, ele não funcionou.
Então, alguém pode me ajudar? Eu fiz uma pesquisa e existem muitas soluções para destacar os nomes das funções no vim. Mas estou curioso para saber como fazer essas linhas funcionarem .vimrc
. Muito obrigado!
vimrc
syntax-highlighting
tamlok
fonte
fonte
~/.vim/after/syntax/c.vim
invés..vimrc
?autocmd BufEnter *.c hl ...
, mas deve mantê-loafter/syntax/c.vim
. Qualquer versão moderna do Vim entenderá o.vim/after/
diretório. No Windows, o caminho seriavimfiles/after/...
, portanto, a portabilidade não deve ser um grande problema (especialmente se você usar algum plug-in).Respostas:
A razão para isso é que o Vim limpa os itens de sintaxe existentes ao definir a
'syntax'
opção. Isso é feito porque manter os itens antigos da sintaxe levaria a algumas situações estranhas; se você tem um buffer que possuisyntax=foo
e usaset syntax=bar
, você terminará com um buffer que possui destaque de sintaxe para ambosfoo
ebar
.Quando o Vim inicia, ele carrega seus
vimrc
arquivos uma vez (na inicialização), mas carrega os arquivos de tipo de arquivo e sintaxe toda vez que as opçõesfiletype
ousyntax
são definidas, o que redefinirá os valores que você definiu no seu vimrc.Mesmo que não o redefina, não seria uma boa ideia adicioná-lo ao seu vimrc, pois ele se aplicaria a todos os buffers, e não apenas aos buffers
syntax=c
.O texto abaixo assume o Vim em um sistema Unix-y, mas também funciona para usuários do Neovim e Windows:
~/.vim/
por~/.config/nvim/
.~/.vim/
por%USERPROFILE%\vimfiles\
.Substituindo um arquivo inteiro
A maneira mais fácil de mudar algo é simplesmente substituí-lo . Para fazer isso, crie um arquivo no
~/.vim/<file>.vim
.<file.vim>
é o caminho relativo a$VIMRUNTIME
(incluindo subdiretórios). No seu exemplo, deveria sersyntax/c.vim
. Será carregado em vez do arquivo$VIMRUNTIME
.O resultado disso é que é mais fácil fazer alterações - alterar os arquivos de sintaxe existentes às vezes pode ser um pouco complicado. A desvantagem é que você não receberá nenhuma atualização futura no arquivo do sistema.
Costumo usar isso como ponto de partida para experimentar arquivos de sintaxe e depois extrair minhas alterações locais para uma adição local usando um dos métodos descritos abaixo.
Adições locais
Existem duas maneiras de adicionar adições locais aos arquivos de sintaxe: elas são funcionalmente idênticas e você pode usar o método que preferir.
Syntax
autocmdUse o
Syntax
autocmd:Observe que encadear vários comandos com
|
é problemático aqui, pois eles tendem a ser interpretados como parte do:syn
comando, e é por isso que repetiautocmd Syntax c
várias vezes. Uma alternativa seria usar uma função:A vantagem é que todas as alterações podem estar contidas em um único arquivo. A desvantagem é que é um pouco feio, especialmente se você tiver muitas alterações.
depois do diretório
Use o diretório pós-:
~/.vim/after/<file>.vim
.Isso será carregado depois de
<file>.vim
has, onde<file.vim>
está o caminho relativo a$VIMRUNTIME
(incluindo subdiretórios). No seu exemplo, deveria sersyntax/c.vim
.Veja também
:help after-directory
.A vantagem é que é um pouco mais legível que o autocmd, especialmente se você tiver muitas alterações. A desvantagem é que você precisará copiar um arquivo adicional se quiser espelhar sua configuração do Vim para máquinas diferentes (esse é um motivo importante para muitas pessoas manterem os arquivos do Vim em um repositório do GitHub, para que possam ser espelhados facilmente entre as máquinas. )
fonte