Vim nie przyjmuje umlautów jako znaków słownych

9

Kiedy piszę tekst w języku niemieckim zawierający coś takiego jak abücdna przykład i na dwpoczątku, spowoduje to jedynie usunięcie, abponieważ nie interpretuje on üjako znaku słowa.

Kiedy edytuję reStructuredText, mam

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

To wyjaśnia, dlaczego umlauty nie są oznaczone, ale nie rozumiem, skąd to się bierze. Kiedy otwieram gVim, jest to ustawione na

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

Skąd to może pochodzić?

Martin Ueding
źródło
3
Wprowadź set encoding=utf-8swoje .vimrc.
cuonglm,
To już jest w mojej mocy .vim/vimrci :set enc?daje mi utf-8. To samo z fenc. Nadal nie działa.
Martin Ueding,
Po :set iskeyword&jest ünadal nie rozpoznawany jako część wyrazu?
ryuichiro
Pokaż jako swoje słowo kluczowe ( set iskeyword). Powinno to być coś w stylu "@,48-57,_,128-167,224-235"lub "@,48-57,_,192-255". Czy używasz Vima lub Vi? (domyślna wartość w Vi ( "@,48-57,_") nie rozpoznaje ü; domyślna wartość w Vimie jest w porządku)
JJoao,
1
Używam gVim i mam iskeyword=@,48-57,_,192-255. Magicznie działa teraz w nowej instancji Vima. To dziwne, muszę to uważniej obserwować.
Martin Ueding

Odpowiedzi:

5

@Postacią iskeywordobejmuje wszystkie znaki, dla których isalpha()(funkcja C) jest prawdą; w nowoczesnych (ostatnich 20 latach) implementacjach libc szuka to także znaków Unicode.

Twoje drugie iskeywordużycie 97-122(az) i 64-90(AZ), które nie obejmuje wszystkich wariantów z różnymi znakami diakrytycznymi (takimi jak umlaut / diaeresis / trema).

Więc rozwiązaniem jest zastąpienie 97-122i 64-90z @.

Ten funky iskeywordpochodzi z pliku składni LISP; rstplik składnia zawiera kilka innych plików składni dla podkreślając bloki kodu.

Na szczęście możesz ustawić, które języki mają być uwzględnione w g:rst_syntax_code_listzmiennej. Domyślnie jest to:

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

Ponieważ jest mało prawdopodobne, że potrzebujesz podświetlania składni LISP w pliku reStructuredText, prawdopodobnie możesz go po prostu usunąć. Po prostu dodaj go w dowolnym miejscu pliku vimrc, jeśli jest zdefiniowany, plik składniowy użyje tej wartości zamiast zdefiniować własną wartość.

Moim zdaniem prawdopodobnie chcesz użyć:

let g:rst_syntax_code_list = []

Bo kto wie, jakie fajne efekty uboczne powodują inne pliki składniowe ...

Martin Tournoij
źródło
Fajnie, dziękuję! Do tej pory nie zdarzyło mi się to na Ubuntu, zdarzyło się to tylko tutaj na Fedorze 22. Prawdopodobnie ich pliki składniowe są nieco inne. Teraz działa.
Martin Ueding
@Bardzo pomocna była wskazówka dotycząca znaków alfanumerycznych.
Zelphir Kaltstahl
1

Jeśli wstawimy gramatykę z innych języków na przykład w plikach Markdown, wówczas ustawienia tych języków wydają się zastępować ustawienia składni Markdown. Można to sprawdzić za pomocą:

:verbose set iskeyword?

Aby to naprawić, można zdefiniować automatyczne polecenie, które będzie uruchamiane przy każdym wejściu do pliku przeceny (i prawdopodobnie także w innych językach):

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

Umieszczenie tego w moim .vimrcrozwiązało problem dla mnie. I był przy użyciu vim-pandocskładni i inlined Języki tym racket, python, sha niektóre. Myślę, że nie trzeba definiować automatycznego polecenia do opuszczania plików przeceny, ponieważ kiedy wprowadzasz pliki innych języków, ich pliki składniowe powinny ustawiać słowa kluczowe, jeśli dobrze rozumiem.

Zelphir Kaltstahl
źródło