Ustaw kodowanie i kodowanie plików na utf-8 w Vimie

100

Jaka jest różnica między tymi dwoma poleceniami?

  • set encoding=utf-8
  • set fileencoding=utf-8

Czy muszę ustawić oba, gdy chcę używać UTF-8?

Czy muszę także ustawić kodowanie plików za pomocą setlub setglobal?

Kiraly Zoltan
źródło
Zauważ, że bezpieczniej jest ustawić kodowanie w swoim LOCALE zamiast wymuszać go w Vimie, na wypadek gdybyś edytował plik inny niż Unicode. Otrzymasz taki sam wynik, jak domyślnie LOCALE i nie zepsujesz żadnych obcych znaków, jeśli zostaną spełnione.
timss

Odpowiedzi:

93

TL; DR

W pierwszym przypadku za pomocą set encoding=utf-8zmienisz kodowanie wyjściowe wyświetlane w terminalu.

W drugim przypadku za pomocą set fileencoding=utf-8zmienisz kodowanie wyjściowe zapisywanego pliku .

Jak stwierdził @Dennis, możesz ustawić je oba w swoim ~ / .vimrc, jeśli zawsze chcesz pracować utf-8.

Więcej szczegółów

Z wiki VIM o pracy z Unicode

encodingokreśla, w jaki sposób vim ma reprezentować znaki wewnętrznie . Utf-8 jest niezbędny dla większości odmian Unicode.”

" fileencodingustawia kodowanie dla konkretnego pliku (lokalnie w buforze);: setglobal ustawia wartość domyślną. Można również użyć pustej wartości: domyślnie jest to to samo co 'kodowanie'. Lub możesz ustawić jedno z kodowań ucs, Może to spowodować, że ten sam plik na dysku będzie większy lub mniejszy w zależności od konkretnej kombinacji znaków. Ponadto, IIUC, utf-8 jest zawsze big-endian (najpierw wysoki bit), podczas gdy ucs może być big-endian lub little-endian, więc jeśli użyj go, prawdopodobnie będziesz musiał ustawić 'bombę' (patrz poniżej). "

Adrien Lacroix
źródło
3
Przepraszam, nie rozumiem. Co dokładniej robi kodowanie plików?
Kiraly Zoltan
25
W pierwszym przypadku zmienisz kodowanie wyjściowe, które jest wyświetlane w terminalu. W drugim przypadku zmienisz kodowanie wyjściowe zapisywanego pliku.
Adrien Lacroix
1
+1 Krótka i słodka odpowiedź, zamiast zwykłego powtarzania oficjalnej dokumentacji! :)
425nesp
W razie potrzeby ad-hoc bezpośrednio z wiersza poleceń vim -c "set encoding=utf-8" file.ext.
Hans Ginzel
87
set encoding=utf-8  " The encoding displayed.
set fileencoding=utf-8  " The encoding written to file.

Równie dobrze możesz ustawić oba w swoim, ~/.vimrcjeśli zawsze chcesz pracować z utf-8.

Dennis
źródło
0

Możesz ustawić zmienną 'fileencodings' w swoim .vimrc.

To jest lista kodowań znaków branych pod uwagę przy rozpoczynaniu edycji istniejącego pliku. Kiedy plik jest czytany, Vim próbuje użyć pierwszego wymienionego kodowania znaków. W przypadku wykrycia błędu próbowany jest następny z listy. Po znalezieniu kodowania, które działa, ustawiane jest „kodowanie pliku”. Jeśli wszystko zawiedzie, właściwość „fileencoding” jest ustawiana na pusty ciąg, co oznacza, że ​​używana jest wartość „encoding”.

Widzieć :help filencodings

Jeśli często pracujesz np. Z cp1252, możesz go tam dodać:

set fileencodings=ucs-bom,utf-8,cp1252,default,latin9
Mike11
źródło