Tenhle: http://webserver.ics.muni.cz/bulletin/articles/358.html ?
Z popisu nezni uplne jako prg editor, ale mozna se na to hodi.
Slo by zminit, v cem vynika? Nejaka fce navic, nebo ergonomie? Treba by melo smysl v myslence pokracovat, pokud tam nejaka je.
Fascinující byla makra, bylo možné je jak "odposlouchat", tak vyeditovat jako textový soubor na disku. V podstatě každé klávese (samotné nebo se Shiftem nebo s Ctrl nebo s obojím, a snad to reagovalo i na Alt) se dala přidělit nějaká funkce. Navíc bylo možné mít více sad maker a nahrát si je podle potřeby (makra na psaní html, makra na psaní TeXu, makra na psaní javy atd.). A dalo se napsat i makro, které nahrálo jinou sadu maker, provedlo makro z této sady a pak nahrálo do editoru zase svůj soubor.
Něco takového třeba u vim s jeho naprosto idiotskou prací s makry, kterých je navíc jen velmi omezený počet (o shitech typu "office" nemluvě) dost postrádám.
Nicméně těch výhod a vychytávek by se našlo víc.
Klasicky volaná makra ve vim jsou omezena počtem písmen anglické abecedy. Další už jsou pouze předdefinované příkazy (čili :map makro význam). To je podstatně méně pohodlné a rychlé než stisknout více kláves současně.
Navíc se mi nikde v dokumentaci k vim nepodařilo najít, jak makra uložit jako soubor na disk a opět nahrát (nezdokumentovaná, špatně zdokumentovaná funkce = neexistující funkce). Zatímco tohle měl csed vyřešeno normálně = dialogem ukládání souboru a otevírání souboru.
Pokud myslíš makra jako q<letter> a @<letter>, pak samozřejmě ano, ta jsou omezená anglickou abecedou. Nicméně to jsou skutečně makra typu potřebuju teď udělat něco desetkrát, tak to jednou nahraju a pak zopakuju. Používat tohle na persistentní makra, k tomu to není určené ani vhodné. Osobně si celkem vystačím s tečkou, k tomuto se dostanu opravdu ojediněle. Cokoliv serióznějšího je dobré napsat skutečně důkladně přes map (klidně jako paste z nahraného makra) nebo script.
Co se týče případného uložení, tak se ukládají do registeru (do stejných jako yank, paste a další operace), proto to omezení. Stejně jako jakýkoli jiný stav editoru, se ukládají do .viminfo (pokud je nastaveno, či explicitně).
Čili je to podstatně méně výhodné než makra v csed, kde jsem mohl mít např. všechny html znaky jako jednu sadu maker, všechny příkazy v javě jako další sadu maker (atd.) a když jsem nahrál do editoru příslušný soubor maker, tak to vše bylo na dvouklávesových kombinacích. A každá ta sada maker byla extra soubor, který se dal překopírovat na disketu a přenést na jiný počítač.
Na tomhle nic obskurního není, naopak je to zcela konsistentní. Makra, funkce, nastavení a obecně cokoliv je definováno ve zdrojovém skriptu. Když chcu specifické nastavení pro nějaký soubor, nahraju si celé "nastavení" editoru z jediného skriptu (můžu samozřejmě z více, když budu chtít).
Potom samozřejmě to makro či funkci už pouštím způsobem specifickým pro konkrétní feature...
To si dovolím trošku nesouhlasit. Tím, že je prakticky veškerá konfigurace řešena formou skriptu, je ten systém krásně flexibilní, tj. pokud je zapotřebí v makru udělat něco, co již vyžaduje programovou logiku, není problém, prostě se přes call zavolá nějaká funkce.
Jinak bych se opravdu v této diskuzi snažil přesně definovat, co si kdo představuje pod pojmem makro a co v této oblasti CSED může nabídnout. Mám takový pocit, že v porovnání s Vimem to bude slabota POKUD tedy nenabízí nějaký skriptovací jazyk (a to jsme zase na začátku).
Jako makro si představuji sled příkazů dostupných z klávesnice. Např. se přesunout na začátek následujícího řádku a něco tam vložit. V extrémně minimalistickém případě vložení znaku, který není na klávesnici (takto jsem měl v "psacím" makru místo < a > "namapovány" francouzské uvozovky, které vyžadoval ve zdrojáku sázecí program mého tehdejšího nakladatele, konkrétně tohle dnes řeší TeX lépe).
Pro složitější věci spíš vložím do textu nějakou značku a pak ho přežvýkám uložený na disku perlovským skriptem. Z tohoto důvodu opravdu nepotřebuji pro běžné psaní nějaká supersložitá nebo "inteligentní" makra, nebo samostatný makrojazyk.
Začínám chápat, takže klasický trolling:
1) "Vim to neumí"
2) když další řeknou, že umí, tak "je to moc složitý, není dokumentace"
3) když další řeknou, že není složitý a je dokumentovaný "ale já vlastně do dokumentu vkládám obskurnosti a používám Perl pro expanzi" (tím pádem zahazuješ jakoukoli rozumnou formu spolupráce na dokumentu)
Dobrý triky, takže to bude skutečně nejlepší zůstat u primitivního editoru a k tomu se učit jeden z nejbizarnějších jazyků vůbec (Perl :-)
Takže ještě jednou:
1) to, co se ve Vimu zaznamenává přes @ a vyvolává přes q jsou většinou throwaway makra, která se sice automaticky ukládají do .viminfo, ale můžeš takto použít asi jen 30 expanzí a ještě se to blbě vyvolává
2) pro expanzi přímo při psaní je dost dobré použít :iabbrev, zkráceno na :iab Klasická expance, nějaké ty závorky, náhrada ,bb za , tex za \TeX atd. atd.
3) na všechno ostatní se používá příkaz :map a jeho varianty. Díky tomu máš k dispozici *všechny* možné klávesové kombinace, jak zkratku vyvolat
Dobře, budu konkrétní. V csedu jsem si mohl např. pro psaní v TeXu napsat makro, které na stisk jedné dvoukombinace kláves umělo napsat třeba
\begin{tabular}{}\hline
\end{tabular}
a přesunulo kursor do těch složených závorek, kam se píšou parametry tabulky.
Když jsem pracoval na zdrojovém textu pro TeXový dokument, tak jsem nahrál příslušnou sadu maker pro psaní TeXu a mohl jsem je použít. Při psaní textů jiného typu (třeba program v javě) jsem nahrál jinou sadu maker a příslušná kombinace kláves, pokud byla využita, dělala něco úplně jiného. Takže se mi nemohlo stát, aby se mi třeba javovské příkazy pletly do TeXu a naopak, jak se může stát, pokud to mám neoddělené (jak je to zřejmě v tom vim).
1. Čili něco, co zhruba odpovídá těm vašim makrům ukládaným přes @ a volaným přes q, byla makra v csedu, ale dala se volat daleko jednodušeji a intuitivněji a s menším rizikem náhodného spuštění při přehmátnutí se na klávesnici, takže i ergonomičtěji.
2. Klasickou expanzi (kdy editor "cosi" automaticky doplňuje do textu) odmítám používat, v editorech, kde to je a jde to vypnout, tuhle funkci vypínám a editory, kde to nejde vypnout, pokud možno nepoužívám. Tudíž její existence ve vim pro mě žádnou výhodu nepředstavuje (maximálně zvýšení rizika, že to náhodně spustím a rozdrbu si dokument).
3. Volání příkazu :map a něco k tomu je neskutečně složitější a ergonomicky nevýhodnější než současné zmáčknutí dvou kláves (jako v bodě 1).
Jako třeba http://www.vim.org/scripts/script.php?script_id=93 (rok 2001!) nebo http://vim-latex.sourceforge.net/documentation/latex-suite/latex-macros.html ?
Jinak samozřejmě scripty (makra, funkce, nastavení) jsou (můžou být) per file-type jak už někdo napsal dříve.
Ad 2: mno, tak buď makra chcu nebo nechcu, to je pak těžké...
Takže znovu:
1. Mám zájem makra, která se budou spouštět na současný stisk dvou kláves.
Protože kláves je omezený počet (i s kombinacemi <Ctrl> a <Alt> a <Shift>), vyhovovalo mi naprosté oddělení různých skupin takto nadefinovaných maker (do různých souborů z nichž jeden se explicitně nahrál do editoru a další jakoby neexistovaly).
Asi jak funguje jediné makro pro vim, které používám, které po stisku <F8> umožní volbu kódování.
2. Nemám zájem o
- to, aby přístupnost nebo postup vyvolání maker závisely na typu souboru
- něco, co mi pod rukama mění nebo "intuitivně dopisuje" psaný text (jak to dělá "expanze" třeba u různých kancelářských editorů)
- současný přístup ke všem možným (existujícím) makrům, protože to zbytečně
-- komplikuje dostávání se k tomu, co potřebuji
-- zvyšuje riziko překlepů a dalších chyb
- něco, co budu spouštět z příkazového režimu, tj.
-- musím přepnout do něj,
-- musím zadat dvojtečku a příkaz map
-- musím zadat název nějakého příkazu
- možnost nějakého složitého skriptování, protože to raději budu řešit jinými prostředky než editorem
Prostě, jak to bylo uděláno v csedu, tak mi to vyhovovalo podstatně víc a bylo to i ergonomičtější, než jak je to uděláno ve vim (které sebou ve své koncepci vláčí dědictví velmi primitivních poměrů a omezených možností před érou DOS).
Nezlobte se, ale mám pocit, že jste si :map a jeho alternativy nikdy pořádně nevyzkoušel.
Na druhou stranu je to jedno, Vim má své uživatele a evidentně CSED taky své uživatele (takže tímto přeji hodně štěstí s podporou Unicode, podporou dnešních monitorů, dlouhých názvů souborů atd. v tomto DOSovém programu)
Příkazy vim znám a některé používám. Nicméně, nezlobte se vy, ergonomicky je docela rozdíl spouštění nějakého příkazu na víc ťuknutí do klávesnice a zmáčknutím dvou kláves současně. A to ve prospěch té druhé možnosti.
Jinak csed nemohu používat, protože se mi pod DOSBoxem nepodařilo vyřešit českou klávesnici. Pokud bych to rozchodil v DOSBoxu, tak bych se, pochopitelně, nemusel zalamovat s monitorem. Absence UNICODE (nebo UTF8) je to nejmenší, co by mě trápilo, stejně, když něco píšu pro zpracování TeXem, tak se to musí psát v ISO-8859-2, případně do tohoto kódování konvertovat (vim je jeden z mála editorů na linuxu, které toto kódování umějí, myšleno bez nějakých problémů). Ta "univerzální" kódování jsou jen zdroj nekompatibilit (pokud někdo má názvy souborů s diakritikou nebo jinými exotickými znaky, tak s nimi řada programů neumí korektně pracovat) a dalších problémů. Jsou prostě jako "superuniverzální nůžky", které měl pan Souček ve své knize "blázniví vynálezci", které měly snad třicet funkcí, ale stříhat se s nimi dalo mizerně. Jejich vynucené používání (někdy po roce 2000) jsem nesl těžko, do té doby (Mandrake a první Mandriva po jeho zániku) jsem si je nastavoval vždy jako druhotná, pro použití jen v jasně definovaných případech (např. titulky k filmům).
Nehodlám vám brát vim, sám jsem nucen ho na některé věci používat, a proto také pociťuji, že v oblasti maker při praktickém používání za csed těžce zaostává, jak z hlediska funkčnosti (počet maker na klávesnici), tak i z hlediska ergonomie. Vyzkoušel jsem obojí, takže prostě vím, co mi vyhovuje lépe. Mít všechna makra v jednom souboru, který má navíc "natvrdo" nastavený název, považuji za víc nevýhodu než výhodu
Není problém, jen to vypadá, že každý při psaní považujeme za ergonomické něco jiného (což nevadí, protože nástroje se každému mohou přizpůsobit).
Já kromě Shiftu při psaní žádné další přeřaďovače nepoužívám, v tomto Vim hodně pomáhá, zejména při mapování na čárku a zpětné lomítko. Teoreticky by bylo možné si hodit Ctrl tam, kam patří (namísto CapsLock), ale tam teď mám jinou funkci (Esc a prohazování layoutu klávesnice), takže osobně bych možnosti CSEDu už nevyužil (ale někdo jiný s ohebnějšími prsty určitě ano, však lidi používají i Emacs a vypadají spokojeně).
Jinak Re: "Mít všechna makra v jednom souboru, který má navíc "natvrdo" nastavený název, považuji za víc nevýhodu než výhodu" - tak to není, to jsme už řešili o pár stránek výše.
1) s Ctrl, Alt apod. jde ergonomie dolů, píšete vůbec na klávesnici správně nebo stylem pana Semtamťuka?
2) I kdyby CSED nakrásně jel v DOSBoxu, pořád to bude umět jen nějaká prastará rozlišení, takže "dobré" pro očička
3) Unicode - to je vtip co píšete žejo? Nebo jste někde na konci řetězce tvorby dokumentace a ten text jde jen na vytištění? S nikým dalším se nespolupracuje, žadný e-bookový výstup, nic? Zajímavé, asi fakultní prostředí...
4) s těmi makry to není pravda, mohou být klidně v deseti souborech, proč to pořád opakujete???
1. Pokud je alternativou přepnutí do příkazového modu a volání příkazů, tak asi ne. Školený na klávesnici nejsem, ale úhozů mám vcelku dost.
2. Rozlišení programů v DOSBoxu řeší OS, tam problémy nejsou. Stejně většinou píšu, nebo jinak pracuji, v emulátoru konzoly.
3. Opravdu nemám potřebu psát mnohojazyčné texty s mnoha autory různých národností (kde má použití Unicode či UTF-8 asi opravdu velký přínos). Opakovaně jsem se setkal s tím, že zazipované adresáře nešly rozzipovat, protože jména souborů byla v Unicode nebo UTF-8, případně s dalšími podobnými problémy.
e-book bych rozhodně přes Unicode neřešil, od toho je pdf, a to mohu udělat v TeXu. Formáty typu epub nebo pdb jsou jen na zlost. Stahoval jsem si Gliese (časopis o exoplanetách), co to přestali dělat v pdf a přešli epub, tak jsem s tím přestal, protože tahle konkrétní verze formátu epub, co používají, je win/apple only, na linuxu to nic korektně nezobrazí (prostě obskurní formáty s obskurním kódováním češtiny, u nichž není zaručeno korektní zobrazení a nezobrazují se korektně ani obrázky, a to na vícero verzích Debianu s FBreaderem, kdy je výsledek prakticky stejný, jeden z těchto formátů má umět načíst Libreoffice, ale nesetkal jsem se se souborem, u něhož by se to povedlo). Tahle kódování jsou pro mě zcela bezcenná a jen přinášející problémy.
4. Protože to nikdo pořádně nevysvětlil, popsané to v dokumentaci rozumně není. Nehledě k tomu, že, jak jsem to pochopil ze zdejší diskuse, v jedné sadě maker na jednu klávesu může být ve vim podstatně méně příkazů než v tom csed (počet písmen angl. abecedy u vim versus několik set u csed).
Ad 1, 4:
:help :map-commands
:help abbreviations
:help :source
Nevím, co jste pochopil ze zdejší diskuze, ale (4) je nesmysl, což už bylo mnohokrát řečeno. Odpovědi viz help výše. Kromě výše uvedeného existují komplexní templates, viz například odkaz na tex plugin, existují velice hezké pluginy na editaci HTML nebo Java atd. Opět platí, že je můžete, ale nemusíte používat. Pokud chápu popis csed správně, tak ekvivalent ve ViM bude :imap nebo :nmap.
Nastavení (nejen makra, ale cokoliv) je specifické pro editovaný soubor. Nastavení lze nahrát explicitně a/nebo automaticky podle typu souboru a/nebo automaticky podle typu souboru a projektu (to už vyžaduje trochu skriptování s detekcí adresáře). Můžete si vybrat co chcete, z mého pohledu je první varianta obvykle nesmysl, druhá většinou dostatečná, třetí se hodí spíš vyjímečně při různých konvencích u různých projektů, ale jinak proti gustu samozřejmě nic...
Ad 3: to snad ani nestojí za komentář, doporučuju se posunout o století dál...
Zrovna teď řeším opravy nějakého textu v libreoffice. Kurzor musí být 2 - 5 znaků napravo od míste, kde se v textu mažou nebo dopisují písmena (tedy jsem nucen to dělat zkusmo a na slepo) - protože UTF8, v němž se nedá korektně vztáhnout pozice písmene k nějakému byte v textu. Prostě nesmysl, který je jen zdrojem chyb a problémů.
S linuxem pracuji cca 20 let. Takže se cítím být kompetentní k hodnocení, že to či ono se za tu dobu zlepšilo a jiné věci se zase zhoršily (a co fungovalo dřív, tak nefunguje, nebo funguje hůř).
Kdyby nebylo nuceného přechodu linuxového systému na UTF8, tak bych si vystačil s joe (který mi vyhovoval víc než vim, ale nenašel jsem, jak ho donutit ukládat texty kódované jinak, než co je natvrdo nastaveno v OS - na rozdíl od vim). A tahle diskuse by byla z větší části zbytečná.
Tedy moc nechapu, proc by se v Libreoffice mel nekdo (jak?) divat na hodnoty jednotlivych bajtu. To je co za vychytavku? Vidim to spis na problem s praci s daty (nejsou zalohy ze? :-)
Ale i tak - v UTF-8 se *presne* vi, kde znak zacina, staci se podivat i jen na clanek na wikipedii, neni potreba se divat do normy.
Prostě jsem napsal text (jako zdroják pro TeX) v geditu, a protože výsledek měl být vedle tisku v presentační kvalitě odevzdán v odt nebo doc, tak jsem ho překopíroval a potřeboval jsem jen vymazat TeXové tagy, kterých tam naštěstí nebylo moc. A Libreoffice si zjevně nerozuměla s textem v iso-8859-2, písmenka sice zvládla správně, ale kursor neuměla najít.
Mimochodem, v textu kódovaném v utf8 musí program při skoku o 1000 písmen dopředu nebo dozadu projít všechny byte, protože jedno písmeno může být kódováno jedním až 3 (a u exotických jazyků snad i více) byte. To, pochopitelně žere výkon počítače a občas se vloudí podobná chyba, na kterou jsem narazil já. Pokud je to normálně, tak prostě stačí skok o 1000 byte.
Stejné problémy má s texty v utf8 i Midnight Commander, alespoň jsem se s tím opakovaně setkal. Prostě kooperace mezi utf8 a jednobajtovými systémy kódování písmen není stoprocentní.
Jak se mohlo kódování projevit při překopírování do Libreoffice tedy nechápu, ale na 99% je to problém mezi klávesnicí a židlí (resp. ještě jinak: kdyby náš dokumentační tým řešil takové s prominutím kraviny, tak by si nevydělal ani na slanou vodu :-) a to komunikují s celým světem a taky přebírají různé formáty s výstupem do DocBooku (TeX je již z principu slepá ulička, takže ten je jen součástí toolchainu úplně na konci).
A ano, UTF-8 je transformation format, pokud někdo potřebuje (skutečně potřebuje?) práci s jednotlivými znaky, je zde UCS, pořád ale výhody převažují nad touto relativně malou nevýhodou, která je navíc řešena knihovnami.
Prostě po překopírování zdrojového textu z TeXu v iso-8859-2 v gedit do libreoffice na některých místech se úkony jako mazání nebo vkládání znaků děly nalevo od kurzoru. Jev jsem pozoroval jen na některých místech textu a tam, kde se vyskytoval, byl na různých místech řádku různě intenzívní (= počet znaků mezi kurzorem a místem akce byl různě velký). Neprocházel jsem celý text, jen místa, kde byly TeXové tagy, jako uvozovky apod.
Jinak bych si dovolil oponovat názoru, že je TeX slepá ulička, a to ze dvou důvodů:
1. Neexistují jiné rozumně dostupné nástroje, kterými lze udelat text v presentační kvalitě; výsledkem činnosti nástrojů typu "office" je prostě typografický šit
2. Je jednoduchý a funguje bez nutnosti nějakého výkonného HW (s výjimkou zpracování dokumentů s velkoplošnými bitmapovými obrázky o vysoké kvalitě, tam se výkon HW projeví jednoznačně)
Opakovaně jsem se setkal s epub dokumenty, které byly nečitelné v FBReaderu a nešly ani načíst do Libreoffice - jeden příklad jsem uvedl zde v diskusi, časopis Gliese. Z tohoto důvodu považuji tento a podobné formáty za nespolehlivé, jimž je lépe se vyhnout.
Nene, to je nedorozumění, možná jsem to napsal blbě, TeX samozřejmě význam pořád má a jen tak ho neztratí!
Slepá ulička = TeX máme na konci toolchainu při generování PDF. To znamená, že původní dokumenty jsou buď v DocBooku nebo AsciiDocu, renderování HTML je jasné a při požadavku na PDF se použije TeX. Tj. autoři se se zdrojákem v TeXu nesetkají (což skutečně nemá význam, i když LaTeX uznávám), .tex jsou generovány automaticky.
Nojo, jenže jednobajtové kódování nedostačovalo už v osmdesátých letech, a pro komunikaci mezi platformami je UTF-8 ideální, už kvůli endianitě. A do paměti se dá načíst jako wchar_t, přičemž k posunu o 1000 znaků stačí skočit o sizeof(wchar_t)*1000, ne?
Navíc UTF-8 zvládnou zpracovat jakkoliv staré programy, i když s občasnými problémy, zatímco UTF-16 je pro ně lok vitriolu. Natož UTF-32 ;-)
Oh, ta trojka je tedy síla, snad jen tolik, že PDF skutečně není formát e-booku. Možná, možná a čistě teoreticky Tagged PDF, ale ten prakticky nikdo neumí zpracovat.
To by mě tedy zajímalo, kdo dnes ještě bere knížky v PDF produkované TeXem s tím, že žádný jiný formát není k dispozici.
Ano, to #1 se dá primitivně udělat přes autocommands, ale to jste psal, že nechcete :-)
Takže jiné řešení: mít makra pro každý typ souboru uložena zvlášť (tex.vim, latex.vim, html.vim) a načítat je přes :source
Alternativně mít víc .viminfo souborů, o5 zvlášť pro každý typ souboru (to bude kompatibilní s CSEDem z hlediska uživatele).
No právě, správně by se termínem "makro" mělo pojmenovávat cokoli (funkce, sekvence kláves) namapovaná přes :map nebo jeho varianty, a tam jsou možnosti velké - předřaďovače, sekvence kláves, celkem cokoli.
To, čemu se někdy říká "makra" (já to taky poněkud nepřesně používám), tj. sekvence kláves namapovaná na a-z, 0-1 (to je speciálnější) nebo dokonce na *+ atd., to je jen na throwaway kód, tam bych osobně nic delšího nedával.
Ale i kdyby - ukládá se to do .viminfo, které může být buď globální pro uživatele nebo lokální v rámci souborů, takže flexibilita dosti velká.
Navíc velké + pro Vim: v makrech se mohou používat všechny operátory, příkazy pro pohyb kurzoru a hlavně textové objekty. To je něco, co SLED AFAIK nemá.
Ad: "To je podstatně méně pohodlné a rychlé než stisknout více kláves současně."
není pravda, kombinace prefix+nějaká klávesa (klávesy) je rychlejší než hledat nějaké přeřaďovače, které nejsou pro psavce všemi deseti na zrovna nejlepších místech.
Ad: "Navíc se mi nikde v dokumentaci k vim nepodařilo najít, jak makra uložit jako soubor na disk a opět nahrát (nezdokumentovaná, špatně zdokumentovaná funkce = neexistující funkce)."
To mě tedy osobně dost překvapuje, protože Vim (a samozřejmě Emacs) mají jednu z nejlepších dokumentací vůbec.
Jinak mapování funguje pro Ctrl+klávesa, v GUI i pro Alt+klávesa (v terminálu záleží na nastavení, to je však problém konfigurace terminálu a ne Vimu).
Navíc pokud nestačí varianty :map tak na některé věci slouží digraphs, málo známá a přitom skvělá fíčurka.