Pri vzdialenom prístupe na server si väčšinou nevystačíte s Vaším obľúbeným textovým editorom pracujúcim v grafickom móde (napr. Notepad). Je výhodné naučiť sa terminálový editor aj keď s ním nebudete pravidelne pracovať.
Textový editor sa odlišuje od textového procesora (napr. LibreOffice alebo Word) tým, že pracuje priamo priamo s textom a neumožňuje formátovacie operácie (napr. tučné písmo). Hlavné použitie textového editora nie sú kancelárske dokumenty, ale zdrojové texty programov alebo konfiguračné súbory.
Textový editor musí byť prispôsobený možnostiam terminálu:
- Pomalé prenosové rýchlosti
- Nízka odozva
- Nekompatibilné mapy klávesnice
Textový editor, podobne ako ostatné príkazy v Unixe nepracuje v grafickom móde ale iba v textovom. Z toho dôvodu obsahuje iba obmedzenú podporu pre myš a neobsahuje klasické výberové menu. Namiesto toho príkazy editoru zadávame výlučne pomocou klávesnice.
Existuje veľa rôznych textových editorov pre vhodných do terminálu.
- emacs
- vi
- vim
- neovim
- nano, pico
- joe
- sed (neinteraktívny editor)
Budeme sa sústrediť na editor vim
.
Módy editora VIM
Editor ViM je de-facto štandard pre editovanie textových súborov v prostredí terminálu.
Na začiatku je práca s VIM ťažšia a menej intuitívna. Každá naučená operácia ale spôsobuje výrazne zvýšenie rýchlosti práce. Vycvičený používateľ s ním dokáže pracovať oveľa rýchlejšie ako s klasickým editorom. Viaceré profesionálne editory obsahujú VIM mód, ktorý napodobňuje správanie editora VIM.
ViM je modálny editor. V každom móde sú dostupné iné funkcie.
-
Normálny mód
Príkazy zadávame stlačením kláves. Jedna klávesa je spravidla jeden príkaz, napr. príkazomp
vložíme slovo zo schránky. Návrat do normálneho módu je vždy pomnocouESC
. -
Príkazový mód
V príkazovom móde píšeme dlhšie príkazy editoru do príkazového riadka. Môžeme prejsť na konkrétny riadok, alebo môžeme vykonať príkaz SHELL. -
Editovací mód
Editovací mód začneme príkazomi
,I
aleboa
,A
. V editovacom móde píšeme text. Snažíme sa byť v ňom čo najkratšie a čo najviac operácií s textom vybaviť v normálnom alebo príkazovom móde. -
Označovací mód
Aktivujeme ho príkazomv
. Šípkami označíme text. Príkazomy
skopírujeme text do schránky. PríkazomESC
skončíme označovací mód.
Z každého módu sa vždy viete ľahko prepnúť do normálneho módu pomocou
ESC
. Ak ste zabudli v akom ste móde, prepnite sa do normálneho módu a
zopakujte akciu.
Príklad
Napíšeme svoj prvý román v editore ViM
.
Najprv sa prihláste na Váš obľúbený UNIX
server. Príkazom vim
spustíte
editor. Zobrazí sa Vám uvítacia obrazovka. Prečítajte si ju, a príkazom
:help
otvorte vstavanú pomoc. Príkazom ESC :q
skončíte editor. Ak
ste náhodou vložili nejaký text, musíte potvrdiť ukončenie bez uloženia
pomocou výkričníka.
<ESC>:q!
Hoci táto skupina znakov na prvý pohľad vyzerá zložito, má to svoje
opodstatnenie. Klávesu ESC
nájdete ľahko, podobne aj :
a q
. Častým
používaním určitých kláves sa naučíte prstoklad a budete písať podobne
intuitívne ako hráči na klavíri.
Skončite editor a otvorte nový súbor:
vim tazkyzivot.txt
Editor sa spustí v normálnom móde. Román začnete písať po stlačení i
,
ktorým editor prepnete do editovacieho módu. Na začiatok napíšeme tento
text:
Ťažký život námorníka na suchej zemi
Bola to ťažká noc. Ráno som nevedel rozlepiť oči.
Rýchlo som vstal.
Editovanie ukončíte stlačením ESC
. Po texte sa pohybujete šípkami,
klávesami hjklwWbB
. Zistite aký je medzi nimi rozdiel (môžete využiť
príkaz :help
).
Nápoveda - profesionáli používajú w
a b
, nemusia pritom veľa
rozmýšľať a hľadať kde stratili myš.
Po kontrole ste zistili, že veta číslo 3 (Rýchlo som vstal.
) je príliš
ľahká na taký ťažký román. Príkazom :4
sa expresne presuniete na
tretiu vetu na štvrtom riadku. Dajte pozor, aby ste boli v normálnom
móde (presvedčiť sa o tom môžete pomocou klávesy ESC
). Príkazom dd
celý riadok vymažete.
Vymazaný riadok môžete vrátiť príkazom p
(vloženie zo schránky) alebo
u
(undo). Príkaz .
(bodka) vie zopakovať poslednú operáciu. Ľahko
potom viete celý román odľahčiť touto ľahkou vetou, tak aby text
vyzeral:
Ťažký život námorníka na suchej zemi
Bola to ťažká noc. Ráno som nevedel rozlepiť oči.
Rýchlo som vstal.
Rýchlo som vstal.
Rýchlo som vstal.
Ak chceme text spraviť menej dynamický, nahradte všetky výskyty "Rýchlo"
na "Pomaly". Prístup neznalého študenta by bol prepnúť sa do vkladacieho
módu, vymazať písmená pomocou klávesy del
a tri krát napísať to isté.
Využijeme ale možnosti editora ViM na kreatívne písanie.
Ak ste v normálnom móde, napíšte:
/Rý<ENTER>
Kurzor skočí na prvý výskyt "Rý" v súbore. Príkazom n
a N
sa môžeme
pohybovať medzi nájdenými reťazcami. Príkazom Ctrl+V
sa prepneme do
blokového označovacieho módu a označíme všetky slová "Rýchlo". Príkazom
c
(change) vymažeme všetko označené a prepneme sa do vkladacieho módu.
Napíšeme "Pomaly" a ukončíme editovanie. Vymazaný text máme v schránke a
môžeme ho niekde vložiť pomocou p
.
Výsledok by mal vyzerať:
Ťažký život námorníka na suchej zemi
Bola to ťažká noc. Ráno som nevedel rozlepiť oči.
Pomaly som vstal.
Pomaly som vstal.
Pomaly som vstal.
Rýchlo
Rýchlo
Rýchlo
Zbytočné riadky viete vymazať pomocou dd
, zbytočné slová pomocou
daw
, zbytočné vety pomocou das
. Súbor uložíme pomocou :w
.
Uložiť a skončiť :wq
alebo ZZ
.
Upratovačka zdrojového kódu.
Zoberte nejaký Váš program a skúste ho upratať pomocou VIM. Upratovanie
označenej časti vykonáme klávesou =
. Príkazom gg
skočíme na začiatok
súboru, v
aktivuje označovací mód. príkazom G
skočíme na koniec
súboru a tým je celý súbor označený.
Úloha
Čo najrýchlejšie nakreslite vo ViM textovú tabuľku s menným kalendárom pre aspoň jeden vybraný týždeň, kde uvediete:
- Meno
- Dátum
- Deň v týždni
Bunky oddeľte pomocou zvislej čiary |
, prvý riadok oddeľte pomocou
=
. Tabuľku začnite a skončite pomocou _ a -
.
Pomôcka:
Využite blokové editovanie, kopírovanie riadkov a opakovanie poslednej operácie.
ViM Ťahák
Zhrnutie práce s editorom ViM:
:tutorial - Spustí interaktívny tutoriál
:help spustí pomoc. ] a Ctrl+T funguje na hpertextové odkazy.
:q! skončí editovanie a zahodí zmeny.
Esc - Normálny mó
i - vkladací mód
a - koniec riadka a vkladací mód
v - vizuálny (označovací) mód
V - riadkový vizuálny mód
Ctrl-V - blokový označovací mód
y - kopíruj (vo vizuálnom móde)
x - vyber (vo vizuálnom móde)
= - uprav odsadenie, uprac kód (vo vizuálnom móde)
yy - kopíruj riadok
dd - vymaž riadok
dw - vymaž slovo
das - vymaž aktuálnu vetu
P - vlož
ZZ - ulož a skonči
/ - vyhľadávanie
* - vyhľadávanie aktuálneho slova alebo mena
gg choď na začiatok
G choď na koniec súboru
:2 choď na riadok číslo 2
:w - ulož
u - undo
Crtl-R - redo
:make stairs - prelož program stairs
:!./stairs.run - spusti program stairs
Regulárne výrazy a editor VIM
Regulárne sú nevyhnutnou pomôckou pri práci s veľkým množstvom textu. Pomocou nich vieme vyhľadávať a nahrádzať niektoré vzory. Zápis regulárnych výrazov je závislý na konkrétnej implementácii, ale existujú niektoré všeobecné pravidlá.
Regulárne výrazy môžeme využiť v programoch:
- vim
- Váš iný obľúbený textový editor
- grep:: vyhľadávanie súborov
- sed:: neinteraktívne editovanie súborov z príkazového riadku.
-
Váš vlastný program v jazyku C
-
Editor vi pracuje v rôznych módoch. V normálnom móde pohybujete kurzorom a manipulujete s blokmi textu. Príkazy v normálom móde zadávame stlačením kláves. Príkazom
i
aleboA
aktivujete vkladací mód v ktorom píšete text. Vkladací mód opustíme klávesouESC
. Otvorte si editor vi a vložte do neho testovací text:vim test.txt Otvorí sa prázdny súbor a editor vim je v príkazovom móde. Skúste napísať "Ahoj svet". Editovanie ukončite klávesou ESC. Súbor uložíme a skončíme editovanie príkazom ZZ. Overíme si výsledok editovanie pomocou programu cat. cat test.txt
-
Do súboru test.txt vložte nasledovný testovací text. Môžete použiť schránku.
toto je mac adresa: 01:23:45:67:89:0a Nesprávne MAC adresy: xx:xx:xx:xx:xx:xx 01:23:45-67-89-0a 01:23:45:67:89:0a: :01:23:45:67:89:0a 01: Správna mac adresa: a1:3d:56:99:01:ee
-
Príkazom
/
vyhľadávate. Vyhľadajte všetky výskyty slova adresa. Príkazomn
kurzor skočí na ďalší vyskyt,N
skočí na predošlý výskyt hľadaného reťazca. Príkazom:set hlsearch
zapnite zvýraznenie nájdených reťazcov. Príkazom:nohl
zrušíte aktuálne zvýraznenie vyhľadávania. -
Na miesto vyhľadávaného reťazca môžete zadať aj regulárny výraz. Regulárny výraz je špeciálny reťazec, ktorým viete "zachytiť" a opísať viac reťazcov naraz. Napíšte regulárny výraz, ktorý zachytí slová "adresa" a "adresy". V reguárnom výraze použijete operátor
[]
pre zachytenie skupiny znakov:/adres[ay]
-
Znaky [
a ]
majú špeciálny význam. Ak ich chceme vyhľadať, musíme
pred nich napísať spätné lomítko \
.
-
V hranatých zátvorkách vieme uvádzať aj rozsahy znakov pomocou
-
. Vyhľadajte všetky dvojice desiatkových čísel. Pri vyhľadávaní môžeme využiť aj históriu hľadaní pomocou šípok hore a dole./[0-9][0-9]
-
V regulárnych výrazoch vieme vytvoriť opakujúce sa skupiny. Skupinu ohraničíme znakmi
\( a \)
. P očet opakovaní zapíšeme skupiny zapíšeme pomocou\{m,n}
. (m
je minimálny počet opakovaní,n
je maximálny). Napíšte regulárny výraz pre zachytenie mac adresy tvorenej desiatkovými číslami alebo malými písmenami a oddelenej dvojbodkami:\([0-9a-z][0-9a-z]:\)\{6}
Upravte výraz tak aby zachytával aj adresy oddelené pomlčkou. Všimnite si, že uvedený zápis nie je celkom správny, lebo si vyžaduje, aby na konci bola dvojbodka.
-
Napísaný regulárny výraz môžeme využiť pre operáciu typu "hľadaj na nahraď". Nahradte všetky MAC adresy v súbore reťazcom "MAC". Využite príkaz
:%s/hladaj/nahrad/gc
. Reťazec hladaj je regulárny výraz ktorý vyjadruje hľadané reťazce. nahrad je reťazec ktorým nahradzujeme. Znak%
hovorí, že hľadáme v celom súbore.g
hovorí, že nahradzujeme všetky výskyty na riadku, nie len prvý. Znak c hovorí, že si vyžadujemem osobitné potvrdenie každého nahradenia.:%s/\([0-9a-z][0-9a-z]:\)\{6}/MAC/gc
Posledný regulárny výraz z vyhľadávania nemusíte vypisovať odznova,
môžete využiť fintu <Ctrl-R>/
ktorá vloží posledne hľadaný výraz. Ak
sa Vám vykonané nahradenia nepáčia, zmeny môžete vrátiť príkazom u (ako
undo). Opakom undo je <Ctrl-R>
(redo). V príkazovom móde tiež môžete
využívať históriu pomocou kláves hore a dole.
- Regulárne výrazy môžeme napísať aj v jazyku C. Stiahnite si program, preložte a spustite ho. Skúste využiť editor vim.
#include <stdio.h>
#include <regex.h>
#include <stdlib.h>
void bad(){
fprintf(stderr, "Wrong password!\n");
exit(EXIT_FAILURE);
}
int main(){
char buffer[101];
int result;
regex_t regex;
// read input
printf("Enter password: ");
scanf("%100s", buffer);
regcomp(®ex, "^k.*.*k+.*$", REG_EXTENDED);
result = regexec(®ex, buffer, 0, NULL, 0);
if(result == REG_NOMATCH){
bad();
}
regcomp(®ex, "^.(ab|ac|ad).(bu|cu|du).*$", REG_EXTENDED);
result = regexec(®ex, buffer, 0, NULL, 0);
if(result == REG_NOMATCH){
bad();
}
regcomp(®ex, "^...h?o?v?n?i|v?a?l?...$", REG_EXTENDED);
result = regexec(®ex, buffer, 0, NULL, 0);
if(result == REG_NOMATCH){
bad();
}
regcomp(®ex, "^.*(..[dD].){2}.*$", REG_EXTENDED);
result = regexec(®ex, buffer, 0, NULL, 0);
if(result == REG_NOMATCH){
bad();
}
regcomp(®ex, "^(.?.?.?.?.?.?a){2}$", REG_EXTENDED);
result = regexec(®ex, buffer, 0, NULL, 0);
if(result == REG_NOMATCH){
bad();
}
printf("Correct password\n");
}
Príkazy príkazového riadka môžete zadávať priamo z VIMu pomocou :!
vim heslo.c
:!gcc -std=c99 heslo.c -o heslo
:!./heslo
Zistite, aké heslo program očakáva. Na pohyb kurzora v normálnom móde
využite klávesy w
b
(ďalšie alebo predošlé slovo) alebo h
j
k
l
(pohyb kurzorom z klávesnice). Ak máte pripravený Makefile
, môžete
použiť príkaz :make
Pomôcka špeciálne znaky REGEX:
. |
Ľubovoľný znak |
^ |
Začiatok reťazca |
$ |
Koniec reťazca |
[A-Z] |
skupina znakov s rozsahom |
() |
skupina pre opakovanie |
? |
0-1 opakovaní |
* |
0-nekonečno opakovaní predošlého znaku alebo skupiny. |
+ |
1-nekonečno opakovaní |
' | ' |
Význam a zápis špeciálnych znakov je závislý od implementácie. (napr. vo VIM musíte pred niektoré špeciálne znaky písať \)