1. týždeň

Textový editor VIM

V tomto dokumente si predstavíme základné funkcie a vlastnosti textového editora VIM.

Textový editor VIM je vstavaný editor vo väčšine UNIX-ových systémov s ktorými sa môžeme stretnúť. Nadobudnutie základných informácií o jeho fungovaní a používaní nám pomôže nielen pri štúdiu (predmety ZAP, OS, BvPS, KP, ...) ale pravdepodobne aj v budúcej praxi, nakoľko je vysoká šanca že sa s ním pri práci na UNIX-ových systémoch stretneme.

Obsah

  • Spustenie editora VIM
  • Rozhranie editora VIM
  • Zoznam farebných schém
  • Parametre pri spúšťaní VIM
  • Zoznam spúšťacích parametrov
  • Režimy editora VIM
  • Príkazy na prácu v režime normal
  • Režim Insert
  • Režim Command
  • Režim Visual
  • Práca s záložkami v editore VIM
  • Porovnanie 2 a viac súborov v editore VIM

Spustenie editora VIM

Textový editor spúšťame príkazom vim. Pri zadaní samotného príkazu sa nám editor otvorí v režime prázdneho dokumentu, ktorý musíme na konci uložiť, v opačnom prípade bude stratený.

Do parametra príkazu vim môžeme pri spúšťaní vložiť názov súboru (napr. subor.txt). Ak sa daný súbor nachádza v pracovnom priečinku, tak ho editor otvorí a umožní nám jeho úpravu. V prípade, že sa v pracovnom priečinku súbor nenachádza, editor vytvorí nový prázdny súbor.

Pri spúšťaní môžeme parameter názvu súboru nahradiť absolútnou cestou (napr. /usr/bin/etc/subor.txt).

Upozornenie

V UNIX-ových systémoch je dôležité dbať na korektné používanie prípon súborov. Ak zadáme vim subor, tak sa editor pokúsi otvoriť súbor s názvom subor bez prípony. Je dôležité pri práci so súbormi používať prípony, ktoré reprezentujú ich formát, prípadne pamätať si, aké prípony sme pri ukladaní použili.

Rozhranie editora VIM

Rozhranie editora je prispôsobené pre stroje staršej generácie, ktoré bežne používali obrazovky s pomerom strán 4:3, a teda nám môže chvíľu trvať, kým si na používanie zvykneme. Textový editor v základe obsahuje farebnú tému, ktorá odlišuje číslice, prípony a iné elementy farebne. Na obrázku môžeme vidieť opis základných elementov v editore ako aj jeho správanie pri otvorení súboru so zdrojovým kódom.

Rozloženie rozhrania
Obr. 1: Rozloženie rozhrania

Najjednoduchšou a najpraktickejšou úpravou, ktorú môžeme s našim rozhraním urobiť, je nepochybne zobrazenie číslovania riadkov. Nielenže to uľahčuje orientáciu v dokumente, ale aj pomáha pri písaní príkazov na kopírovanie a mazanie textu či kódu. Zobraziť si môžeme klasické číslovanie riadkov :set number, relatívne číslovanie riadkov :set relativenumber (od aktuálnej pozície kurzora) alebo hybridné číslovanie riadkov :set number relativenumber, ktoré kombinuje funkcionalitu oboch predošlých. V prípade, že chceme tieto nastavenia negovať (zrušiť), stačí ich znova zadať s prívlastkom no pred príkazom (napr. :set nonumber).

Číslovanie riadkov
Obr. 2: Číslovanie riadkov

Samozrejme, pokiaľ pracujeme na našom zariadení alebo používateľskom konte, je nepraktické, aby sme pri každom otvorení ľubovoľného dokumentu zadávali tento príkaz. V tomto prípade môžeme použiť konfiguračný súbor editora VIM. Ten sa vykoná (aplikuje) pri každom jeho spustení. Konfiguračný súbor môžeme upraviť zadaním príkazu vim ~/.vimrc do konzoly. Otvorí sa nám textový súbor, v ktorom môžeme zadávať nami požadované príkazy.

Úprava súboru vimrc
Obr. 3: Úprava súboru vimrc

Ďalšia úprava na prispôsobenie VIM pred prácou je úprava farebnej schémy. VIM má predinštalovaných niekoľko základných farebných schém. Nastavenie farebnej schémy vykonáme buď pri spustení editora alebo v súbore .vimrc ako sme to urobili vyššie pri číslovaní strán. Príkaz má formát :colorscheme scheme_name.

Zoznam farebných schém

  • blue
  • darkblue
  • default
  • delek
  • desert
  • elflord
  • evening
  • industry
  • koehler
  • morning
  • murphy
  • pablo
  • peachpuff
  • ron
  • shine
  • slate
  • torte
  • zellner

Nastavenie farebnej schémy
Obr. 4: Nastavenie farebnej schémy

Existuje obrovské množstvo možností, ako si prispôsobiť tento editor podľa našich potrieb a predstáv. Mnohé riešenia sú vytvárané komunitou programátorov po celom svete. Medzi používateľmi editora VIM je mimoriadne populárna voľne šíriteľná farebná schéma s názvom GRUVBOX. V prípade, že máte záujem dozvedieť sa o nej viac a prípadne si ju doinštalovať do svojho prostredia, môžete navštíviť oficiálny git repozitár tejto témy, kde sú jej parametre aj postup inštalácie detailne opísané jej tvorcami.

Náhľad témy gruvbox
Obr. 5: Náhľad témy gruvbox

Parametre pri spúšťaní VIM

VIM je možné spúšťať s mnohými argumentmi. My opíšeme len tie najbežnejšie, s ktorými sa môžeme pri bežnej práci s editorom stretnúť. V prípade, že máte záujem dozvedieť sa viac o parametroch, môžete navštíviť web obsahujúci oficiálnu manuálovú stránku alebo do konzoly vášho systému zadajte príkaz man vim, ktorý otvorí manuálovú stránku k príkazu uloženú lokálne v danom systéme.

Parametre

  • -R - režim len na čítanie (dokument nie je možné upraviť)
  • -r {file} - spustenie režimu obnovy (používa sa, ak predošlá relácia spadla a chceme obnoviť prácu pomocou swap súboru s príponou .swp)
  • -x - pri ukladaní a otváraní použi kryptovací kľúč (editor nás vyzve aby sme ho zadali)
  • -y - spustenie v zjednodušenom režime. Editor sa bude chovať podobne ako poznámkový blok v OS Windows (tj. klikni a píš)
  • -g - spustenie v režime GUI, teda v upravenom grafickom rozhraní
  • -Y - spustenie v jednoduchom GUI režime. Otvorí nové okno!
  • -Z - spustenie v jednoduchom GUI režime so zablokovanou možnosťou zadávania príkazov. Otvorí nové okno!
  • -d [filename] [filename] - spustenie v režime porovnania. VIM otvorí oba poskytnuté súbory v parametroch a ukáže rozdiely medzi nimi
  • -M - znemožní úpravu otváraného súboru, súbor budeme môcť iba čítať

VIM s prepínačom -y
Obr. 6: VIM s prepínačom -y

VIM spustený s parametrom -y. Ako vidíme, ukončiť sa dá len zatvorením okna a režim zapisovania sa nedá opustiť.

VIM s prepínačom -Z
Obr. 7: VIM s prepínačom -Z

VIM spustený s parametrom -Z. Ako vidíme, text môžeme označovať ako v konvenčnom textovom editore, režimy práce sa dajú meniť a základ rozhrania sa veľmi nelíši od klasického VIM (text v centre je zobrazený, len ak zadáme príkaz bez parametra, a po zadaní znaku zmizne. Zadali sme ho tam, aby sme demonštrovali označenie textu).

Režimy editora VIM

Po spustení editora Vim sa nám buď zobrazí prázdne okno alebo okno s nápovedou, ktorá zmizne, keď zadáme prvý znak (ako môžeme vidieť na obrázkoch hore).

V ľavom dolnom rohu nás editor Vim informuje o aktuálnom móde, v ktorom operujeme. Taktiež ak sa rozhodneme zmeniť mód, prípadne zadať editoru nejaký príkaz, náš vstup sa zobrazí tiež na danom mieste.

Na opustenie hociktorého režimu (ak sme pri spustení editora nezadali parameter, ktorý opustenie režimu zakazuje) použijeme ESC. Režim, do ktorého sa dostaneme, sa nazýva normálny resp. normal. V tomto režime môžeme začať zadávať príkazy, pomocou ktorých pracujeme so zadaným textom.

Príkazy na prácu v režime normal

  • k - pohyb o jeden riadok nahor (dá sa kombinovať s číslicou, teda 4k posunie o 4 riadky)
  • j - pohyb o jeden riadok nadol (dá sa kombinovať s číslicou, teda 4j posunie o 4 riadky)
  • l - (malé L) pohyb o jeden znak doprava (dá sa kombinovať s číslicou, teda 4l posunie o 4 znaky)
  • h - pohyb o jeden znak doľava (dá sa kombinovať s číslicou, teda 4h posunie o 4 znaky)
  • w - pohyb na začiatok nasledujúceho slova
  • b - pohyb na začiatok predošlého slova
  • e - pohyb na koniec aktuálneho slova
  • 0 - pohyb na začiatok riadka
  • $ - pohyb na koniec riadka
  • r - nahradenie znaku napravo od kurzora iným (vstup rg nahradí aktuálny znak znakom g a podobne)
  • x - odstráni jeden znak napravo od kurzora (dá sa kombinovať s číslicou, teda 4x odstráni 4 znaky napravo od kurzora)
  • u - vrátenie zmien až do posledného otvorenia normálneho režimu (podobné ako CTRL+Z v bežných editoroch)
  • Ctrl + R - vrátenie zmien po stlačení 'u' ,teda ľudovo povedané vrátenie vrátenia ☺
  • i - prepne nás do režimu INSERT, teda režimu, v ktorom vkladáme text do dokumentu
  • a - prepne nás do režimu INSERT, avšak presunie kurzor za aktuálny znak (odvodené od anglického slova "append")
  • o - prepne nás do režimu INSERT, avšak najprv vloží nový riadok pod ten aktuálny a presunie nás doň
  • v - prepne nás do režimu VISUAL, v ktorom zvýrazňujeme text
  • : - prepne nás do režimu COMMAND, v ktorom môžeme zadávať príkazy
  • :w - zapíše zmeny súboru do jeho zdroja
  • :! - umožňuje nám zadávať konzolové príkazy
  • :s/old/new/g - nahradí všetky výskyty slova old slovom new (g naznačuje, že sa zmena vykoná v celom dokumente)
  • :r - filename - vloží obsah súboru filename do aktuálneho súboru
  • :w - filename - uloží súbor do súboru s názvom filename
  • :wq - zapíše všetky zmeny a zatvorí editor
  • :q! - zatvorí editor bez uloženia zmien a zobrazenia varovaní
  • :q - zatvorí editor, ale zobrazí varovanie, ak bol súbor editovaný a neuložený
  • :tabnew - vytvorí novú záložku
  • :tabo - zatvorí všetky záložky okrem aktuálne otvorenej
  • gt - presun na nasledujúcu záložku
  • gT - presun na predošlú záložku
  • dw - odstráni slovo, na ktorom sa aktuálne nachádza kurzor (z anglického výrazu "delete word")
  • dd - odstráni aktuálny riadok (dá sa kombinovať s číslicou, teda 4dd odstráni 4 riadky)
  • yy - skopíruje aktuálny riadok (od slova "yank", dá sa kombinovať s číslicou, teda 4yy skopíruje 4 riadky)
  • yw - skopíruje od kurzora až po koniec aktuálneho slova
  • p - vloží skopírovaný text pred kurzor
  • P - vloží skopírovaný text za kurzor
  • G - presunie kurzor na koniec súboru
  • gg - presunie kurzor na začiatok súboru

Režim Insert

Slúži na zápis obsahu a jeho editáciu v súbore. V tomto režime je povolený len textový vstup a nedajú sa v ňom vykonávať príkazy. Na jeho opustenie slúži ESC.

VIM v režime Insert
Obr. 8: VIM v režime Insert

Režim Command

Základný režim editora, ktorý je prirodzene zapnutý pri štarte editora. V ňom môžeme zadávať príkazy, ktoré sme spomenuli vyššie. Na obrázku vidíme, ako vykonávame kopírovanie a následne vkladanie skopírovaných riadkov.

VIM v režime Command
Obr. 9: VIM v režime Command

Režim Visual

V tomto režime môžeme označiť text, ktorý chceme napríklad skopírovať. Na označenie používame klávesnicu. Editor bude vizuálne zvýrazňovať označený text. Text môžeme označovať pomocou vyžšie špecifikovaných kláves h,j,k,l alebo pomocou šípok klávesnice. Po označení požadovaného textu môžeme režim opustiť klávesou ESC a zadať príkaz na kopírovanie či zmazanie.

VIM v režime Visual
Obr. 10: VIM v režime Visual

Práca so záložkami v editore VIM

Tento textový editor obsahuje množstvo funkcionalít, ktoré boli pridané počas jeho dlhej existencie. Jednou z nich je pridaná podpora záložiek, ktorá umožňuje prácu s viacerými dokumentmi v jednom okne. Prepínanie medzi jednotlivými záložkami uskutočňujeme pomocou príkazov gt a gT. Vytvorenie novej záložky uskutočníme príkazom :tabnew filename,čo nám vykoná otvorenie poskytnutého súboru. Táto funkcionalita sa hodí v prípade práce s viacerými dokumentmi naraz, kedy môžeme mať otvorený zdrojový kód, manuálovú stránku a aj dokumentáciu ku knižnici naraz. Zoznam aktuálne otvorených záložiek sa nám začne zobrazovať na vrchnej strane okna.

Príklad použitia môžeme vidieť na obrázku.

Použitie záložiek
Obr. 11: Použitie záložiek

Porovnanie 2 a viac súborov v editore VIM

VIM obsahuje taktiež aj nástroj na porovnanie obsahu 2 súborov. Nástroj môžeme spustiť 2 spôsobmi a to pomocou prepínača -d pri spúšťaní príkazu vim alebo jednoduchšie príkazom vimdiff. Formát spúšťania je vimdiff filename_1 filename_2. Následne sa nám otvorí zobrazenie, v ktorom je prostredie rozdelené do stĺpcov, z ktorých každý reprezentuje jeden dokument. V našom prípade sme použili 2 súbory, ktoré majú obrovské množstvo rozdielov, aby sme demonštrovali zvýraznenie rozdielnych riadkov. Presun kurzora medzi jednotlivými dokumentmi vykonáme stlačením kláves Ctrl + WW (je potrebné pri držaní klávesy Control 2-krát po sebe rýchlo stlačiť klávesu W). Zhodné riadky nebudú farebne odlíšené, zatiaľ čo riadky, ktoré sa nezhodujú, budú odlíšené červenou farbou (môže byť ovplyvnené našou farebnou schémou). Pre detailnejšie informácie môžeme samozrejme navštíviť manuálovú stránku nástroja man vimdiff.

Použitie nástroja vimdiff
Obr. 12: Použitie nástroja vimdiff