Uživatel:Jkl~cswikiversity/Studuji cpp/cpp ve vi

Z Wikiverzity

Ú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::
% 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]

  1. ukončit vi a přeložit (:x g++ pokus.cpp)
  2. spustit kompilátor z vi (:! g++ pokus.cpp) - po ukončení kompilace očekává enter a vrací se do editoru
  3. 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:

  1. vi -t defstr
  2. v programu vi :ta defstr - a to při editaci jakéhokoliv souboru !!
  3. 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]