Portál AbcLinuxu, 10. května 2025 04:57

Dotaz: : vim set fenc=cp1250 nefunguje

25.8.2007 10:42 Lukáš Zapletal | skóre: 42 | blog: lzapův svět | Olomouc
: vim set fenc=cp1250 nefunguje
Přečteno: 1055×
Odpovědět | Admin
Zdravím,

potřebuji zeditovat soubor s windows kódováním, ale když dám nahoru komentář
; vim: set fenc=cp1250 sw=4 ts=4 sts=4 sta et ai :
tak se soubor načte se špatným kódováním. Jakoby se tyhle instruce prováděly až po načtení souboru. Když totiž provedu načtení přímo z vimu, je to ok:

:e ++enc=cp1250 soubor.txt

Kde je chyba? Zkoušel jsem v tom řádku psát různé kombinace enc/fenc, ale nezabírá níc. Jedině když soubor otevřu přímo z vimu.
Later --- Lukáš Zapletal
Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

25.8.2007 11:54 stinovlas | skóre: 8 | blog: stinovlas_blog
Rozbalit Rozbalit vše Re: : vim set fenc=cp1250 nefunguje
Odpovědět | | Sbalit | Link | Blokovat | Admin
co vypíše :set modeline? a :set modelines?
~stinovlas
25.8.2007 22:32 Lukáš Zapletal | skóre: 42 | blog: lzapův svět | Olomouc
Rozbalit Rozbalit vše Re: : vim set fenc=cp1250 nefunguje
:set modeline?
modeline

:set modelines?
5
25.8.2007 12:01 stinovlas | skóre: 8 | blog: stinovlas_blog
Rozbalit Rozbalit vše Re: : vim set fenc=cp1250 nefunguje
Odpovědět | | Sbalit | Link | Blokovat | Admin
Btw, na co je nastavené fileencodings (fencs)? Doporučuji k prostudování :help fenc
~stinovlas
25.8.2007 22:34 Lukáš Zapletal | skóre: 42 | blog: lzapův svět | Olomouc
Rozbalit Rozbalit vše Re: : vim set fenc=cp1250 nefunguje
fileencodings=ucs-bom,utf-8,default,iso-8859-2,latin1

Tak nějak vím (alespoň doufám), jak by to mělo fungovat. Jenže se mi zdá, že to nedělá to, co má...
25.8.2007 22:52 stinovlas | skóre: 8 | blog: stinovlas_blog
Rozbalit Rozbalit vše Re: : vim set fenc=cp1250 nefunguje
Zkuste do fileencodings dopsat cp1250, snad to pomůže...
~stinovlas
26.8.2007 10:41 Lukáš Zapletal | skóre: 42 | blog: lzapův svět | Olomouc
Rozbalit Rozbalit vše Re: : vim set fenc=cp1250 nefunguje
fileencodings=ucs-bom,utf-8,default,iso-8859-2,cp1250,latin1

Bohužel nepomohlo...
26.8.2007 15:02 Ash | skóre: 53
Rozbalit Rozbalit vše Re: : vim set fenc=cp1250 nefunguje
No pokud to dáte až na konec, tak je dost pravděpodobné, že se dřív ujme utf-8, default (systémové) nebo iso8859-2 a k cp1250 to ani nedojde. Třeba autodetekce iso8859-2 vs. cp1250 je samozřejmě ošemetná věc, pokud to kódování znáte a víte a chcete, tak to musíte nastavit natvrdo. Více viz níže.
26.8.2007 14:59 Ash | skóre: 53
Rozbalit Rozbalit vše Re: : vim set fenc=cp1250 nefunguje
Odpovědět | | Sbalit | Link | Blokovat | Admin
Je to tak, když se vim z modeline dozví, že je soubor v kódování X, tak už je pozdě, protože už ho má načtený a o kódování (co se týče zobrazení) se již rozhodlo.

To read a file in a certain encoding it won't work by setting 'fileencoding', use the |++enc| argument.

Pokud vám nevyhovuje autodetekce v rámci nastavených fileencodings, je ještě možnost použít externí soft pro detekci a pak trigger na BufReadPre
function GetEncoding(f)
  let e = system('enca -Pe "' . a:f . '"')
  let e = substitute(e, '/.*', '', '')
  if e =~ 'unknown'
    return 'ascii'
  endif
  return e
endfunc
if has("autocmd")
  au BufReadPre * exec "set fencs=ucs-bom," . GetEncoding(expand('<afile>'))
endif
(Fakt už nevím kde jsem tohle splašil.)

Nebo já jsem si ještě přidal něco podle extension, třeba pro tex (csplain), gnuplot a tak:
if has("autocmd")
  au BufReadPre,BufNewFile *.tex set fenc=iso-8859-2
  au BufReadPre,BufNewFile *.gnu set fenc=iso-8859-2
  au BufReadPre,BufNewFile *.plot set fenc=iso-8859-2
endif
26.8.2007 15:52 Ash | skóre: 53
Rozbalit Rozbalit vše Re: : vim set fenc=cp1250 nefunguje
Jo někdy mi to nechtělo brát když vybrané kódování nebylo v fencs, tak před to kdyžtak nastavit fencs buď prázdné, nebo na stejné kódování.
if has("autocmd")
  au BufReadPre,BufNewFile *.tex set fencs=iso-8859-2
  au BufReadPre,BufNewFile *.gnu set fencs=iso-8859-2
  au BufReadPre,BufNewFile *.plot set fencs=iso-8859-2
endif
Do jednoho příkazu mi to sloučit nejde:
au BufReadPre,BufNewFile *.tex set fencs=iso-8859-2
  \set fenc=iso-8859-2
(nefunguje)
Pak je tu ještě možnost zkusit
vim a.tex -c "set fileencodings=cp1250" -c "set fileencoding=cp1250"
nebo --cmd (tam je riziko že to .vimrc přebije)
vim a.tex --cmd "set fileencodings=cp1250" --cmd "set fileencoding=cp1250"

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.