Přeskočit na obsah

Vim

Z Wikipedie, otevřené encyklopedie
Vim
Logo
Snímek obrazovky programu gvim
Snímek obrazovky programu gvim
VývojářBram Moolenaar
První vydání2. listopadu 1991
Aktuální verze9.2 (14. února 2026)
Operační systémGNU/Linux
BSD
macOS
Microsoft Windows
Android
iOS
DOS
Haiku
AmigaOS
MorphOS
OS/2
UN*X
Vyvíjeno vC a Vimscript
Typ softwaruTextový editor
LicenceGNU General Public License
Vim license
Webwww.vim.org
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

[editovat | editovat zdroj]

Modální editor

[editovat | editovat zdroj]

Vim je modální editor. A i když Vim modální koncept ovládání nevymyslel, výborně ho adoptoval a rozvinul a tím se postaral o přijetí tohoto konceptu ovládání textových editorů. Vim je vzorem pro mnoho dalších modálních editorů a rozšíření. Viz kapitola klony Vimu.

Modální 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í. Investovat čas a naučit se ovládat Vim se vyplatí lidem, kteří editují spoustu strukturovaného textu. Typický uživatel Vimu je programátor nebo unixový admin. 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í jedné nebo více (sekvenčně) kláves. Protože v modu Normal nejde psát, lze jako příkazy používat obyčejné znaky na klávesnici bez modifikátorů. To usnadňuje jejich zadávání. Například příkaz x smaže znak pod kurzorem.

Příkazy Vimu se neomezují jen na kombinaci různých operaci s různými textovými objekty. Jsou tu příkazy jako Ctrl-A která zvýší číslo o jedna, nebo tečka, jenž zopakuje poslední příkaz a mnohé další. Opakování příkazu je silné právě díky existenci obecných textových objektů (jeich víc, včetně vět, odstavců, obsahy závorek atd). Ještě silněji výhodu textových objektů oceníme při nahrávání maker, tedy možnost zopakování několika příkazů najednou.

Jeden z příkazů je příkazi, který zapíná modu Insert. V tomto modu lze vkládat (psát) text. Když se napíše 'dd' vloží se do textu 'dd'. V tomto modu Vim nejvíce připomíná ostatní editory. Příbuzný je 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 existují i další speciální mody.

Textové a GUI rozhraní

[editovat | editovat zdroj]
Plugin WAI-Fmm9 - ukázka možností textového rozhraní

Vim má grafické rozhraní, ale jeho původ je terminálový a stále je určen pro používání v terminálu. Grafické rozhraní je proto jen volitelná nadstavba a veškerá funkčnost Vimu je a musí být dostupná skrz textové rozhraní a tomu je uživatelské rozhraní Vimu přizpůsobeno. Všechno se proto odehrává v jednom textovém okně.

Vim na Androidu v Termuxu

Ale i samotné textové rozhraní je chudé a je primárně postaveno na používání příkazového řádku místo dialogových oken, byť v textové podobě. Moderní Vim od verze 8 podporuje popup okna, která se občas používají, třeba při doplňování textu, ale základního ovládání se to nedotklo. Neexistuje factory dialog pro vyhledávání textu nebo dialog pro ukládání souboru, to vše se stále dělá na příkazovém řádku. Ale některé pluginy, jako třeba plugin WAI-Fmm9, ukazují, že v tomto směru jsou možnosti Vimu nevyužity. Viz obrázek pluginu Fmm9, který ukazuje dva spuštěné Vimy, jednou s popup oknem obsahu složky a jednou s oknem menu složky. Vim sám takové rozhraní nenabízí i když ho umožňuje vytvořit.

Textový režim i příkazový řádek mají své výhody a jsou užitečné dodnes. Díky němu můžeme mít Vim například na moderním tabletu s Androidem v Termuxu a mít tak plnohodnotné vývojové prostředí na Androidu. Klony Vimu se dokonce ani nenamáhaly GUI implementovat na rozdíl od samotného Vimu.

V příkazech se skrývá hlavní síla Vimu. Příkaz je povel, který pošleme vimu téměř jakoukoliv stisknutou klávesou na klávesnici. Třeba Enter, Ctrl-A nebo jen ..

Vim má hodně příkazů a další mohou lřidat pluginy a také si je může definovat každý uživatel, a to se od něj i očekává. Pro něco takového neexistuje na klávesnici dostatek znaků 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. To vede k záhadným zkratkám, které neznalý uživatel nemá šanci rozklíčovat, třeba příkazívé sekvence vipgq nebo ggVGd. To první třeba označí celý aktuální odstavec 'vip' a přeformátuje ho 'gq'. Na to druhé vám v normálním editoru stačí napsat jen Ctrl-A a Del. Někdy se Vimu efektivita 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 obsahuje příkaz d (delete) a pak následuje informace o tom, co má smazat.

S tím soujvisí další schopnost Vimu, práce s textovými 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ě. Lze si definovat i vlastní textové objekty třeba v nějakých textových databázích. Standardní textové objekty jsou konfigurovatelné a u slov se navíc rozlišují dva druhy, velká W a malá w (word) slova.

Příkaz dw smaže malé slovo, dW velké slovo. Velká slova jsou 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, takže text 'třída.metoda' je jedno Slovo a 3 slova (třída, ., metoda).

Krom textových objektů lze příkazy delete a spol kombinovat i s příkazy pohybu, kam spadá i vyhledávání. Například fx znamená jdi na nejbližší znak 'x'. Příkaz dfx znamená zsmaž text až po nejbližší znak 'x'. Také 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). Kdo umí pracovat s 'd', umí i s těmi ostatními. Je to trochu složité, ale ne nepřekonatelně a kdo si takové ovládání zažije a naučí se to podvědomě používat, ten může text editovat velmi efektivně.

Textové objekty mají ještě jedno skvělé využití, a to jsou makra. Díky obecným textovým objektům mohou být hodně univerzální a tím zjednodušit i komplexní formátování velmi rozsáhlého opakujícího se textu. Makra se vutváří nahráváním, je to jen záznam příkazů uživatele, takže je to pohodlné a rychlé. Potom stačí dát příkaz 1000@q a během sekundy upravit 1000 bloků textu makrem 'q'.

Příkazy na úpravu textu jsou jen malá podmnožina příkazů Vimu. Předchozí popis je jen ukázka principů, 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. Lze definovat i vlastní textové objekty. Když si to napíše do konfiguračního souboru, bude to fungovat už na vždy. Uživatelé Vimu tohle dělají, přizpůsobují si Vim svým vlastním preferencím a potřebám, Vim každého uživatele je proto trochu jiný. Vim udržuje zpětnou kompatibilitu desítky let, proto jeho konfigurační soubor může být rozšiřován také desítky let, mít za tu dobu stovky i tisíce řádků nastavení, které Vim plně přizpůsobují potřebám a preferencím uživatele.

Příkaz :imap mapuje příkazy pro mod Insert. Zajímavé je, že lze mapovat příkazy i na prostý text. Například 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, nejen vkládat text. Třeba si na příkaz ,, namapovat přeskočení kurzoru do vedlejšího okna.

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 az a AZ, 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 najdeme výsledek poslední textové operace. Najdeme ho i v registru 0, v registru 1 předposlední, v registru 2 před předposlední a ták dále až do registru 9. Registr * je propojen se systémovou schránkou. Tam najdeme to, co jsme kopírovali do schránky v jiném programu nebo zápisem do tohoto registru můžeme poslat text do schránky pro jiné programy.

Příkazový řádek

[editovat | editovat zdroj]

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 řadu výhod a silných stránek.

  1. 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
  2. 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.
  3. 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.
  4. 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.
  5. 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í.
  6. 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.
  7. 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í

[editovat | editovat zdroj]

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říkazový řádek 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 Okna a panely (taby)

[editovat | editovat zdroj]

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

[editovat | editovat zdroj]

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

[editovat | editovat zdroj]

S příchodem verze 2.0 (prosinec 1993) se editor přejmenoval na Vi IMproved.

Vim 3 – 1994

[editovat | editovat zdroj]

Další přelomovou byla verze 3 (1994), kdy se objevila podpora více oken.

Vim 4 – 1996

[editovat | editovat zdroj]

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

[editovat | editovat zdroj]

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.

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.

  • 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

[editovat | editovat zdroj]

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

[editovat | editovat zdroj]

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

[editovat | editovat zdroj]

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 uzávěry (anglicky 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

[editovat | editovat zdroj]

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

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ší.

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.

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

[editovat | editovat zdroj]

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í

[editovat | editovat zdroj]

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

[editovat | editovat zdroj]

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ávesy i. 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

[editovat | editovat zdroj]
Editor Vim v Termuxu

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 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.

Editor NeoVim v Termuxu

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.

Editor Kakoune v Termuxu

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ší, pro začáteční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 dostupný 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.

Editor Helix s tutorialem

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 lehkou snadnou alternativu a neaspiruje ho nahradit v jeho maximální konfigurovatelnosti. Helix je dostupný v prostředí Termux.

Výkon skriptovacího jazyka Vimu

[editovat | editovat zdroj]

Jednoduchý benchmark pro srovnání

[editovat | editovat zdroj]

Součet čísel – test samotného interpretu

[editovat | editovat zdroj]

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

[editovat | editovat zdroj]

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
  • 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
  • Z dnešního pohledu zcela nestandardní ovládání
  • Delší doba zaučení začátečníka

Související články

[editovat | editovat zdroj]
  • Vi – Předchůdce Vimu
  • Ed – Standardní editor definovaný POSIX normou
  • Ctags – Nástroj pro programátory
  • Vimscript – Skriptovací jazyk editoru Vim

Externí odkazy

[editovat | editovat zdroj]