Obsah
2. Problematika tvorby a editace tabulek ve Vimu
4. Implementace režimu „virtuální editace“ ve Vimu
5. Změna chování některých klávesových zkratek v režimu „virtuální editace“
6. Změna chování některých klávesových zkratek v režimu VREPLACE
7. Příklady použití režimu „virtuální editace“ ve Vimu
8. Pomocný nástroj (filtr) tablign
10. Příklady použití nástroje tablign
11. Editace tabulek uložených ve formátu CSV
12. Plugin table-mode přidávající do Vimu další režim pro práci s tabulkami
13. Instalace pluginu table-mode
14. Přepnutí do „tabulkového režimu“
15. Vytvoření jednoduché tabulky
16. Specifikace oddělovače buněk
17. Ruční zápis nové tabulky z existujících dat
18. Nové příkazy pro editaci tabulky
1. Editace tabulek ve Vimu
Populární textový editor Vim, s jehož některými možnostmi jsme se již seznámili v tomto seriálu i v několika samostatných článcích, se dnes používá v mnoha různých oblastech. Primárně je samozřejmě Vim využíván vývojáři pro tvorbu a úpravy zdrojových kódů, administrátory i lidmi z DevOps týmů pro editaci konfiguračních souborů atd. Ovšem to ve skutečnosti není zdaleka vše, protože Vim je možné využít například i pro tvorbu dokumentace (v různých formátech, včetně TeXu, LaTeXu, AsciiDocu, MarkDownu, RestructuredTextu atd. atd.) a mj. jsme se seznámili i s možností použít Vim ve funkci nástroje pro organizaci času a/nebo projektů, i když je na tomto místě nutné přiznat, že možnosti režimu OrgMode v konkurenčním Emacsu jsou v této oblasti prozatím propracovanější.
Obrázek 1: Režim vim-OrgMode.
Pro tvorbu čistého textu, strukturovaného textu, popř. textu napsaného v nějakém značkovacím jazyce, je Vim skutečně velmi dobře použitelný, ovšem s jednou výjimkou – v běžném Vimu se (bez použití dalších pluginů či filtrů) relativně složitě pracuje s tabulkami:
|--------+------+-------+--------+-----------+-------------------| | login | uid | gid | name | homedir | interpreter | |--------+------+-------+--------+-----------+-------------------| | root | 0 | 0 | root | /root | /bin/bash | | daemon | 1 | 1 | daemon | /usr/sbin | /usr/sbin/nologin | | bin | 2 | 2 | bin | /bin | /usr/sbin/nologin | | sys | 3 | 3 | sys | /dev | /usr/sbin/nologin | | sync | 4 | 65534 | sync | /bin | /bin/sync | |--------+------+-------+--------+-----------+-------------------|
Obrázek 2: Jednoduchý dokument zobrazený v režimu Org mode v textovém editoru Emacs.
2. Problematika tvorby a editace tabulek ve Vimu
Práce s tabulkami ve Vimu je problematická z několika důvodů. Především v běžných vimovských režimech (převzatých z původního editoru Vi) není možné přesunout kurzor za konec napsaných řádků: můžeme se přesunout pouze přesně na konec textu a příkazem a přidat další znaky (popř. přesun a příkaz pro přidání zkombinovat do jediného příkazu A). To je při tvorbě tabulek dosti pracné a navíc se poněkud vytrácí elegance některých příkazů, například příkazu n| určeného pro horizontální přesun kurzoru (v rámci textového řádku) na zadaný sloupec (za n se pochopitelně doplní číslo sloupce). V běžných režimech se například na řádku o délce 50 znaků nelze přesunout na sloupec číslo 100 příkazem 100|, protože se textový kurzor „zasekne“ na posledním zapsaném znaku:
Toto je text zapsaný v bufferu. ^ poslední možná pozice kurzoru
A druhý důvod spočívá v tom, že samotný Vim nijak nerozeznává oddělovače sloupců, takže nemá v základní sadě příkazů příkazy pro pohyb mezi sloupci, jejich mazání a pochopitelně ani příkaz pro naformátování tabulky po provedených editačních operacích.
3. Režim „virtuální editace“
Práce s tabulkami v běžném textovém editoru může být v některých případech poměrně komplikovaná. Představme si například situaci, kdy je nutné do tohoto souboru na konec přidat znaky s vertikální úsečkou:
|----+-------+--------- | ID | name | surname |----+-------+--------- | 01 | Jon | Snow | 02 | Marty | McFly |----+-------+---------
Výsledkem by měla být tato tabulka:
|----+-------+---------| | ID | name | surname | |----+-------+---------| | 01 | Jon | Snow | | 02 | Marty | McFly | |----+-------+---------|
Ideální by tedy byl stav, kdy se kurzor přesune na konec prvního řádku, vloží se znak | a poté se (buď makrem, nebo ručně) kurzor přesune na další řádek, ovšem do stejného sloupce, aby bylo možné vložit další znak |. Ve standardních režimech Vimu to však není možné – je nutné se přepnout do takzvaného režimu virtuální editace, kdy se kurzor přesunuje kamkoli po obrazovce, tedy i do míst, kde se ve skutečnosti žádný text nenachází.
Obrázek 3: Mnoho původních programátorských textových editorů pro DOS režim virtuální editace podporovalo. Velmi dobrým příkladem může být textový editor zabudovaný do populárního souborového manažeru Dos Navigator.
Obrázek 4: Podobnou možnosti nalezneme například v editoru mcedit, který je součástí Midnight Commanderu.
Obrázek 5: Příklad přesunu kurzoru mimo vlatní oblast textu v mceditu.
4. Implementace režimu „virtuální editace“ ve Vimu
První z naznačených problémů je možné poměrně snadno řešit v rámci čistého Vimu, přesněji řečeno Vimu, který není (resp. nemusí být) doplněn o žádný plugin. Vim totiž obsahuje speciální režim „virtuální editace“, což ve skutečnosti znamená, že se textový kurzor může přesouvat i za konec fyzické textové řádky. Pokud tedy kurzor přesuneme na stý sloupec a přidáme do textu znak, doplní Vim textový řádek mezerami. Navíc se změní i funkce příkazu n|, kterým je možné přesunout textový kurzor na libovolné místo v rámci editovaného řádku, včetně místa za fyzickým řádkem. Díky těmto možnostem se možnosti Vimu při tvorbě a editaci tabulek zvětšují. Režim virtuální editace se řídí konfiguračním parametrem virtualedit, kterému lze přiřadit jednu z těchto voleb:
# | Volba | Význam |
---|---|---|
1 | block | povolení virtuální editace při práci s vizuálními bloky |
2 | insert | povolení virtuální editace ve vkládacím režimu |
3 | all | povolení virtuální editace ve všech režimech |
4 | onemore | zajímavá volba umožňující přesun kurzoru pouze ZA poslední znak |
Samotný příkaz pro nastavení či změnu volby vypadá takto:
:set virtualedit=vybraná_volba
Po zapnutí režimu virtuální editace si můžeme (například) vytvořit makro namapované na klávesu a, které zajistí, že se na padesátou pozici na řádku (nezávisle na jeho obsahu) vloží znak |, který může představovat pravý okraj tabulky:
50|i|<Esc><Down>
Makro namapujeme na klávesu a běžným způsobem, tj. příkazem qa. Přehrání makra zajistí příkaz @a a díky tomu, že se kurzor přesouvá na další řádek (do virtuálního padesátého sloupce), je pochopitelně možné makro opakovat: 10@a.
Aby byl režim virtuální editace podporován, musí být Vim přeložen s volbou +virtualedit, což snadno zjistíme příkazem:
:ver
Příklad výstupu:
VIM - Vi IMproved 8.1 (2018 May 18, compiled Jun 17 2019 09:09:11) Included patches: 1-1561 Modified by <bugzilla@redhat.com> Compiled by <bugzilla@redhat.com> Huge version with GTK2 GUI. Features included (+) or not (-): +acl +farsi +mouse_netterm +syntax +arabic +file_in_path +mouse_sgr +tag_binary +autocmd +find_in_path -mouse_sysmouse +tag_old_static +balloon_eval +float +mouse_urxvt -tag_any_white +browse +folding +mouse_xterm +tcl ++builtin_terms -footer +multi_byte +terminfo +byte_offset +fork() +multi_lang +termresponse +cindent +gettext -mzscheme +textobjects +clientserver -hangul_input +netbeans_intg +title +clipboard +iconv +path_extra +toolbar +cmdline_compl +insert_expand +perl +user_commands +cmdline_hist +jumplist +persistent_undo +vertsplit +cmdline_info +keymap +postscript +virtualedit +comments +langmap +printer +visual +conceal +libcall +profile +visualextra +cryptv +linebreak +python +viminfo +cscope +lispindent +python3 +vreplace +cursorbind +listcmds +quickfix +wildignore +cursorshape +localmap +reltime +wildmenu +dialog_con_gui +lua +rightleft +windows +diff +menu +ruby +writebackup +digraphs +mksession +scrollbind +X11 +dnd +modify_fname +signs -xfontset -ebcdic +mouse +smartindent +xim +emacs_tags +mouseshape -sniff +xsmp_interact +eval +mouse_dec +startuptime +xterm_clipboard +ex_extra +mouse_gpm +statusline -xterm_save +extra_search -mouse_jsbterm -sun_workshop +xpm
Obrázek 6: Vim s povolenou volbou +virtualedit.
Obrázek 7: Nápověda k režimu virtuální editace.
5. Význam konfigurační volby onemore
Zastavme se na chvíli u poslední volby zmíněné v předchozí tabulce. Jedná se o volbu nazvanou onemore. Tato relativně málo známá volba umožňuje přesuny kurzoru ZA poslední znak zapsaný na textovém řádku, ale ne dále (ovšem samotným přesunem se žádná nová mezera do souboru nevloží, pouze je možné, aby kurzor stál za koncem řádku, který je možné zvýraznit volbou set list).
Může se jednat o dosti zajímavou a užitečnou volbu, která zajistí, že se mnoho příkazů stane konzistentní, a to včetně uživatelských maker atd. Můžeme si to ostatně ukázat i na příkladu makra umožňujícího, aby se vybraný text zvýraznil, konkrétně aby se obalil do značek <strong> a </strong> a následně se kurzor přesunul na začátek takto zvýrazněného textu (toto makro používám při psaní článku):
au BufRead,BufNewFile *.htm,*.html vmap <C-B> omaomb<esc>`bi</strong><esc>`ai<strong><esc>
Toto makro je sice funkční, ovšem s jednou výjimkou – nebude pracovat korektně v případě, kdy budeme chtít zvýraznit poslední slovo na řádku, protože nedojde ke zvýraznění posledního znaku. Pochopitelně je možné tento problém opravit v samotném makru (ovšem dosti složitým způsobem), nebo je možné pracovat v režimu virtuální editace s nastavením onemore:
:set virtualedit=onemore
Obrázek 8: Nápověda k nastavení virtualedit.
6. Změna chování některých klávesových zkratek v režimu VREPLACE
Kromě režimu virtuální editace se můžeme setkat i s režimem nazvaným VREPLACE, který se taktéž někdy používá pro editaci tabulek. Tento režim má poněkud odlišný význam, protože mění i chování kláves určených pro mazání. Jedná se především o klávesy Backspace, Ctrl+W a Ctrl+U použité v režimu vkládání. Připomeňme si, že v klasickém režimu vkládání slouží Backspace pro smazání znaku, který se nachází nalevo od kurzoru (pokud tedy nepoužijeme right-to-left režim, což pravděpodobně není případ čtenářů tohoto článku) a klávesa Ctrl+W pro smazání slova před kurzorem. Klávesa Ctrl+U vrátí zpět všechny změny, které byly na řádku provedeny. V případě, že se použije režim virtuální editace, bude klávesa Backspace sloužit nikoli pro smazání posledního znaku, ale pro obnovení jeho původní podoby. Podobně je tomu i u klávesy Ctrl+W, která vrátí zpět obsah celého slova, které se nachází nalevo od kurzoru.
Obrázek 9: Přepínání mezi režimy modálního textového editoru Vim (některé varianty základních režimů zde nejsou pro větší názornost diagramu nakresleny).
7. Příklady použití režimu „virtuální editace“
Podívejme se nyní na příklad použití režimu virtuální editace při úpravách tabulky, která je součástí dokumentace projektu Bootstrap, se kterým jsme se seznámili v článku Můžeme věřit překladačům? Projekty řešící schéma „důvěřivé důvěry“. Na screenshotech jsou zvýrazněny konce řádků modrým znakem dolaru; tento režim zobrazení je zapnut příkazem:
:set list
Obrázek 10: Kurzor se může přesunout mimo vlastní text, a to i v normálním režimu. Pro lepší ilustraci je zde použita volba :set list zobrazující konce řádků s využitím modrého dolaru.
Obrázek 11: I při editaci v režimu vkládání je možné kurzor přesunout mimo vlastní text (jméno tohoto režimu je zobrazeno na pravítku vlevo dole).
8. Pomocný nástroj (filtr) tablign
V této chvíli již tedy víme, jak je možné využít režim virtuální editace pro alespoň částečné vylepšení práce s tabulkami. Ovšem pravděpodobně sami uznáte, že se v žádném případě nejedná o ideální řešení, a to například tehdy, pokud potřebujeme tabulky editovat. Při editacích dochází k „rozhození“ jednotlivých buňek, které již nebudou zarovnány pod sebe. Jedno z možných řešení tohoto problému spočívá v použití externího filtru nazvaného tablign. Tento filtr pracuje jednoduše. Na jeho vstupu je několik textových řádků. Filtr v těchto řádcích rozpozná oddělovače sloupců a zarovná text takovým způsobem, aby buňky pod sebou přesně lícovaly. Rozpoznáno je hned několik oddělovačů sloupců, včetně znaku | (běžné tabulky, asi nejčitelnější a nejpřenositelnější řešení), čárky, středníku a & (tabulky z TeXu).
Tento projekt nalezneme na GitHubu na adrese https://github.com/nschloe/tablign i ve formě balíčku pro Python na https://pypi.org/project/tablign/.
9. Instalace nástroje tablign
Instalace nástroje tablign je vetšinou velmi snadná, protože se jedná o projekt naprogramovaný v čistém Pythonu (bez dalších závislostí), který je dostupný na PyPi. Pro instalaci tedy můžeme použít nástroj pip nebo pip3, a to konkrétně následujícím způsobem:
$ pip3 install --user tablign
Instalace proběhne během několika sekund:
Downloading/unpacking tablign Downloading tablign-0.1.7-py2.py3-none-any.whl Downloading/unpacking pipdate>=0.3.0,<0.4.0 (from tablign) Downloading pipdate-0.3.2-py2.py3-none-any.whl Requirement already satisfied (use --upgrade to upgrade): appdirs in ./.local/lib/python3.4/site-packages (from pipdate>=0.3.0,<0.4.0->tablign) Requirement already satisfied (use --upgrade to upgrade): requests in /usr/lib/python3/dist-packages (from pipdate>=0.3.0,<0.4.0->tablign) Installing collected packages: tablign, pipdate Successfully installed tablign pipdate Cleaning up...
Ověřte si, že je tablign dostupný na PATH:
$ tablign 1,2,3 foo,bar,baz hello,world,! Ctrl+D 1 , 2 , 3 foo , bar , baz hello , world , ! $
10. Příklady použití nástroje tablign
Po instalaci by měl být nástroj tablign spustitelný z příkazové řádky, což je v tuto chvíli vše, co budeme potřebovat, protože externí filtry z Vimu dokážeme spouštět, a to příkazem ! zadávaným z příkazového režimu (tedy s dvojtečkou) nebo z režimu vizuálních bloků (výběr přes v, Ctrl+V apod.). Podívejme se tedy na několik příkladů použití.
První příklad
Obrázek 12: Příprava tabulky, ovšem bez snahy o zarovnání buněk.
Obrázek 13: Výběr řádků tabulky do bloku a příprava spuštění filtru tablign.
Obrázek 14: Výsledek po zarovnání.
Druhý příklad
Obrázek 15: Tabulka s dokumentací k projektu Bootstrap, jejíž buňky nejsou zarovnány.
Obrázek 16: Výběr rozházené části tabulky do bloku.
Obrázek 17: Výsledek aplikace filtru tablign.
11. Editace tabulek uložených ve formátu CSV
Výše popsaný příkaz tablign je dokonce možné použít i ve chvíli, kdy budeme potřebovat upravit tabulky ve formátu CSV (Comma Separated Values). Jak již název tohoto formátu naznačuje, jsou jednotlivé buňky odděleny čárkou (a současně se jedná o lež, protože se může jednat i o středník, ostatně na podobné chuťovky jsme u formátů navržených v součinnosti s MS zvyklí, viz například problémy s formátem BMP). U CSV formátu jsou texty umístěny do uvozovek a u čísel nehrají roli mezery umístěné před a za číselnou hodnotu. To v praxi znamená, že můžeme před nebo za čárky (středníky) oddělující jednotlivé buňky vložit mezery, aniž by to změnilo sémantiku uložených dat. Tudíž je možné si CSV upravit takovým způsobem, aby byl ve Vimu čitelnější a snadněji se editoval (velikost souboru se ovšem může mnohdy i násobně zvětšit!).
Obrázek 18: Původní obsah souboru s tabulkou uloženou ve formátu CSV.
Obrázek 19: Zavolání externího filtru tablign.
Obrázek 20: Výsledek je již krásně čitelný.
12. Plugin table-mode přidávající do Vimu další režim pro práci s tabulkami
I přes existenci režimu virtuální editace a filtru tablign není práce s tabulkami ve Vimu zcela snadná. Jedná se jak o vlastní tvorbu tabulek, tak i o jejich následnou editaci. A to samozřejmě nepočítáme s tím, že by tabulky obsahovaly vzorečky, které by automaticky měnily obsah vypočtených buněk tak, jak je tomu v běžných tabulkových procesorech. Určité řešení ovšem existuje. Jedná se o plugin nazvaný table-mode, jehož repositář naleznete na adrese https://github.com/dhruvasagar/vim-table-mode. Na tomto pluginu je zajímavé mj. i to, že je celý naprogramován přímo ve VimScriptu a tudíž nevyžaduje žádné externí nástroje a dokonce ani to, aby byl Vim přeložen s podporou rozhraní pro další jazyky (Python, Luu, Perl atd.).
Obrázek 21: Nápověda k pluginu table-mode.
13. Instalace pluginu table-mode
Plugin table-mode je možné využít jak ve Vimu 7.x, tak i ve Vimu 8.x (o Vimu 7.x se zmiňuji z toho důvodu, že tuto verzi nalezneme na mnoha serverech se stabilní distribucí Linuxu). Pokud používáte Vim 8.x s vlastním správcem projektů, bude postačovat plugin nainstalovat do adresáře ~/.vim, který by měl mít následující strukturu (samotná instalace se tedy provede pouhým naklonováním repositáře):
. └── pack └── packages └── vim-table-mode ├── autoload │ └── tablemode │ └── spreadsheet ├── doc ├── ftplugin ├── plugin └── t ├── config └── fixtures ├── align ├── cell ├── formula └── table
V případě, že musíte používat Vim 7, lze použít například správce projektů Pathogen. V takovém případě bude struktura adresáře ~/.vim vypadat poněkud odlišně:
. ├── autoload │ └── go │ └── test-fixtures │ ├── cmd │ ├── complete . . . . . . ├── bundle │ ├── calendar-vim │ │ ├── autoload │ │ ├── doc │ │ └── plugin │ ├── rainbow_parentheses.vim │ │ ├── autoload │ │ └── plugin │ ├── todo.txt-vim │ │ ├── autoload │ │ │ └── todo │ │ ├── doc │ │ ├── ftdetect │ │ ├── ftplugin │ │ └── syntax │ │ └── python │ │ └── dateregex │ │ └── dateregex │ ├── vim-fugitive │ │ ├── doc │ │ └── plugin │ ├── vim-slime │ │ ├── doc │ │ └── plugin │ └── vim-table-mode │ ├── autoload │ │ └── tablemode │ │ └── spreadsheet │ ├── doc │ ├── ftplugin │ ├── plugin │ └── t │ ├── config │ └── fixtures │ ├── align │ ├── cell │ ├── formula │ └── table ├── doc ├── ftdetect ├── plugin ├── spell └── syntax
Jinými slovy – repositář s pluginem je nutné naklonovat do podadresáře ~/.vim/bundle.
14. Přepnutí do „tabulkového režimu“
Ihned po své instalaci by měl být plugin table-mode k dispozici, ovšem vzhledem k tomu, že poměrně zásadním způsobem mění chování Vimu, je ho nutné explicitně aktivovat, popř. si explicitně vyžádat přeformátování tabulky. K tomu slouží následující příkazy, všechny zadávané v příkazovém režimu (proto je před nimi uvedena dvojtečka):
# | Příkaz | Stručný popis |
---|---|---|
1 | :TableModeEnable | přepnutí do režimu editace tabulek |
2 | :TableModeDisable | vypnutí režimu editace tabulek |
3 | :TableModeToggle | přepínání mezi běžnými režimy Vimu a režimem editace tabulek |
4 | :Tableize | aktuální řádek se změní na tabulku |
Obrázek 22: Aktivace režimu table-mode.
15. Vytvoření jednoduché tabulky z existujících dat
Novou tabulku je možné vytvořit hned několika různými způsoby. Pokud již máme k dispozici data s nějakým oddělovačem sloupců, můžeme taková data převést na tabulku velmi snadno, a to příkazem :Tableize. Vstupem může být soubor s tímto obsahem:
ID|Name|Surname 01|Foo|Bar
Výběrem obou řádků (libovolným způsobem) a spuštěním příkazu Tableize můžeme tento buffer změnit na tabulku:
| ID | Name | Surname | | 01 | Foo | Bar |
Zde jsme konkrétně použili příkaz:
:%Tableize
Zcela stejným způsobem můžeme tabulku vytvořit z dat, kde jsou jednotlivé položky záznamů odděleny například čárkou:
ID,Name,Surname 01,Foo,Bar
Pro změnu použijeme odlišnou podobu příkazu :Tableize:
:1,$Tableize
Výsledek ovšem bude i v tomto případě totožný:
| ID | Name | Surname | | 01 | Foo | Bar |
16. Specifikace oddělovače buněk
Poměrně často se můžeme setkat s tím, že soubor s daty bude mít odlišný oddělovač. V takovém případě musíme příkazu :Tableize tento oddělovač předat. Například soubor (či jeho část):
ID*Name*Surname 01*Foo*Bar 02*I*Robot
Převedeme na tabulku příkazem:
:%Tableize/*
S výsledkem:
| ID | Name | Surname | | 01 | Foo | Bar | | 02 | I | Robot |
Poslední příklad na dané téma. Tentokrát se bude jednat o známý soubor /etc/passwd, jehož údaje budeme chtít převést na tabulku:
root:x:0:0:root:/root:/bin/bash daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin bin:x:2:2:bin:/bin:/usr/sbin/nologin sys:x:3:3:sys:/dev:/usr/sbin/nologin sync:x:4:65534:sync:/bin:/bin/sync games:x:5:60:games:/usr/games:/usr/sbin/nologin man:x:6:12:man:/var/cache/man:/usr/sbin/nologin lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin mail:x:8:8:mail:/var/mail:/usr/sbin/nologin news:x:9:9:news:/var/spool/news:/usr/sbin/nologin uucp:x:10:10:uucp:/var/spool/uucp:/usr/sbin/nologin proxy:x:13:13:proxy:/bin:/usr/sbin/nologin www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin backup:x:34:34:backup:/var/backups:/usr/sbin/nologin list:x:38:38:Mailing List Manager:/var/list:/usr/sbin/nologin irc:x:39:39:ircd:/var/run/ircd:/usr/sbin/nologin
Soubor otevřeme (pro jistotu jen pro čtení :-) a převedeme vybranou část (vizuální blok) na tabulku:
:'<,'>Tableize/:
Výsledkem by měl být buffer s následujícím obsahem:
| root | x | 0 | 0 | root | /root | /bin/bash | | daemon | x | 1 | 1 | daemon | /usr/sbin | /usr/sbin/nologin | | bin | x | 2 | 2 | bin | /bin | /usr/sbin/nologin | | sys | x | 3 | 3 | sys | /dev | /usr/sbin/nologin | | sync | x | 4 | 65534 | sync | /bin | /bin/sync | | games | x | 5 | 60 | games | /usr/games | /usr/sbin/nologin | | man | x | 6 | 12 | man | /var/cache/man | /usr/sbin/nologin | | lp | x | 7 | 7 | lp | /var/spool/lpd | /usr/sbin/nologin | | mail | x | 8 | 8 | mail | /var/mail | /usr/sbin/nologin | | news | x | 9 | 9 | news | /var/spool/news | /usr/sbin/nologin | | uucp | x | 10 | 10 | uucp | /var/spool/uucp | /usr/sbin/nologin | | proxy | x | 13 | 13 | proxy | /bin | /usr/sbin/nologin | | www-data | x | 33 | 33 | www-data | /var/www | /usr/sbin/nologin | | backup | x | 34 | 34 | backup | /var/backups | /usr/sbin/nologin | | list | x | 38 | 38 | Mailing List Manager | /var/list | /usr/sbin/nologin |
17. Ruční zápis nové tabulky
V předchozí kapitole jsme si ukázali, jakým způsobem můžeme vytvořit tabulku ve chvíli, kdy máme k dispozici vstupní textový soubor s daty. Ovšem nic nám nebrání si tabulku postupně vytvořit. Příkazem :TableModeEnable si nejdříve ověřte, že je režim zápisu tabulek povolen. Následně je možné si odzkoušet následující kroky:
Obrázek 23: Po zápisu prvního řádku se automaticky tabulka přeformátuje. Že se jedná o tabulku poznáme podle zvýraznění oddělovačů.
Obrázek 24: Zápis dalších řádků s automatickým formátováním tabulky.
Obrázek 25: Zápis dalších řádků s automatickým formátováním tabulky (po přechodu na další řádek).
Obrázek 26: Do tabulky lze pomocí || vložit vertikální oddělovač, který se automaticky naformátuje.
Obrázek 27: A následně se tabulka automaticky přeformátuje a zarovná.
18. Nové příkazy pro editaci tabulky
Plugin table-mode nabízí i další příkazy, které všechny začínají tzv. lokálním uvozovacím znakem. Tím bývá zpětné lomítko nebo čárka, osobně však používám mezeru. Nastavení této volby je snadné:
let maplocalleader = ","
# | Zkratka | Stručný popis příkazu |
---|---|---|
1 | | | vytvoření tabulky |
2 | leader+tt | přeformátování tabulky |
3 | leader+T | dtto, ale s volbou oddělovače |
4 | [| ]| | přechod na předchozí/následující buňku |
5 | leader+tdd | smazání celého řádku |
6 | leader+tdc | smazání celého sloupce |
7 | leader+ts | setřídění sloupce |
19. Editace vzorců
Plugin table-mode podporuje i práci se vzorci, což je téma, kterému se budeme věnovat příště (navíc možná není tak užitečné, jako schopnost editovat ve Vimu tabulky civilizovaným způsobem).
20. Odkazy na Internetu
- tablign na PyPi
https://pypi.org/project/tablign/ - tablign na GitHubu
https://github.com/nschloe/tablign - Tables in vim (reddit)
https://www.reddit.com/r/vim/comments/8lyigo/tables_in_vim/ - vim-table-mode (repositář na GitHubu)
https://github.com/dhruvasagar/vim-table-mode - table-mode na Vim.org (starší verze!)
https://www.vim.org/scripts/script.php?script_id=4501 - Smarter Table Editing
https://vim.fandom.com/wiki/Smarter_Table_Editing - Smarter Table Editing II
https://vim.fandom.com/wiki/Smarter_Table_Editing_II - Články o Vimu na Root.cz:
http://www.root.cz/n/vim/clanky/ - Replace and Virtual Replace Modes
https://medium.com/vim-drops/replace-and-virtual-replace-modes-3e841b9161ca - How can I easily create and maintain tables?
https://vi.stackexchange.com/questions/363/how-can-i-easily-create-and-maintain-tables - Vim – the editor
http://www.vim.org/ - Vim as a Python IDE, or Python IDE as Vim
http://blog.jetbrains.com/pycharm/2013/06/vim-as-a-python-ide-or-python-ide-as-vim/ - Popis skriptu Vim Pathogen
http://www.vim.org/scripts/script.php?script_id=2332 - Posledníverze skriptu Vim Pathogen
https://tpo.pe/pathogen.vim - Nejlepší pluginy pro Vim
http://vimawesome.com/ - Nejlepší pluginy pro Vim
http://www.vim.org/scripts/script_search_results.php?order_by=rating - Vi Improved
https://wiki.python.org/moin/Vim - Building Vim
http://vim.wikia.com/wiki/Building_Vim - Vim plugins for developers
http://www.linuxtoday.com/upload/vim-plugins-for-developers-140619094010.html - Writing Vim Plugins
http://stevelosh.com/blog/2011/09/writing-vim-plugins/ - how to understand this vim script?
http://stackoverflow.com/questions/12625091/how-to-understand-this-vim-script - Novinky ve VIM 7: Skriptovací jazyk
http://www.root.cz/vim-sedm-druha-cast/ - DirDiff.vim : A plugin to diff and merge two directories recursively.
http://www.vim.org/scripts/script.php?script_id=102 - vim-dirdiff na GitHubu
https://github.com/will133/vim-dirdiff - fakeclip : pseudo clipboard register for non-GUI version of Vim
http://www.vim.org/scripts/script.php?script_id=2098 - vim-fakeclip na GitHubu
https://github.com/kana/vim-fakeclip - vim-fakeclip: Dokumentace
http://kana.github.io/config/vim/fakeclip.html - Vim Multiple Cursors na GitHubu
https://github.com/terryma/vim-multiple-cursors - SLIME (Wikipedia)
http://en.wikipedia.org/wiki/SLIME - vim-slime na GitHubu
https://github.com/jpalardy/vim-slime - The NERD tree: A tree explorer plugin for navigating the filesystem
http://www.vim.org/scripts/script.php?script_id=1658 - JavaBrowser : Shows java file class, package in a tree as in IDEs. Java source browser.
http://www.vim.org/scripts/script.php?script_id=588 - snippetsEmu : An attempt to emulate TextMate's snippet expansion
http://www.vim.org/scripts/script.php?script_id=1318 - c.vim : C/C++ IDE key mappings
http://lug.fh-swf.de/vim/vim-c/c-hotkeys.pdf - Základní základy editoru Vim
http://www.root.cz/clanky/zakladni-zaklady-editoru-vim/ - Jak si přizpůsobit Vim
http://www.root.cz/serialy/jak-si-prizpusobit-vim/ - Taglist (plugin)
http://www.vim.org/scripts/script.php?script_id=273 - Tutorial: Make Vim as Your C/C++ IDE Using c.vim Plugin
http://www.thegeekstuff.com/2009/01/tutorial-make-vim-as-your-cc-ide-using-cvim-plugin/ - c.vim : C/C++ IDE
http://vim.sourceforge.net/scripts/script.php?script_id=213 - The History of Vim
https://jovicailic.org/2014/06/the-history-of-vim/ - Display date-and-time on status line
http://vim.wikia.com/wiki/Display_date-and-time_on_status_line - Vim 8.1 is available!
https://www.vim.org/vim-8.1-released.php - Vim 8.0 is released
https://laravel-news.com/2016/09/vim-8–0-is-released/ - Vim: So long Pathogen, hello native package loading
https://shapeshed.com/vim-packages/ - Asynchronous grep plugin for Vim
https://github.com/ramele/agrep - Run Async Shell Commands in Vim 8.0 / NeoVim and Output to Quickfix Window
https://github.com/skywind3000/asyncrun.vim - :smile command was not backported! #5116
https://github.com/neovim/neovim/issues/5116 - Run :make and :grep in background jobs (experimental)
https://github.com/edkolev/vim-amake - Favorite vim plugins
http://sherifsoliman.com/2016/05/30/favorite-vim-plugins/ - Makejob
http://www.vim.org/scripts/script.php?script_id=5479 - Vim sedm – první část
http://www.root.cz/clanky/vim-sedm-prvni-cast/ - vim (man page)
http://www.linux-tutorial.info/modules.php?name=ManPage&sec=1&manpage=vim - History of the Text Editor
http://vanstee.me/history-of-the-text-editor.html - Interview with Bill Joy
http://web.cecs.pdx.edu/~kirkenda/joy84.html - vi Editor Commands
http://www.cs.rit.edu/~cslab/vi.html#A1.4 - vi Manual
http://www.cs.fsu.edu/general/vimanual.html - Mastering the Vi Editor
http://www.susnet.uk/mastering-the-vi-editor