Vim
Snímek obrazovky programu gvim | |
Vývojář | Bram Moolenaar |
---|---|
První vydání | 2. listopadu 1991 |
Aktuální verze | 9.1.0 (2. ledna 2024) |
Operační systém | GNU/Linux BSD macOS Microsoft Windows Android iOS DOS Haiku AmigaOS MorphOS OS/2 UN*X |
Vyvíjeno v | C a Vimscript |
Typ softwaru | Textový editor |
Licence | GNU General Public License Vim license |
Web | www |
Některá data mohou pocházet z datové položky. |
Vim (výslovnost [vɪm]IPA; zkratka z Vi IMproved) je open source textový editor, který lze spustit v prostředí většiny operačních systémů. Je oblíbený zejména mezi zkušenými uživateli operačních systémů unixového typu. Kromě klasického Vimu existuje celá řada editorů, které jsou založeny na principu Vimu, ale mají nějaké specifické vlastnosti např. Yzis pro prostředí KDE.
Vlastnosti
Modální editor
Vim je modální editor a ne ledajaký, Vim je nejznámější modální editor. A i když tento koncept ovládání nevymyslel, tak ho výborně adoptoval, rozvinul a postaral se o rozšíření a přijetí tohoto konceptu ovládání textových editorů. Viz kapitola klony Vimu.
Toto ovládání je populární zejména mezi vývojáři, pro které je práce s textovým editorem denní chleba. Výhodou modálního ovládání je vysoká efektivita editace textu, nevýhodou obtížnost naučit se tomuto ovládání. Musíte editovat hodně, pokud možno strukturovaného, textu, aby se vám vyplatilo investovat čas a naučit se ovládat Vim. Pokud někomu přijde ovládání Vimu složité, nemýlí se.
Modální ovládání znamená, že ovládání probíhá v různých módech. V různých módech editor na stejné klávesové příkazy reaguje různě. Základní mod (v češtině se také používá pojem režim) je mod Normal. V něm lze prohlížet text a s textem manipulovat pomocí příkazů, ale nejde v něm psát.
Příkaz je stisknutí klávesy klávesnice a modu Normal, v kterém nejde psát, lze proto jako příkazy používat i obyčejné znaky na klávesnici bez modifikátorů. To usnadňuje jejich zadávání.
Těch příkazů je ale tolik, že ani písmena nestačí a mnohé příkazy se skládají z několika písmen. Například příkaz dd
smaže řádek textu a příkaz yy
zkopíruje řádek textu. Příkaz Ctrl-a
zvýší číslo pod kurzorem o 1 a příkaz i
přepne mod Normal na mod Insert.
V modu Insert lze vkládat (psát) text a v tomto modu Vim nejvíce připomíná ostatní editory. Jemu je velmi podobný mod Replace, který text nevkládá, ale přepisuje. Tento režim mají i některé běžné editory – s trochou nadsázkou je můžeme považovat také za modální. Další běžné mody jsou mod Visual pro označování textu a mod Command-line pro příkazovou řádku. Příkazovou řádku potřebujeme pro příkazy, kterým potřebujeme předávat parametry. V běžných editorech se místo toho používají dialogová okna. A pak ještě existuje pár speciálních módů.
Textové a GUI rozhraní
Proč má Vim příkazovou řádku a ne dialogová okna, jako každý slušný a spořádaný editor, mohlo někoho napadnout. Je to proto, že Vim má primárně textové rozhraní a byl koncipován pro použití s terminály. Ty se serverem komunikují řádek po řádce, takže ani textová dialogová okna nebyla vhodná. Svět se změnil, moderní Vim už umí GUI a má i textová popup okna, ale příkazová řádka zůstala.
Má i jiné výhody, než je kompatibilita s terminály. Třeba má historii nebo lze dobře skriptovat. Textové rozhraní je užitečné dodnes. Díky němu můžeme mít Vim například na moderním Androidím tabletu v Termuxu a mít tak plnohodnotné vývojové prostředí na Androidu. Klony Vimu se dokonce ani nenamáhaly GUI implementovat.
Příkazy
Při čtení vlastností Vimu nešlo přehlédnou, že Vim má příkazy. V příkazech se skrývá hlavní síla Vimu. Vim má hodně příkazů, hodně moc příkazů. Asi nikdo je nezná všechny a i kdyby jo, může si přidat stovky vlastních. A také to dělají pluginy, takže je nelze ani vyčíslit. Na tolik příkazů nestačí všechny klávesy na klávesnici a to ani za pomoci Shift, Ctrl a Alt modifikátorů. Proto Vim podporuje víceznakové příkazy. Samozřejmě co nejkratší, aby dalo co nejméně práce je napsat. I proto má Vim mody, aby mohl mít víc jednoduších příkazů. A stejně tam jeho uživatelé pak píší záhadné věci jako vipgq
nebo ggVGd
, což je několik příkazů spojených dohromady. To první třeba označí celý aktuální odstavec a přeformátuje ho. Na to druhé vám v normálním aditoru stačí napsat jen Ctrl-a Del. Někdy se Vimu ta efektivita nějak vymyká z ruky.
Aby se příkazy lépe pamatovaly, snaží se Vim mít příkazy mnemotechnické a logicky uspořádané. Aby to fungovalo, je potřeba ovládat trochu angličtinu. Například mazání, to vždy začíná příkazem d
(delete) a pak následuje informace o tom, co má smazat.
A s tím je spojená druhá síla Vimu, textové objekty. Vim se snaží rozpoznat strukturu textu a s ní pracovat. Slova, věty, odstavce a různé bloky textu vymezené třeba závorkami, uvozovkami nebo html tagy a podobně. Můžete si definovat i vlastní textové objekty. Standardní textové objekty jsou navíc konfigurovatelné a speciálně u slov se rozlišují navíc dva druhy slov, velká W a malá w (word) slova.
Příkaz dw smaže malé slovo, dW velké slovo. Velká slova jsou obvykle rozdělena jen prázdnými znaky jako mezera či tabulátor. Malá slova tvoří zpravidla jen písmena, čísla a podtržítka a vše ostatní je rozděluje.
To vyhovuje programátorům, protože z těchto znaků se zpravidla skládají názvy proměnných, funkcí a podobně. Tedy například text „pocet_lidi*cena“ je jedno W a tři w. Pokud mám kurzor na „p“ a dám příkaz dW
, smažu celý text v příkladu. Příkazem dw
smažu jen „pocet_lidi“. Kdybych ale měl kurzor na podtržítku, text „pocet“ by zůstal, protože, příkaz dw
i dW
maže od kurzoru do konce slova. Kdybych chtěl smazat celé slovo, mohu buď pracně přejít kurzorem na začátek slova, nebo dát příkaz diw
, kde i
mi zajistí smazání celého slova, ať je kurzor kde chce.
Nebo mohu chtít smazat text vyznačený uvozovkami. Třeba text „Nazdar lidi!“, kurzor uprostřed. Příkaz d"
neudělá nic, příkaz di"
smaže obsah mezi „“ a příkaz da"
smaže obsah uvozovek i s těmi uvozovkami a případně i mezerou za uvozovkami. To jest z textu 'aaa „bbb“ ccc' udělá text 'aaa ccc' a jen s jednou mezerou mezi aaa a ccc.
Krom textových objektů lze příkazy delete a spol kombinovat i s příkazy pohybu, kam spadá i vyhledávání. Navíc lze zadat počet opakování, tedy 3diw
smaže tři slova. Příkaz d není jediný, je jich ve Vimu více, se všemi se pracuje podobně, mazi ty základní patří ještě y
pro kopírování (yank) a c
pro změnu (change).
Příkazy na úpravu textu jsou jen malá podmnožina příkazů Vimu. Předchozí popis je jen ukázka principů a propracovanosti, na kterých Vim stojí.
Pomocí příkazu příkazového řádku :map a řady jeho variant pro různé režimy si může uživatel namapovat své vlastní příkazy a zkratky i své vlastní textové objekty. Když si tento příkaz napíše do svého konfiguračního souboru, bude to mít na vždy. Uživatelé Vimu tohle dělají, přizpůsobují si Vim svým vlastním preferencím a potřebám. Takový konfigurační soubor může bobptnat mnoho let a dorůst stovek i tisíců řádků a sloužit desítky let.
Příkaz :imap
mapuje příkazy pro mod Insert. Zajímavé je, že lze mapovat příkazy i na prostý text. Napříkla lze využít faktu, že za čárkou se píše mezera a tak nikdy v normálním textu nebudete potřebovat napsat ,f a udělat si z toho příkaz, třeba „:imap ,f function(
“ a kdykoliv napíšete do textu ,f
, vloží se do něj slovo „function(
“. Lze ale dělat cokoliv, třeba si na příkaz ,,
namapovat přeskočení kurzoru do vedlejšího okna.
Vim má v normal režimu speciální příkaz tečka .
který znamená zopakuj poslední příkaz.
A poslední věc, která se týká příkazů. Pokud vám nestačí příkaz tečka, pak má Vim k dispozici snadno použitelné nahrávání maker. Stačí příkaz qq
a už se makro nahrává do registru q, další příkaz q
nahrávání ukončí. A pak už můžeme makro vyvolat příkazem @q
. Vzhledem k textovým objektům jsou makra mocný nástroj pro mnohé rutinní úpravy textů. Nahrajete úpravu jednoho řádku, zadáte 1000@q
a dojde k bezpracné úpravě následující tisícovky řádků.
Registry
Registry Vimu jsou pojmenované paměťové oblasti, se kterými lze pracovat, něco jako pojmenované schránky (clipboard). Registry jsou dvou druhů, obecné a speciální. Obecné slouží k ukládání textů do paměti a pro nahrávání maker, běžně do nich zapisujeme i z nich čteme. Speciální registry si pak samy pamatují různé věci, třeba naposledy vyhledávaný text. Ty slouží ke čtení i když i do některých speciálních lze zapisovat. Obecné registry jsou pojmenovány a
až z
a A
až Z
, speciální
Na registr se odkazujeme znakem "
. Např. "r
je registr r
. Na příkazovém řádku pak do něj vložíme text pomocí Ctrl-r
a ve skriptech ho můžeme číst či zapisovat pomocí znaku @, třeba :let \@r = \@s
(do registru r kopírujeme obsah registru s).
Pokud neuvedeme registr, použije se defaultně registr "
(odkazujeme se na něj jako na ""
). V něm najdem výsledek poslední textové operace. Najdeme ho i v registru 0
, v registru 1
předposlední, v registru 2
předpředposlední a ták dále až do registru 9
. Registr *
je propojen se systémovou schránkou. Tam najdem to, co jsme kopírovali do schránky v jiném programu nebo zápisem do tohoto registu můžeme poslat text do schránky projiné programy.
Příkazový řádek
Nějakou zjednodušenou podobu příkazů má každý textový editor, byť se jim většinou říká hotkeys. Příkazový řádek tak obvyklý není. Ale funkčně se dá připodobnit k jednoduchým dialogovým oknům a menu. Slouží ke spouštění příkazů, kterým předáváme parametry. Třeba při nahrazování textu, otvírání nového souboru a podobně. Ale existují i bezparametrové příkazy třeba pro zavření všech oken a také lze volat funkce skriptovacího jazyka, ať systémové nebo vlastní.
Ve Vimu jsou tři mody příkazového řádku, mod Command-line a mod Ex primitivní a moderní. Command-line se vyvolá příkazem :
a po provedení příkazu se ukončí, je jednorázový. Příkazem Q
se přepneme do modu Ex a dýchne na nás pradávná historie. Mod Ex je relikt nejprimitivnější doby textových editorů, kdy se text nedal psát přímo, ale jen pomocí příkazového řádku a na slepo. V tomto režimu se nedá ani editovat sama příkazová řádka, lze jen mazat, nefunguje v ní maping ani abbreviations. Tento režim ukončíme příkazem :vi. Příkazem gQ pak zapneme moderní podobu modu Ex, je to běžný moderní příkazový řádek jaký vyvoláme příkazem :, jediný rozdíl je, že se po vykonání příkazu neukončí a zůstáváme v něm. Ukončí se opět příkazem :vi
.
Dialogová okna mají výhodu v tom, že si uživatel toho nemusí moc pamatovat a mohou být komplexnější. Vim s gui také může mít dialogová okna, ale to je nadstandardní luxus a Vim musí být schopen se bez nich obejít, protože musí fungovat i na terminálu. Příkazový řádek má ale ředu výhod a silných stránek.
- Historie – Vim si pamatuje zadávané příkazy, historii lze vyvolat a lze ji procházet pomocí šipky nahoru a dolů, nebo lze zobrazit seznam příkazů příkazem :history
- Zkrácená jména – Při psaní příkazu nemusíte zadávat celý název, stačí nejkratší možnou část, která příkaz jednoznačně identifikuje. Po zadání kratšího názvu se volí podle priority. Např. :h = :help, :hi = :hilight a :his = history. Není to podle abecedy, třeba :d = :delete i když existuje i příkaz :debug.
- Vlastní příkazy – Vim umožňuje vytvořit si vlastní příkazy. Typicky tak, že si ve VimScriptu napíšeme nějakou složitou funkci, která například komplexním způsobem manipuluje s textem a tu pak napojíme na vlastní příkaz, aby šla snadno spouštět z příkazového řádku. Vlastní funkce musí začínat Velkým písmenem, aby nemohlo dojít ke konfliktu s vnitřními funkcemi Vimu. Pomocí vlastních komplexních funkcí tak můžeme Vim rozšířit o mnoho možností, takto vznikají rozšiřující pluginy pro Vim.
- Rozsah – Příkazu lze zadat rozsah řádků, na které se má aplikovat, třeba příkaz
:25d
smaže řádek 25 a příkaz:2,4d
smaže řádky 2, 3 a 4. Programátoři mají řádky zpravidla očíslované, tak pro ně není problém vědět, jako číslo který řádek má. Bez zadání rozsahu se příkaz aplikuje jen na řádek s kurzorem. Rozsah lze zadat také zástupnými znaky a značkami. Příkaz:%d
vymaže celý soubor, protože % znamená celý soubor. Příkaz:'<,'>d
smaže vizuálně označenou oblast s tím, že rozsah'<
a'>
jsou značky, které označují začátek a konec vizuální oblasti. Tyto značky se na příkazový řádek vloží automaticky po stisknutí:
pokud ho stiskneme ve vizuálním modu. - Sloupcový rozsah – Rozsah se zadává číslem řádku, nelze tak zadat rozsah uvnitř řádku, třeba od sloupce 10 do sloupce 20. To je obecně neřešitelné, ale existuje řešení pro příkaz :substitue neboli :s pro náhradu textu pomocí regulárních výrazů. Dejme tomu, že mám padesát řádků v nějaké podobě jako „Hexadecimální kódy 0x10 0xFF“. U těch kódů chci nahradit x za X. Označím si tedy ty kódy a dám příkaz :s/x/X/g. Budu zklamaný, protože příkaz se aplikuje na všechny x v rozsahu celého řádku, tedy i na x ve slově Hexadecimální. Řešením je příkaz
:s/\%Vx/X/g
kde magický symbol\%V
znamená ve vizuálním rozsahu. Samozřejmě že v tomto případě je snazší to upravit ručně než psát tento příkaz, ale když je potřeba to dělat často, tak je užitečné si to namapovat pomocí vmap na příkaz x a pak už bude stačit text označit, stisknout x a je hotovo. Jednotlivé funkce Vimu se takto synergicky doplňují. - Doplňování Ctrl-r – Pomocí příkazu Ctrl-r lze do příkazového řádku vložit text. Třeba z registru x, stačí napsat
'<C-r>"x'
kde <C-r> znamená stiskni Ctrl drž ho a stiskni r, však to znáte. Registr „% je název editovaného souboru, “* je systémová schránka atd. viz registry. Místo registru lze dát také <C-f> – název souboru pod kurzorem, <C-w> slovo pod kurzorem, <C-l> celý řádek na kterém je kurzor a další, viz nápověda. - Doplňování Tab – Když uživatel chce zadat příkaz :abbreviate, ale nemůžete si vzpomenout, jak se to píše, stačí aby napsal
:ab
a stiskl Tab. Objeví se nabídka všech příkazů, které začínají na ab. Některé příkazy podporují i doplňování i parametrů. Buď z nějakého pevného výčtu nebo z dynamicky vytvořeného seznamu. Např. po příkazu:w␣"
(write/uložit) a stisknutí Tab se zobrazí nabídka všech souborů v aktuálním adresáři. Tedy, v nenastaveném Vimu se vloží název prvního souboru, po dalším stisku Tab se nahradí názvem druhého souboru a tak dále. Po nastavení:set wildmode
se ale navíc zobrazí nabídka v jednořádkovém menu, které lze procházet kurzorovými šipkami. Dalším nastavením:set wildoptions=pum
uděláme z tohoto jednořádkového menu přehlednější sloupcové popup menu. Takto lze doplňovat kde co, třeba optiony za příkazem:set
nebo témata nápovědy za příkazem:h
.
Příkazový řádek má speciální režimy pro vyhledávání, viz kapitola Vyhledávání.
Vyhledávání
Vyhledat si něco v textu je velmi častá potřeba. Vim za tímto účelem poskytuje vyhledávací příkazový řádek s podporou regulárních výrazů a nějaké příkazové zkratky k tomuto. Dále má nastavitelné podbarvování hledaného textu a příkaz pro zobrazení vyhledaných výrazů v samostatném okně, z kterého lze skákat do prohledávaného textu.
Příkazívý řadek pro vyhledávání se spouští příkazy /
a ?
na místo :
. Příkaz /
otvírá příkazovou řádku pro hledání směrem vpřed a příkaz ?
směrem vzad. Na řádek se pak zapisuje regulární výraz pro vyhledávání.
Pokud je nastaven :set hlsearch
, pak se v textu podbarvením zvýrazní všechny texty, které zadanému výrazu odpovídají (užitečné i jako výukový mod regexů) a zvýrazněné zůstanou i po ukončení vyhledávání. Lze si tak v textu označit pojmy při jeho editaci. Když nám už podbarvení vadí
Vyhledávací příkazový řádek ukončí stisk Enter, který přenese kurzor na první nalezený text. Příkazy n a N můžeme přecházet tam a zpět mezi dalšími výskyty. Příkaz *
je zkratka, která začne rovnou vyhledávat slovo pod kurzorem bez nutnosti otevřít příkazový řádek a zapisovat do něj.
Značky
ZnačkyOkna a panely (taby)
Foldery
Historie
V roce 1988 napsal Bram Moolenaar obdobu editoru Vi pro Amigu, tento program byl založen na kódu editoru Vi (SteVIe), proto byl pojmenován Vi IMitation.
Vim 1 – 1991
Roku 1991 byla uveřejněna první veřejná verze tohoto editoru – Vim 1.14. Tato verze byla stále dostupná pouze pro Amigy, na UNIX byla přenesena až verze 1.22, kdy došlo k celé řadě vylepšení.
Vim 2 – 1993
S příchodem verze 2.0 (prosinec 1993) se editor přejmenoval na Vi IMproved.
Vim 3 – 1994
Další přelomovou byla verze 3 (1994), kdy se objevila podpora více oken.
Vim 4 – 1996
Verze 4 z roku 1996: do editoru byla zapracována možnost grafického rozhraní. Byly změněny kódy kláves, např. <ESC> na <Esc> nebo <SC_RIGHT> na <S-Right>. Byly změněny terminálové kódy, aby byly v souladu s termcap kódy. Byla změněna struktura swap souboru.
Vim 5 – 1998
Vim 5 byla přelomová verze, která z Vimu udělala to, jak ho známe dnes, skriptovatelný editor se zvýrazněnou syntaxí a menu.
Změny
Snahou bylo zvýšit kompatibilitu s Vi. Proto se například příkaz pro formátování textu Q
změnil na gq
, protože ve Vi je Q
příkaz pro vstup do Ex modu, který byl nově implementován.
Auto příkazy (:au
) se staly trvalé. Ten samý au nepřepíše předchozí což umožňuje na jednu událost mít definováno více příkazů. Při znovunačtení konfigurace (:so
) ale dojde k jejich zdvojení což je potřeba ošetřovat jejich podmíněným spouštěním:
if !exists("did_ext_autocmds")
let did_ext_autocmds = 1
autocmd BufEnter *.ext ...
endif
Byly změněny textové objekty, z a
se stalo aw
, z A
se stalo aW
, z S
se stalo ab
a tak dále.
Začaly být používány sys. proměnné $VIM
a $VIMRUNTIME
, na win i $HOME
.
Novinky
- Syntax higlighting, mocný, plně konfigurovatelný, řada s tím spojených nových příkazů s nimi vznik autopříkazu FileType.
- VimScript – možnost psát skripty díky novým příkazům
:if
,:while
,:let
:function
:call
a dalším. - Podpora skriptování v Perlu a Pythonu (:perl, :perldo, :python, :pyfile)
- Win32 GUI – gui verze Vimu z X11 portována pro Windows 95 a NT.
- Macintosh GUI verze
- Amiga GUI
- Port GUI pro GTK
- Port Vimu na VMS, BeOS a RISC OS
- Přidána podpora regexpů
- Mimo jiné nové příkazy :amenu, :augroup, :echo, :omap, :redir, :browse, :confirm
- K visual mode přibyl select mode
- Přidána podpora sessions (:mksession)
- Přidána podpora multibyte
- Přidána podpora myši (gpm) na linux konzoli a clipboardu pro xterm
- Ctags se stal samostatným projektem, který se instaluje zvlášť
Vim 6 – 2001
Verze 6 přinesla:
- skládání (folding),
- podporu UTF-8
- lokalizace
- svislá okna
- víceřádkové regulární výrazy
- pluginy
- uživatelský manuál
- diff režim
- flexibilní odsazování (indent konfigurace pro různé typy souborů)
- rozhraní pro debugger
- editaci souborů přes síť
- virtuální pozici pro kurzor
- komunikaci mezi vimy
- tisk
- file browser
- barevná schémata
Roku 2002 byla změněna licence směrem k licencím typu GPL, což umožnilo využít Vim jako základní editor v některých linuxových distribucích. Tato změna licence byla umožněna faktem, že z původního kódu, který Bram Moolenaar využil, již ve Vimu nezůstalo nic.
Vim 7 – 2006
Verze 7 přinesla:
- kontrolu pravopisu
- doplňování textu – omni completion
- do VimScriptu přidány List a Dictionary
- panely (taby)
- vylepšené undo (seznam změn, časové značky, větve změn)
- vimgrep (vyhledávání textu se seznamem nalezených pozic v novém okně)
- překlad tutoru do češtiny (Luboš Turek)
- skriptování pomocí Lua a Python 3
- nový regexp engine založený na stavovém automatu
- 2014 došlo k forku a vznikl projekt NeoVim
Vim 8 – 2016
Verze 8 přinesla:
- Asynchronní IO, kanály
- Podpora JSON
- Jobs – Vim může nastartovat job, komunikovat s ním a zastavit ho, komunikuje se pomocí kanálů
- Timers – podpora časovačů ve VimSkriptu
- Partials – druh reference na funkci, potřeba pro callbacky
- Lambda a Closure
- Package – kolekce pluginů
- Podpora GTK+ 3
- Popup okna – zobrazení textu nad jiným textem
- Zřetězené volání funkcí
- Optional argumenty funkcí
- Nový datový typ Blob
- Integrované terminálové okno
Vim 9 – 2022
Verze 9.0 byla věnována Svenu Guckesovi, který zemřel v únoru 2022. Sven byl dlouhodobý podporovatel Vimu, on registroval vim.org a vytvořil první web Vimu.
Verze 9.1 (leden 2024) byla věnována Bramu Moolenaarovi, hlavnímu programátorovi Vimu, který ho vytvořil a který zemřel v srpnu 2023, když stále pracoval na vývoji Vimu.
Verze 9 přinesla:
- Vim9 script – nová nekompatibilní verze VimScriptu, která přinesla standardní syntaxi podobnou moderním skriptovacím jazykům a víc než desetinásobnou rychlost. Stará verze VimScriptu je zachována pro podporu starých pluginů a skriptů.
- Vim9 script přinesl třídy, které podporují vícenásobné konstruktory, třídní proměnné a metody, objektové proměnné a metody, veřejné a chráněné proměnné a metody, konstanty, jednoduchou dědičnost, interface, abstraktní třídy.
- Popup menu – náhrada za jednořádkové wildmenu
Licence
Vim je vydáván pod licencí Vim, která obsahuje některé charitativní klauzule, jež uživatele, kterým se software líbí, vybízejí, aby zvážili možnost přispět dětem v Ugandě.Licence Vim je kompatibilní s GNU General Public License díky speciální klauzuli, která umožňuje distribuci upravených kopií pod GNU GPL verze 2.0 nebo novější.
Rozhraní
Stejně jako vi není rozhraní Vimu založeno na nabídkách nebo ikonách, ale na příkazech zadaných v textovém uživatelském rozhraní; jeho režim GUI, gVim, přidává nabídky a panely nástrojů pro běžně používané příkazy, ale plná funkčnost je stále vyjádřena prostřednictvím režimu příkazového řádku. Vi (a potažmo i Vim) má tendenci umožnit lidem držet prsty na domovském řádku, což může být výhoda.
Vim má vestavěný výukový program pro začátečníky s názvem vimtutor, který se obvykle instaluje spolu s Vimem, ale je samostatně spustitelný a lze jej spustit příkazem shellu. Podrobně popisuje funkce Vimu uživatelská příručka, kterou si lze přečíst přímo ve Vimu, nebo ji lze najít na internetu.
Vim má také vestavěnou nápovědu (pomocí příkazu :help), která umožňuje uživatelům dotazovat se a procházet příkazy a funkce.
Registry
Vim obsahuje různé speciální paměťové položky nazývané registry (nezaměňovat s hardwarovými nebo procesorovými registry). Při řezání, mazání, kopírování nebo vkládání textu může uživatel zvolit uložení manipulovaného textu do registru.K dispozici je 36 univerzálních registrů spojených s písmeny a čísly ([a-z0-9]) a řada speciálních, které buď obsahují speciální hodnoty (aktuální název souboru, poslední příkaz atd.), nebo slouží ke speciálnímu účelu,
Režimy Vimu
Stejně jako vi, i vim podporuje několik editačních režimů. V závislosti na režimu jsou zadávané znaky interpretovány buď jako sekvence příkazů, nebo jsou vkládány jako text. Ve vimu existuje 14 editačních režimů, 7 základních režimů a 7 variant.
- Normální režim – používá se pro příkazy editoru. Je to obvykle výchozí režim a ve výchozím nastavení stisknutí klávesy ESC vrátí editor do tohoto režimu.
- Režim vkládání – používá se pro psaní textu podobně jako ve většině moderních editorů. V tomto režimu lze otevřený text v bufferech upravovat textem zadaným z klávesnice.
- Vizuální režim – slouží k výběru oblastí textu. Na vybrané oblasti lze spouštět příkazy – přesouvat, upravovat, filtrovat pomocí vestavěného nebo externího příkazu atd.
- Vizuální řádkový režim – podtyp vizuálního režimu, který vybírá jeden nebo více celých řádků.
- Vizuální blok, další podtyp, který vybírá obdélníkový blok textu přes jeden nebo více řádků.
- Režim výběru – podobný vizuálnímu, ale příkazy nejsou interpretovány, místo toho je zvýrazněný text přímo nahrazen vstupem z klávesnice; podobně jako režim výběru používaný v editorech na platformách Microsoft Windows (Word).
- Režim příkazového řádku nebo Cmdline – poskytuje jednořádkový vstup v dolní části okna Vim. Tento režim aktivují příkazy (začínající na :) a některé další klávesy pro specifické akce (včetně vyhledávání vzorů a příkazu filtr). Po dokončení příkazu se Vim vrátí do předchozího režimu.
- Režim Ex – přijímá sekvenci příkazů. Režim Terminál-úloha – interakce s úlohou v okně terminálu.
Přizpůsobení
Vim je vysoce přizpůsobitelný , což z něj činí atraktivní nástroj pro uživatele, kteří vyžadují velkou míru kontroly a flexibility nad prostředím pro úpravu textu. Zadávání textu usnadňuje řada funkcí navržených pro zvýšení efektivity klávesnice. Uživatelé mohou provádět složité příkazy pomocí „mapování kláves“, které lze přizpůsobit a rozšířit. Funkce „nahrávání“ umožňuje vytvářet makra, která automatizují sekvence stisků kláves a volají interní nebo uživatelem definované funkce a mapování. Zkratky, podobně jako makra a mapování kláves, usnadňují rozšiřování krátkých textových řetězců na delší a lze je také použít k opravě chyb. Vim také obsahuje „snadný“ režim pro uživatele, kteří hledají jednodušší řešení pro úpravu textu.
K dispozici je mnoho zásuvných modulů, které rozšiřují nebo přidávají nové funkce do Vimu. Tyto zásuvné moduly jsou obvykle napsány v interním skriptovacím jazyce Vimu, vimscriptu (známém také jako VimL), ale mohou být napsány i v jiných jazycích.
Existují projekty sdružující komplexní skripty a úpravy a zaměřené na to, aby se z Vimu stal nástroj pro konkrétní úkol nebo aby se jeho chování výrazně změnilo. Příkladem může být Cream, díky němuž se Vim chová jako editor typu „klikni a napiš“, nebo VimOutliner, který poskytuje pohodlný outliner pro uživatele systémů podobných Unixu.
Režimy editoru Vim
Editor Vim má podobně jako jeho předchůdce vi tři režimy práce:
- Základní, neboli příkazový režim
- V tomto režimu je vim po spuštění, většina kláves se interpretuje jako příkazy pro práci s textem.
- Vkládací režim
- Jedná se o režim, v němž se vkládá text. Vstoupí se do něj mimo jiné stisknutím klávesyi. StisknutíEsc provede návrat do základního režimu.
- Režim ex
- V tomto režimu lze zadávat příkazy pomocí příkazového řádku. Vstoupí se do něj stisknutím klávesy:; po provedení příkazu nebo stisknutíEsc se Vim vrátí do základního režimu.
Konkurence
Modální ovládání Vimu si získalo na popularitě mezi vývojáři. Proto začalo, jako volitelné, pronikat do dalších vývojářských nástrojů. Například jako plugin VSCodeVim pro VS Code. Tyto nápodoby jsou jsou oproti Vimu primitivní, ale ukázaly, že o efektivní modální ovládání a práci s textovými objekty je zájem. A s tím, jak Vim přirozeně stárnul rostl zájem o moderní editor ve stylu Vimu.
NeoVim je snaha o moderní Vim. Slabinou Vimu byla jeho zastaralost, která omezovala tvorbu pluginů. Vim s externím software komunikoval pomocí zastaralé pipeline a jeho jazyk, VimScript byl pomalý. To stačilo na jednoduché věci, ale zájem byl o velké komplexní pluginy, které by Vim rozšiřovaly podstatně. Vim sice bylo možné skriptovat i pomocí Pythonu a dalších jazyků, ale zastaralé jádro tomu bránilo. NeoVim se to snaží napravit. Je naprogramován moderněji, staví na skriptovacím jazyce Lua a snaží se o maximální kompatibilitu s Vimem.
Vim na tuto konkurenci reagoval verzí 8, která přinesla možnost spouštění asynchronních funkcí a integrovala do Vimu terminál. Verze 9 pak přinesla nový nekompatibilní kompilovatelný VimScript, který přinesl deseti až stonásobné zrychlení.[1] Je těžké říci, který editor je lepší, v zásadě jsou si hodně podobné. Vim si táhne historickou zátěž kterou napravuje a má širokou komunitu a zejména má verzi s grafickým rozhraním, gVim. NeoVim má jen textovou verzi. Ti, kdo přešli z Vimu 7 na NeoVim, nemají důvod se k Vimu vrátit a uživatelé Vimu nemají důvod přecházet k NeoVimu. Těžko se dá najít něco, co by v druhém editoru nešlo udělat. NeoVim je dostupný v prostředí Termux.
Kakoune se nesnaží vytvořit kopii Vimu. Nechal se inspirovat jeho modálním režimem a práci s textovými objekty, ale příkazy si tvoří po svém. S nadsázkou se dá říci, že je dělá naopak. Ve Vimu smažeme slovo příkazem dw
(delete word), kdežto v Kakoune wd
(word delete). Výhoda Kakoune řešení je v tom, že po stisku w
se slovo označí, takže předem vidíme, co smažeme. Ve Vimu je stisknutí d
bez viditelné odezvy. Kakoune přístup je tak intuitivnější, pto začáterníky přívětivější. Zvláště když to, co je slovo, je ve Vimu konfigurovatelné. O další zpříjemnění ovládání se snaží sponka, která ukazuje nápovědu k příkazům. Kakoune je dostuoný v prostředí Termux, ale nefunguje tam dobře, má problémy s barvou pozadí, která se náhodně mění a nejde číst text.
Helix sám sebe nazývá postmoderní editor, kdy za ten moderní považuje NeoVim. Je inspirován NeoVimem a Kakounem. Také přichází s modálními režimy, práci s textovými objekty, svou vlastní sadu příkazů a konfigurační soubory ve formátu TOML. Ani on nemá grafické rozhraní, ale na jeho webu je informace, že je v plánu. Helix je mladý editor, který se k Vimu snaží přinést lehou snadnou alternativu a neaspiruje ho nahradit v jeho maximální konfigurovatelnosti. Helix je dostupný v prostředí Termux.
Výkon skriptovacího jazyka Vimu
Jednoduchý benchmark pro srovnání
Součet čísel – test samotného interpretu
Kód pro součet čísel ve Vim:
let sum = 0
for i in range(1, 2999999)
let sum += i
endfor
Metoda | Čas v sekundách |
---|---|
Vim old | 5.018541 |
Python | 0.369598 |
Lua | 0.078817 |
LuaJit | 0.004245 |
Vim new | 0.073595 |
Úprava a počítání řádků – test volání api Vimu
Kód pro úpravu a počítání délky řádků ve Vim:
let totallen = 0
for i in range(1, 100000)
call setline(i, ' ' .. getline(i))
let totallen += len(getline(i))
endfor
Metoda | Čas v sekundách |
---|---|
Vim old | 0.578598 |
Python | 0.152040 |
Lua | 0.164917 |
LuaJit | 0.128400 |
Vim new | 0.079692 |
Výhody
- Malé nároky na počítač a jeho prostředky
- Existuje verze pro mnoho operačních systémů
- Rychlost
- Možnost rozšiřování skripty ve vimscript
- Snadná a logická ovladatelnost
- Zpracování nápovědy
Nevýhody
- Z dnešního pohledu zcela nestandardní ovládání
- Delší doba zaučení začátečníka
Odkazy
Reference
Související články
- Vi – Předchůdce Vimu
- Ed – Standardní editor definovaný POSIX normou
- Ctags – Nástroj pro programátory
- Vimscript – Skriptovací jazyk editoru Vim
Externí odkazy
Média použitá na této stránce
Autor: Petr.Mach.Wraith, Licence: CC BY-SA 4.0
Vývoj Python programu v editoru Vim v prostředí Termux na Androidu.
Autor: Petr.Mach.Wraith, Licence: CC BY-SA 4.0
Textový editor Kakoune spuštěný v Termuxu na Androidu.
Autor: Petr.Mach.Wraith, Licence: CC BY-SA 4.0
Textový editor Helix spuštěný v Tefmuxu na Androidu.
Autor: Petr.Mach.Wraith, Licence: CC BY-SA 4.0
Textový editor NeoVim spuštěný v Termuxu.