Portál AbcLinuxu, 26. dubna 2024 10:33


Dotaz: vim, .vimrc, enca

27.3.2004 19:30 satori | skóre: 15
vim, .vimrc, enca
Přečteno: 323×
Odpovědět | Admin
ahoj, rovnou řeknu, že jsem začátečník (v nějakym skriptování pro bash rozhodně) a vůbec nevim, co dělám, ale lepší řešení jsem nenašel (na stránkách vimu je cosi, co by podle kódování zapsaného v html poznalo, co je jak kódováno, ale mě nejde jenom o html). rád bych dal do souboru .vimrc nějakej skript, kterej by rozpoznal kódování editovaného souboru, otevřel ho v dané kódové stránce, editoval a uložil ho v ní. včera jsem napsal "spouštěč" pro mplayer
#!/bin/sh
kodovani=`enca -gi $1`
if [ "$kodovani" = "CP1250" ]
        then mplayer -sub $1 -subcp cp1250 $2
else
        if [ "$kodovani" = "ISO-8859-2" ]
        then mplayer -sub $1 -subcp latin2 $2
        else echo fuckin format:-/
        fi
fi
je možné něco takového dát do .vimrc, případně jak napíšu do spouštěče příkaz :set fencs a/nebo :set fenc, aby se to vykonalo ještě před otevřením souboru? v manuálu jsem to jako přepínač (-fenc nebo tak něco) nenašel. můžete mi prosím někdo poradit? velice děkuji
všechno, co říkám, je IMHO
Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

27.3.2004 21:59 unchallenger | skóre: 69 | blog: unchallenger
Rozbalit Rozbalit vše vim, .vimrc, enca
Odpovědět | | Sbalit | Link | Blokovat | Admin
Na tohle bych asi měl odpovědět já ;-)

Mám tohle vyřešeno jen pro Latin2/UTF-8, protože ostatní kódování jsou Velké Zlo a převádím je okamžitě na něco normálního. Protože toho chci při každém kódování ve vimu nastavit celkem hodně (fonty, listchars, některých mappingy neob funkce specifické pro UTF-8, ...), takže stejně moc v jedné instanci koexistovat nemohou, tak kódování netestuji uvnitř vimu, ale obaluji vim funkcí shellu (která by šla napsat inteligentněji, ale zatím mi to nestálo za námahu, navíc vim už dneska dokáže rozeznat Latin2/UTF-8 sám)
function v() {
  local cmd
  if [ -n "$1" -a -f "$1" ] && enca -e "$1" | grep -i 'utf-8' >/dev/null; then
    cmd=gvim-utf8
  else
    cmd=gvim
  fi
  $cmd -o "$@"
}
přičemž gvim-utf8 je link na vim, a ve .vimrc pak testuji
if v:progname =~ "-utf8$"
  let use_unicode=1
endif
a pak to různě větvím podle hodnoty use_unicode.

Nastavování fenc v BufReadPost, jak radí help, mi popravdě řečeno nějak moc nefunguje. Ale lze to v nejhorším zařídit drsnou metodou, kdy se před načtením souboru nastaví hodnota fencs, tj. něčím ve smyslu
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>'))
27.3.2004 22:13 Michal Marek (twofish) | skóre: 55 | blog: { display: blog; } | Praha
Rozbalit Rozbalit vše vim, .vimrc, enca
Vyuziju tohohle threadu k dalsi otazce: Daji se ve vimu nejak nastavovat volby podle vystupu externich programu? Kdyz jsem si precetl satoriho otazku tak me totiz jako prvni napadlo reseni pomoci `backticks`, ale ty funguji jinak nez jsem ocekaval (jinak nez treba v muttu) :-(
27.3.2004 22:15 Michal Marek (twofish) | skóre: 55 | blog: { display: blog; } | Praha
Rozbalit Rozbalit vše vim, .vimrc, enca
Vlastne radsi

s/Daji se ve vimu nejak nastavovat/Jak se daji ve vimu nastavovat/

;)
27.3.2004 22:21 Michal Marek (twofish) | skóre: 55 | blog: { display: blog; } | Praha
Rozbalit Rozbalit vše vim, .vimrc, enca
Oops, rycheji pisu nez premyslim, je to prekvapive system... jsem blbej :-/
27.3.2004 22:26 unchallenger | skóre: 69 | blog: unchallenger
Rozbalit Rozbalit vše vim, .vimrc, enca
Co chceš jiného než použití system() + :execute jako v tom posledním kusu kódu?
27.3.2004 22:36 Michal Marek (twofish) | skóre: 55 | blog: { display: blog; } | Praha
Rozbalit Rozbalit vše vim, .vimrc, enca
Nic vic nechci, to je presne co jsem hledal, diky.

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.