Uživatel:Jkl~cswikiversity/Studuji cpp/cpp ve vi
Úvod
[editovat]Vi (visual editor) je jedním z nejlepších textových editorů, který však má (podobně jako C++) poměrně strmou učící křivku. Je to podobné jako užití bojového umění při hospodské rvačce - pokud ho ovládáte, dosáhnete kýženého výsledku rychle a čistě. Pokud však nemáte čas nebo chuť se bojové umění učit, můžete použít lehký kulomet a dosáhnout téhož cíle s mnohem menší námahou, ovšem za cenu vedlejších ztrát ("collateral damage"), menší efektivity a vyšších nákladů (minimálně za náboje).
Píšeme první kód
[editovat]Pojďme do nějakého prázdného adresáře a zkusíme si něco ve vimu napsat.
vi pokus.cpp
Nyní stiskem "i" přejdeme do vkládacího (insert) režimu a píšeme ..
#include <iostream>
#define defstr "Toto je pokus"
int main(){
int i;
std::cout<<"Ahoj !"<<std::endl;
i=5;
std::cout<<"toto je testik: \""<<defstr<<"\""<<std::endl;
std::cout<<"I se rovná "<<i<<"."<<std::endl;
return 0;
}
Hotovo, stiskneme ESCAPE a ukončíme vkládací režim. Máme napsáno, ale není to tak hezky barevné jako v MS Visual Studiu. Co s tím ? Napíšeme
:syntax on
. Pokud máme smůlu, vi zařve: E319: Sorry, the command is not available in this version. Může to být proto, že ačkoliv se váš sytém tváří, že v něm vim je, obsahuje jen ořezanou verzi. Takto se chová nepříklad ubuntu. Řešení je jednoduché:
sudo apt-get install vim ctags
Tím se nainstaluje i balík ctags, o kterém si povíme dále. Máme tedy krásné omalovánky :-)
Brutální funkce
[editovat]Pokud vi znáte, pak vás mnohé nepřekvapí.
- Základní pohyb:
- i = přepnutí do insert režimu, esc návrat z něj
- r = přepsat jedno písmenko
- R = začít přepisovat
- :w filename - uložit pod jménem, bez jména jen uložit
- :x - ulož a skonči
- : ADRESA s/"covyměnit"/"zacovyměnit"/PŘEPÍNAČ
- ADRESA:
- tečka - aktuální řádek
- dolar - poslední řádek souboru
- procento - celý soubor
- číslice - n. řádek souboru. Lze použít také +n a -n - rozsah je n řádek od aktuálníého výskytu
- PŘEPÍNAČ:
- g - global, celý soubor
- c - cond, před nahrazením se zeptat
- číslice - nahraď x-tý výskyt
- Příklad nahrazení - přidáme do souboru using namespace std; a vyhodíme std::
- ADRESA:
% s/std:://g
- Hvězdička - (nemáte-li numerickou klávesnici a používate českou klávesnici tak také pravý alt+8) ->další výskyt tohoto slova (třeba proměnné)
- Křížek - (#, nebo pravý alt+3 nebo pravý alt+x) -> předchozí výskyt slova nebo proměnné
- gd - "go to definition" - skočí na definici proměnné
- '' - dvě jednoduché uvozovky skočí na řádek, kde jsme začali hledat (i příkazem gd). Uvozovky češi najdou pod pravý alt+§.
- { - předchozí prázdný řádek
- } - další prázdný řádek
- % - konec bloku (závorky všeho druhu. lomítka) - v základní verzi fungují jen závorky, nikoliv uvozovky
- :m[číslo] vytvoří záložku, :číslo na ní přeskočí
Kompilace
[editovat]- ukončit vi a přeložit (:x g++ pokus.cpp)
- spustit kompilátor z vi (:! g++ pokus.cpp) - po ukončení kompilace očekává enter a vrací se do editoru
- pokud máme makefile tak pomocí :mak či :make - vrací se na řádek s chybou. Výhoda je, že můžeme pustit klidně vi bez parametru souboru ...
makefile by pro naše účely byl:
all: pokus.cpp [tabelátor]g++ pokus.cpp -o pokus
Více souborů není problém
[editovat]Již předchozí kapitola nakousla problém, že můžemem mít více zdrojáků v jednom projektu. Program ctags si poznamená důležité proměnné ze zadaných souborů (klasicky ctags *)
- makra (#define blabla)
- výčtové hodnoty
- definice funkcí, prototypů a deklarací
- jména tříd, enum, struct, a union
- namespace
- typedefy
- definice a deklarace proměnných
- členy tříd, struct-ů a union-ů
pokud pak chceme skočit třeba na definici "defstr", můžeme použít:
- vi -t defstr
- v programu vi :ta defstr - a to při editaci jakéhokoliv souboru !!
- ctrl-pravá hranatá závorka (při české klávesnici nezapomenout na pravý alt !) pokud je kurzor na dané proměnné
Práce se schránkou
[editovat]Toto trochu zasahuje do normální výuky vimu ...
~.vimrc
[editovat]Takže co třeba kompilace F5kou ?
syntax on
nmap <F5> :mak <CR>
imap <F5> <C-o><F5>
Další úkoly
[editovat]- include File Searching- ':h include-search'
- "Clipboard" buffers- ' "xY ' to cut or copy to buffer x (Y represents any normal deletion or yank command), ' "xZ ' to paste contents of x (Z represents pasting... p or P); (x can be any letter, can switch to another file(:e filename) and still maintain contents of buffers).
- Comment Specifiers- ':h comments'
- .vimrc - do něj je možné uložit řadu konfiguračních nastavení
Další Vim-vych-ytávky
[editovat]- plugin pro doplňování C++ syntaxe
- rozbalí se do ~/.vim (unix) nebo %HOMEPATH%\vimfiles (windows)
- :helptags $HOME/.vim(nebo vimfiles)/doc
- ctrl+x+F - nabídne doplnění jména souboru v insert módu
- ctrl+P/N - nabídne doplnění slova v insert módu
- ctrl+x+L - doplnění zbytku řádky od [] podle předchozího výskytu (v insert módu)
Zdroje
[editovat]- [1]
- návod pro úplné začátečníky - tohle si přečtěte, pokud nevíte o čem mluvím
- Jaké budou výhody vimu, pokud se ho naučíte, druhý díl seriálu
- vi help file
- vi lovers ...
- tutorial
- [2]
- [3]
- cheat sheet a reference chart
- A ještě pár dalších česky: Satrapa, devnull.cz