Come posso fare in modo che Vim smetta di dividere le mie parole in blocchi?


8

Gli utenti di lingua inglese probabilmente non hanno questo problema, ma vim è piuttosto stupido quando si tratta di espressioni regolari. Nel mio caso, la maggior parte delle lettere dell'alfabeto turco al di fuori dell'alfabeto EN non sembrano qualificarsi come caratteri di parole.

Dato un documento che contiene una parola turca:

gerçekleşiyor

L'espressione di ricerca

/ger\wek

... non corrisponderà all'inizio della parola. Per qualunque motivo ç non è una parola carattere.

Questo diventa esasperante quando i plugin usano \wcome parte del loro repertorio di espressioni regolari. Un caso emblematico è neocompcache(che io uso invece neocompleteperché compatibile con Neovim). Escludendo le regole di corrispondenza extra per alcune sintassi del linguaggio, il completamento automatico si verifica solo in blocchi di dimensioni di parole. Quando scrivo grandi quantità di prosa turca, sarebbe effettivamente utile avere un completamento automatico funzionale, ma con la maggior parte delle parole spezzate in blocchi più piccoli con i caratteri turchi lasciati fuori, è inutile.

Come posso convincere vim (preferibilmente neovim se è importante) ad accettare una gamma più ampia di caratteri come caratteri "a parola"?


Quale codifica e codifica file stai usando?
cxw,

@cxw utf-8su tutta la linea. E sì, è impostato in entrambe queste impostazioni.
Caleb,

1
Hai taggato questa domanda come neovim . Ti suggerirei di aprire un problema nel tracker problemi di NeoVim, se non ce n'è già uno. Questo probabilmente non sarà risolto a breve termine, ma sarà in linea con il tempo ... Puoi anche provare a pubblicare un messaggio su vim_dev a riguardo, ma sospetto che tutti saranno d'accordo sul fatto che qualcosa deve essere fatto, dopo di che nulla i cambiamenti.
Martin Tournoij,

@Carpetsmoker Neovim Problema aperto .
Caleb,

Risposte:


5

\wè esplicitamente abbreviato per [0-9A-Za-z_]. Utilizzare \kinvece se si desidera abbinare caratteri Unicode al di fuori di tale intervallo. Ad esempio, le /ger\kekpartite gerçekleşiyor.

A proposito, neocomplete ne è consapevole ma intenzionalmente non utilizza \k(per impostazione predefinita) a causa di problemi di prestazioni. È possibile modificare l' g:neocomplete#keyword_patternsimpostazione del neocomplete . Guarda anche:

https://github.com/Shougo/neocomplete.vim/issues/207


4

Sembra che non ci sia un modo semplice per ridefinire \w. Vedi, ad esempio, Vim regex corrisponde ai caratteri unicode come non parola e Trova parola contenente caratteri oltre a-zA-Z .

Tuttavia, si potrebbe essere in grado di utilizzare un intervallo personalizzato, se non ti dispiace ridigitare regolarmente (ha): [a-zA-Z\%u00c7-\%u015f]. Questo sfortunatamente corrisponderà anche a molti caratteri non turchi, ma se quei caratteri non compaiono nel tuo testo, potrebbe essere OK.


1
Sfortunatamente non ho il controllo di tutti i luoghi in cui vengono utilizzate tali espressioni regolari. Qualsiasi numero di plugin fa uso \we quindi cadono tutti quando si tratta di questo. Piuttosto che rattoppare ogni tanto (se riesco persino a rintracciare i colpevoli), sarebbe più facile per me correggere VIM in modo che funzioni \w. Bah.
Caleb,
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.