Vim non prende le umlaut come caratteri di parole


9

Quando scrivo un testo tedesco contenente qualcosa di simile, abücdad esempio, e uno dwdavanti, cancellerà solo il abdato che non interpreta ücome un carattere di parola.

Quando modifico reStructuredText, ho

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

Questo spiega perché le umlaut non sono contrassegnate, ma non capisco da dove provenga. Quando apro gVim, questo è impostato su

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

Da dove potrebbe provenire?


3
Inserisci il set encoding=utf-8tuo .vimrc.
cuonglm,

Questo è già nel mio .vim/vimrce :set enc?mi dà utf-8. Lo stesso con fenc. Tuttavia non funziona.
Martin Ueding,

Dopo non :set iskeyword&è üancora riconosciuto come parte di una parola?
Ryuichiro,

Mostra come iskeyword ( set iskeyword). Dovrebbe essere qualcosa di simile "@,48-57,_,128-167,224-235"o "@,48-57,_,192-255". Stai usando Vim o Vi? (il valore predefinito in Vi ( "@,48-57,_") non riconosce ü; il valore predefinito in Vim va bene)
JJoao

1
Uso gVim e ho iskeyword=@,48-57,_,192-255. Ora funziona magicamente in una nuova istanza di Vim. È strano, devo osservarlo più attentamente.
Martin Ueding,

Risposte:


5

Il @carattere in iskeywordinclude tutti i caratteri per i quali isalpha()(funzione C) è TRUE; nelle implementazioni libc moderne (ultimi 20 anni) questo cerca anche caratteri unicode.

Il tuo secondo iskeywordusa 97-122(az) e 64-90(AZ), che non include tutte le varianti con i vari segni diacritici (come umlaut / diaeresis / trema).

Quindi la soluzione è sostituire 97-122e 64-90con @.

Questo funky iskeywordproviene dal file di sintassi LISP; il rstfile di sintassi include un gruppo di altri file di sintassi per evidenziare i blocchi di codice.

Fortunatamente puoi impostare quali lingue includere con la g:rst_syntax_code_listvariabile. L'impostazione predefinita è:

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

Poiché è improbabile che tu abbia bisogno di evidenziare la sintassi LISP nel tuo file reStructuredText, probabilmente puoi semplicemente rimuoverlo. Basta aggiungerlo ovunque nel file vimrc, se è definito, il file di sintassi utilizzerà quel valore invece di definirne uno proprio.

Secondo me, probabilmente vorrai usare:

let g:rst_syntax_code_list = []

Perché chissà quali effetti collaterali funky causano gli altri file di sintassi ...


Bene, grazie! Questo non è successo a me su Ubuntu finora, è successo solo qui su Fedora 22. Probabilmente i loro file di sintassi sono un po 'diversi. Ora funziona.
Martin Ueding,

Il suggerimento con la @posizione di caratteri alfanumerici è stato davvero utile.
Zelphir Kaltstahl,

1

Se si incorporano grammatiche di altre lingue, ad esempio nei file di markdown, le impostazioni di tali lingue sembrano sovrascrivere le impostazioni per la sintassi del markdown. Si può verificare se questo è il caso usando:

:verbose set iskeyword?

Per risolvere questo problema, è possibile definire un comando automatico da eseguire ogni volta che si immette un file markdown (e probabilmente anche altre lingue):

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

Mettendo questo nel mio .vimrcrisolto il problema per me. Stavo usando vim-pandocla sintassi e le lingue inline tra cui racket, python, she un po '. Penso che non sia necessario definire un comando automatico per lasciare i file markdown, perché quando si inseriscono file di altre lingue, i loro file di sintassi dovrebbero impostare le loro parole chiave, se capisco correttamente.

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.