vi
vi je obrazovkový textový editor. Tento počítačový program napsal Bill Joy v roce 1976 pro unixový operační systém BSD.
Název programu vi se vyslovuje jako „ví-aj“ a označuje nejkratší možnou zkratku příkazu visual
v textovém editoru ex. Tento příkaz přepíná řádkový mód editoru do celoobrazovkového módu.
vi přiřazuje klávesám nebo kombinacím kláves různé významy, podle toho, v jakém módu editor zrovna pracuje. V módu vkládání je text vložen do dokumentu. Po stisku klávesy Escape přejde editor do příkazového módu, ve kterém některá písmena ovládají pohyb kurzoru nebo editační funkce. Například: j
posouvá kurzor o jednu řádku dolů, k
jednu řádku nahoru, x
vymaže znak na pozici kurzoru a i
znamená návrat do módu vkládání (insert mode). Znaky kláves stisknutých v příkazovém módu se nevkládají do souboru, ale interpretují se jako příkazy. Tento princip činí začátečníkům značné potíže. Pro zkušené uživatele naopak tento princip dovoluje velmi efektivní ovládání programu bez nutnosti používat myš nebo komplikované kombinace kláves.
V příkazovém módu lze provádět celou řadu editovacích operací stiskem základních kláves bez toho, aby uživatel musel tisknout klávesy <Alt>, <Ctrl> nebo jiné speciální klávesy. Komplikovanější editovací operace jsou tvořeny posloupností jednodušších příkazů (např. dw
vymaže jedno slovo, c2fa
změní text od pozice kurzoru až do místa, na kterém je druhé „a“). Pro zkušené uživatele to znamená výrazné zrychlení práce. Není potřeba vůbec sundávat ruku z klávesnice.
První verze vi neměly vůbec žádnou indikaci aktuálního módu. Jedinou možností bylo stisknout klávesu Escape a přejít do příkazového módu. Pokud už program v příkazovém módu byl, ozvalo se pípnutí. Současné verze vi již aktuální mód označují. Grafické implementace vi (např. gvim) plně podporují práci s myší a přístup k menu.
Editor vi se stal standardem UNIXových editorů. V každé instalaci UNIXu obvykle je k dispozici editor vi, jeho klon nebo nástupce Vim. Editor vi je i dnes používán celou řadou uživatelů operačních systému UNIX. Díky náročnosti se vi naučit je vi „přátelský“ software. Své přátele si pečlivě vybírá na rozdíl od promiskuitního software, který si zadá s každým. Těm, kdo se vi(m) naučí, slouží pak věrně desítky let.
Ovládání
editovatMódy činnosti editoru vi
editovatPříkazový mód
editovatV tomto módu se nachází program vi po spuštění. Znaky nejsou vkládány do textu, ale jsou interpretovány jako příkazy
- Escape - pípnutím potvrdí nastavení příkazového módu, ze všech ostatních módů přepíná do příkazového módu
Rozšiřitelný příkazový mód
editovatTento mód slouží k zadávání složitějších příkazů (např. změny řetězců v souboru)
:
- přechod do rozšířeného příkazového módu. Za znak : se píše text příkazuEnter
- provedení příkazu a návrat do příkazového móduQ
- trvalý přechod do rozšířeného příkazového módu (někdy se také označuje jako ex mód)vi
- návrat do příkazového módu
Vkládací mód
editovatVkládací mód umožňuje vkládání textu
a
,c
,i
,o
,s
,A
,C
,I
,O
,R
,S
- přechod do vkládacího móduEscape
- návrat do příkazového módu
Spuštění editoru vi
editovatpříkaz | význam |
---|---|
vi abc |
start editoru a otevření souboru abc na první řádce |
vi +101 abc |
start editoru a otevření souboru abc na 101. řádku |
vi + abc |
start editoru a otevření souboru abc na poslední řádce |
vi +/hodnota abc |
start editoru a otevření souboru abc a skok na řádku, která obsahuje řetězec "hodnota" |
Ukončení editoru vi
editovatpříkaz | význam |
---|---|
:q |
ukončení programu bez uložení změn do souboru |
:q! |
ukončení programu bez uložení změn do souboru (pokud byl obsah souboru změněn) |
:x nebo ZZ |
uložení změn a ukončení programu |
:w název2 |
zápis změn do jiného souboru (s názvem "název2") a ukončení programu |
:wq název2 |
stejný význam jako předchozí řádek |
:e! |
zruší se všechny provedené změny |
Pohyb kurzoru na obrazovce
editovatpříkaz | význam |
---|---|
h |
o jeden znak doleva |
l |
o jeden znak doprava |
j |
o jeden řádek dolů |
18j |
o 18 řádků dolů |
k |
o jeden řádek nahoru |
příkaz | význam |
---|---|
w |
na začátek následujícího slova |
b |
na začátek předcházejícího slova |
W |
na začátek následujícího slova - oddělovač je pouze mezera, tabelátor nebo nový řádek |
B |
na začátek předcházejícího slova - oddělovač je pouze mezera, tabelátor nebo nový řádek |
e |
na začátek aktuálního slova |
E |
na začátek aktuálního slova - před první mezeru, tabelátor nebo nový řádek |
O |
na začátek řádku - do 1. sloupce |
$ |
na konec řádku - poslední znak na řádce |
^ |
na začátek řádku - první znak na řádce |
H |
na začátek první řádky obrazovky |
M |
na začátek prostřední řádky obrazovky |
L |
na začátek poslední řádky obrazovky |
Pohyb kurzoru v souboru
editovatpříkaz | význam |
---|---|
Ctrl-f |
posun o celou obrazovku vpřed |
Ctrl-b |
posun o celou obrazovku vzad |
Ctrl-d |
posun o půl obrazovky vpřed |
Ctrl-u |
posun o půl obrazovky vzad |
Ctrl-e |
posun o jednu řádku vpřed |
Ctrl-y |
posun o jednu řádku vzad |
G |
posun na poslední řádku v souboru |
125G |
posun na 125. řádku v souboru |
gg |
posun na první řádku v souboru (alternativy 1G nebo :1) |
zEnter |
aktuální řádek se nastaví jako první řádek obrazovky |
{ |
na začátek následujícího odstavce odděleného prázdnou řádkou |
} |
na začátek předcházejícího odstavce odděleného prázdnou řádkou |
Vkládání a změny textu
editovatpříkaz | význam |
---|---|
i |
následující text bude vložen před pozici kurzoru |
a |
následující text bude vložen za pozici kurzoru |
I |
následující text bude vložen na začátek řádku |
A |
následující text bude vložen na konec řádku |
o |
následující text bude vložen na novou řádku za pozicí za aktuální řádkou |
O |
následující text bude vložen na novou řádku za pozicí před aktuální řádkou |
R |
následující text bude přepisovat starý text od pozice kurzoru |
cw |
následující text bude přepisovat od pozice kurzoru do konce slova označeného znakem $
|
C |
následující text bude přepisovat od pozice kurzoru do konce řádky |
S |
následující text bude nahrazovat celou řádku |
Dělení a spojování řádků
editovatpříkaz | význam |
---|---|
iEnter |
rozdělí řádku v místě kurzoru |
J |
připojí následující řádku na konec aktuální řádky |
7J |
připojí následujících 6 řádek na konec aktuální řádky (ze 7 řádek udělá jednu) |
Mazání textu
editovatpříkaz | význam |
---|---|
x |
smaže jeden znak na pozici kurzoru |
X |
smaže jeden znak před pozici kurzoru |
dd |
smaže aktuální řádek |
7dd |
smaže 7 řádků (aktuální a 6 následujících) |
dw |
smaže vše od pozice kurzoru do konce slova |
D |
smaže vše od pozice kurzoru do konce řádku |
df: |
smaže všechno od pozice kurzoru až do znaku : včetně |
. |
zopakuje naposledy použitý příkaz mazání od nové pozice kurzoru |
Změny textu
editovatpříkaz | význam |
---|---|
gu (příkaz pohybu kurzoru) |
převede všechen text v rozsahu příkazu pohybu (třeba w , W , $ ) na malá písmena
|
gU (pohyb) |
totéž na velká písmena |
g~ (pohyb) |
zaměnit malá a velká písmena |
gq (pohyb) |
přeformátovat text podle platných okrajů |
= |
přeformátovat programem nastaveným pomocí :set equalprg |
! |
přeformátovat jiným programem |
Vyhledávání řetězců
editovatpříkaz | význam |
---|---|
/Wikipedie |
hledá následující výskyt řetězce "Wikipedie" |
?Wikipedie |
hledá předcházející výskyt řetězce "Wikipedie" |
n |
opakuje poslední hledání (next) |
N |
opakuje poslední hledání (next) v opačném směru |
/Wikipedie/-7 |
najde výskyt řetězce "Wikipedie" a pozici kurzoru nastaví o 7 řádek zpět |
/wikipedi. |
najde výskyt řetězce "Wikipedie" i "wikipedia" (. znamená libovolný znak) |
/wikiped*a |
najde výskyt řetězce "wikipedia" i "wikipedista" (* znamená libovolný počet libovolných znaků) |
Zaměňování textu
editovatpříkaz | význam |
---|---|
s/wikipedia/Wikipedie/ |
nahradí řetězec „wikipedia“ řetězcem „Wikipedie“ - pouze první následující výskyt |
s/wikipedia/Wikipedie/g |
nahradí řetězec „wikipedia“ řetězcem „Wikipedie“ - všechny výskyty na aktuální řádce |
%s/wikipedia/Wikipedie/g |
nahradí řetězec „wikipedia“ řetězcem „Wikipedie“ - všechny výskyty v souboru |
1,$s/wikipedia/Wikipedie/g |
nahradí řetězec „wikipedia“ řetězcem „Wikipedie“ - všechny výskyty v souboru |
.,158s/wikipedia/Wikipedie/g |
nahradí řetězec „wikipedia“ řetězcem „Wikipedie“ - všechny výskyty od aktuální řádky do řádku číslo 158 |
Kopírování a přesouvání textu
editovatKopírování probíhá přes nepojmenovanou paměť - schránku
příkaz | význam |
---|---|
yy nebo Y |
uloží aktuální řádek do schránky |
3yy |
uloží do schránky 3 řádky, počínaje aktuálním řádkem |
y$ |
uloží do schránky všechno od aktuální pozice kurzoru do konce řádky |
yf: |
uloží do schránky všechno od aktuální pozice kurzoru až do znaku „:“ včetně |
p |
vloží uloženou řádku ze schránky za aktuální řádku |
P |
vloží uložený řádek ze schránky před aktuální řádku, pokud není ve schránce uložený řádek, ale text, bude vložen text před kurzor |
Nastavení prostředí
editovatpříkaz | význam |
---|---|
:set all |
výpis všech předvoleb |
:set autoident |
při vkládání nového textu bude každá nová řádka odsazeno vlevo stejně jako předcházející |
:set noai |
vypnutí autoident |
:set ignorecase |
při hledání ingoruje rozdíl mezi velkým a malým písmenem |
:set noi |
vypnutí ignorecase |
:set list |
zobrazí tabelátory jako ^l a konce řádku jako $ |
:set nolist |
vypnutí list |
:set number |
před řádky se vypíšou jejich pořadová čísla |
:set nonu |
vypnutí number |
... |
seznam parametrů není kompetní |
Každý uživatel si může trvale nakonfigurovat editor vi podle vlastních potřeb. Buď pomocí konfiguračního souboru .exrc v domovském adresáři, nebo pomocí proměnné EXINIT
. (pro ViM se používá i .vimrc)
Příklad:
- .exrc
" libovolný komentář set ignorecase number abbrev retrun return abbrev exit exit(0);
- EXINIT
export EXINIT="set ic nu | abbrev retrun return"
Odsazování a zalamování textu
editovatpříkaz | význam |
---|---|
:set tabstop |
velikost tabu, zkratka :set ts
|
:set wrap |
zalamování řádků |
:set linebreak |
zalamování podle mezer - vhodnější pro texty (zkratka lbr )
|
:set textwidth |
šířka textu - automaticky tvoří nové řádky tak, aby tato šířka nebyla překročena. Pokud je nastavená na nulu, je vypnutá. (zkratka tw )
|
:set list |
zobrazení netisknutelných znaků |
:set nooption |
příslušnou volbu vypíná |
... |
dále viz také příkaz :help wrap apod.
|
vi v rámci more a man
editovatVi lze použít jako unixový pager, stejně jako more nebo less, např. oblíbená je možnost zobrazit výstup z terminálu v novém okně gvimu - ps ax |gvim - (pozor na pomlčku). Editací nastavení programu man lze dosáhnout stejného výsledku i pro unixové manuálové stránky.
Externí odkazy
editovat- http://www.vim.org oficiální stránky klonu vim (anglicky)
- vim - skutečný editor textů úvod do práce s vim Pavla Satrapy (česky)