O Vim não aceita trema como caracteres de palavra

9

Quando escrevo um texto em alemão contendo algo como, abücdpor exemplo, e para um dwna frente, ele exclui apenas o texto, abpois não interpreta ücomo um caractere de palavra.

Quando edito reStructuredText, tenho

iskeyword=38,42,43,45,47-58,60-62,64-90,97-122,_

Isso explica por que os trema não estão marcados, mas eu não entendo de onde isso vem. Quando abro o gVim, isso é definido como

iskeyword=@,48-57,_,192-255

De onde isso poderia estar vindo?

Martin Ueding
fonte
3
Coloque set encoding=utf-8no seu .vimrc.
cuonglm
Isso já está no meu .vim/vimrce :set enc?me dá utf-8. O mesmo com fenc. Ainda não funciona.
Martin Ueding
Depois :set iskeyword&é üainda não é reconhecido como uma parte de uma palavra?
Ryuichiro 7/11
Mostre como sua iskeyword ( set iskeyword). Deve ser algo como "@,48-57,_,128-167,224-235"ou "@,48-57,_,192-255". Você está usando Vim ou Vi? (o valor padrão no Vi ( "@,48-57,_") não reconhece ü; o valor padrão no vim é bom)
JJoao
11
Eu uso o gVim e tenho iskeyword=@,48-57,_,192-255. Agora funciona magicamente em uma instância nova do Vim. Isso é estranho, tenho que observar isso com mais cuidado.
Martin Ueding 07/11/2015

Respostas:

5

O @caractere iskeywordinclui todos os caracteres para os quais isalpha()(função C) é VERDADEIRA; nas implementações modernas da libc (nos últimos 20 anos), isso também procura caracteres unicode.

Seus segundos iskeywordusos 97-122(az) e 64-90(AZ), que não incluem todas as variantes dos vários sinais diacríticos (como o trema / diaeresis / trema).

Portanto, a solução é substituir 97-122e 64-90com @.

Este funky iskeywordvem do arquivo de sintaxe LISP; o rstarquivo de sintaxe inclui vários outros arquivos de sintaxe para destacar os blocos de código.

Felizmente, você pode definir quais idiomas incluir na g:rst_syntax_code_listvariável. O padrão é:

let g:rst_syntax_code_list = ['vim', 'java', 'cpp', 'lisp', 'php', 'python', 'perl']

Como é improvável que você precise destacar a sintaxe LISP no seu arquivo reStructuredText, provavelmente você pode removê-lo. Apenas adicione-o em qualquer lugar do seu arquivo vimrc, se estiver definido, o arquivo de sintaxe usará esse valor em vez de definir o seu próprio.

Na minha opinião, você provavelmente deseja usar:

let g:rst_syntax_code_list = []

Porque quem sabe quais efeitos colaterais descolados os outros arquivos de sintaxe causam ...

Martin Tournoij
fonte
Legal, obrigado! Isso não aconteceu comigo no Ubuntu até agora, apenas aconteceu aqui no Fedora 22. Provavelmente os arquivos de sintaxe deles são um pouco diferentes. Funciona agora.
Martin Ueding
A dica @para os caracteres alfanuméricos foi realmente útil.
Zelphir Kaltstahl,
1

Se alguém alinha gramáticas de outros idiomas em, por exemplo, arquivos de remarcação, as configurações desses idiomas parecem substituir as configurações da sintaxe de remarcação. Pode-se verificar se é esse o caso usando:

:verbose set iskeyword?

Para corrigir isso, pode-se definir um comando automático a ser executado sempre que entrar em um arquivo de remarcação (e provavelmente em outros idiomas também):

autocmd BufEnter,BufNewFile *.md set iskeyword=38,42,43,45,47-58,60-62,_,@

Colocar isso no meu .vimrcproblema corrigido para mim. Eu estava usando vim-pandocsintaxe e línguas inlined incluindo racket, python, she alguns. Eu acho que não é necessário definir um comando automático para deixar arquivos de remarcação, porque quando você digita arquivos de outros idiomas, seus arquivos de sintaxe devem definir suas palavras-chave, se bem entendi.

Zelphir Kaltstahl
fonte