Portál AbcLinuxu, 14. května 2025 03:10
:set enc? :set fenc?vzdy mi ukazuje znaky balast. Rozmyslam ze skusim nejaky novy editor pod X, ale tak sa radcej popytam co mate vy?
:set enc=utf-8
Pokud se vam soubor, ktery editujete ukazuje s klikyhaky, tak ten soubor ma jine kodovani, nez mate nastaveno (pomoci :set enc). Musite tedy zjistit, v jakem je kodovani a pak to spravne nastavit.
V jakem je soubor kodovani se da zjistit napr. programem enca (http://trific.ath.cx/software/enca/).
MS-Windows code page 1250 LF line terminatorsAle aj ked vo VIM napisem
:set fenc=cp1250Tak to text nezmeni a stale mam tam tie makcene ako haky - baky, ibaze by ste mali lepsi napad a cp1250 nebolo to kodovanie doho filu. ???
Vysvetleni jednotlivych nastaveni.
Autodetekce kodovani ve Vimu pomoci programu enca.
Ano GVim je urcite moc dobra volba
fileleencodins=ucs-bom,utf-8,default,latin1
Problém je v tom, že proběhla špatně autodetekce. Schválně si zkus přidat do ~/.vimrc následující řádek a vše by mělo fungovat:
set fileencodings=cp1250
Kdyby proběhla správně bylo by fileencoding=cp1250
a ne latin1
.
Pro fileleencodins=ucs-bom,utf-8,default,latin1
probíhá autodetekce následujícím způsobem:
Ovšem tato autodetekce je nevhodná, protože se velice snadno svede na špatnou cestu. Proto je nejlepší použít pro autodetekci externí program enca a přidat do ~/.vimrc:
function GetEncoding(f)
let e = system('enca -Pe "' . a:f . '"')
let e = substitute(e, '/.*', '', '')
if e =~ 'unknown'
return 'ascii'
endif
return e
endfunc
au BufReadPre * exec "set fencs=" . GetEncoding(expand('<afile>'))
Všimni si, že výsledek autodetekce se předá do nastavení fileencodings
.
/root/inst-sys/.vimrc /usr/src/dicts/ispell-czech/vimrc /usr/share/vim/vim71/gvimrc_example.vim /usr/share/vim/vim71/vimrc_example.vim /usr/share/doc/packages/vim/vimrc_example1 /usr/share/doc/packages/vim/vimrc_example2 /usr/share/doc/packages/vim/suse.vimrc /usr/share/doc/packages/gvim/gvimrc_example.vim /usr/share/doc/packages/gvim/suse.gvimrc /etc/vimrctych ciest na ten subor je viac, do ktoreho to vlozit. ak napisem set fileencodings=cp1250, nastavenie je docasne, kde do cesty pridam este aj toto kodovanie?
Co Ti vrátí příkaz enca -Pe tvuj_soubor
?
Správně:
$ enca -Pe /etc/fstab
ASCII
Při chybě:
$ enca -Pe /tmp/fstab
enca: Cannot open file `/tmp/fstab' in mode rb: No such file or directory
Takže to vypadá, že Ti enca místo detekce kódování vrátila chybu.
Zkus použít přiložený ~/.vimrc
.
lileencodings=ucs-bom,utf-8,default,latin1,cp1250Nevies ako to spravit?
Takže už Ti to na existující soubory funguje?
Ano, enca se samozřejmě při vytvoření nového souboru vůbec nespouští, protože žádný soubor ještě nexistuje. Takže si do ~/.vimrc
přidej:
set fileencoding=cp1250
Nyní nově vytvořené soubory budou v cp1250 a v případě otevření již existujícího souboru se použije enca na autodetekci a kódování se správně změní.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.