This is an old revision of the document!
Referințe din urmă:
Multe din programele pe care le vom folosi nu vin preinstalate. Pe Windows trebuia să rulați un executabil pentru a instala un program.
Pe sistemele Ubuntu, pachetele se instalează utilizând apt-get}. De exemplu, pentru a instala tree} trebuie să rulăm comanda:
<screen> apt-get install tree </screen>
Nu puteți instala pachetul, trebuie să fiți root} (de ce?)
<screen> sudo apt-get install tree </screen>
Vi se vor afișa operațiile care se vor executa și efectele asupra spațiului pe disk și apoi veți fi întrebați dacă vreți să continuați. Dintre cele 2 litere, y} și n} una este majusculă, semnificând opțiunea implicită: dacă nu introduceți nimic și apăsați doar pe Enter, se va considera respectiva opțiune.
Verificați că s-a instalat tree}:
<screen> tree </screen>
Există cazuri în care un pachet depinde de alt pachet.
Pentru instalarea unui pachet trebuiesc instalate toate dependențele acestuia.
Din fericire, apt-get} știe să instaleze dependențele lipsă. Testați instalând ack-grep}.
Observați că se vor instala mai multe pachete decât ați dorit voi.
Vă întrebați poate de unde se descarcă pachetele? Vizualizați conținutul fișierului sources.list}.
O linie specifică o posibilă sursă de pachete. Formatul este următorul:
<screen> deb url version type tags deb-src url version type tags </screen>
unde type} reprezintă versiunea sistemului Ubuntu folosită (numele de cod al versiunii, de exemplu natty} pentru 11.04 Natty Narwhall)
Puteți modifica oricând acest fișier. De exemplu, în cazul în care locația repository-urilor este prea departe, pentru o instalare mai rapidă se recomandă să modificați toate URL-urile.
Schimbați URL-urile din ro} în en} (amintiți-vă cum făceați replace pe tot fișierul din laboratorul de Vim)
Porniți mașina virtuală fedora}. Sistemul de operare folosit este Fedora. Utilizatorul este root} cu parola fedora}.
Distribuțiile Fedora folosesc alt package manager: yum}.
Instalarea unui pachet utilizând yum} se face astfel:
<screen> yum install pachet </screen>
Instalați pachetul ack} (echivalentul ack-grep} de pe Ubuntu)
Porniți mașina virtuală suse}. Sistemul de operare folosit este Open Suse.
Sistemele Open Suse folosesc alt package manager: zypper}. În plus, dacă nu știți în ce pachet se află o comandă, puteți folosi cnf} (command-not-found}):
<screen> cnf tree </screen>
Innstalarea unui pachet utilizând zypper} se face astfel:
<screen> zypper in pachet </screen>
Instalați pachetul corespunzător comenzii git}.
Uneori trebuie să edităm mai multe fișiere simultan. Desigur, putem deschide mai multe terminale sau mai multe taburi în același terminal dar nu vom putea copia text dintr-un fișier în celalt (încercați).
Putem folosi taburi în vim
utilizând :tabnew
(deci în modul Comandă).
Nagivarea între taburi se face cu gt
și gT
.
g
este pentru orice fel de navigare. t
și T
sunt pentru taburi.
Deschideți 3 taburi în aceeași instanță de vim
, scrieți text în primul și copiați-l în al treilea.
Taburile sunt utile dar nu ne permit să vizualizăm simultan conținutul a mai multe fișiere. Pentru aceasta, folosim split views:
comandă | efect |
---|---|
:sp | split orizontal |
:vsp | split vertical |
Comenzile din tabel sunt prescurtări pentru :split
și :vsplit
.
Navigarea între view-uri se face cu Ctrl+w și apoi Ctrl + litera asociată direcției de deplasare (h, j, k, l)
Deschideți 4 view-uri împărțind ecranul în 4 zone egale. Introduceți text într-o zonă și copiați-l în toate celelalte zone.
Vim
poate fi folosit pentru editarea codului sursă. Descărcați și dezarhivați arhiva ce conține un mic proiect ce folosește OpenGL. Scopul acestui exercițiu este să compilați acest proiect utilizând o singură sesiune de vim
.
Sunt necesare cunoștințe minime de C, nu și de compilare.
Vedeți ce reprezintă :make
, :cnext
, :cprev
și :copen
în vim
și folosiți-le pentru a compila și corecta sursa având deschis fișierul fps.cpp
în vim
.
Hint: folosiți :h
(:help
pentru a obține indicații)
După ce am compilat executabilul vom dori să-l și rulăm. Putem părăsi vim
pentru asta dar putem să-l rulăm și din interiorul vim.
Pentru aceasta, vom folosi modul Comandă dar vom prefixa comanda cu !
. Pentru a rula executabilul va trebui să dăm comanda ./fps
.
Rulați executabilul.
Pentru a permite navigarea ușoară prin codul sursă, vim
interacționează ușor cu unelte precum ctags
și cscope
. În exercițiul curent vom folosi ctags
, încercați să vă jucați voi cu cscope
.
Ieșiți din vim
dacă n-ați făcut deja asta și rulați
<screen> ctags * </screen>
Se construiește un fișier nou în care se găsesc informații despre fiecare identificator din sursele din directorul curent. Deschideți fișierul fps.cpp
<screen> vim fps.cpp </screen>
Căutați funcția main
(hint: /
).
Căutați apelul funcției init
din cadrul funcției main
. Pentru a sări la definiția funcției când ne aflăm pe apelul ei tastăm Ctrl + ].
Navigați până la definiția clasei Keyboard
(găsiți o instanță a Keyboard
în init
sau folosiți căutare cu /
).
Pentru a ne întoarce folosim Ctrl + T. Întoarceți-vă în funcția main
.
Căutați definiția clasei Universe
din funcția update
(pe care o găsiți apelată în main
).
Pentru a avea un cod lizibil este recomandat să indentați instrucțiunile în cadrul funcțiilor și al blocurilor. Pentru a nu fi nevoiți să faceți asta manual, vim
vine cu 2 opțiuni:
* autoindent
* cindent
Vedeți ce fac fiecare din ele și activați-le.
Pentru a nu fi nevoiți să introduceți aceleași setări de fiecare dată când trebuie să porniți vim
este bine să le salvăm într-un fișier numit .vimrc
.
Sintaxa fișierului este puțin ciudată. Momentan, vom introduce opțiuni simple, pentru lucruri mai complicate va trebui să consultați documentația vim
.
Vrem să setăm opțiunea textwidth
la 79. În acest fel, vim
va începe automat o linie nouă dacă depășim coloana 79.
Deschideți fișierul .vimrc
din home-ul vostru și introduceți linia următoare:
<screen> set textwidth=79 </screen>
Salvați și ieșiți. Deschideți o instanță de vim
. Putem testa opțiunea introducând o linie foarte lungă și așteptând să vedem dacă ni se limitează linia la 79 de caractere.
Sau, putem să afișăm valoarea opțiunii. Folosiți (tw
e prescurarea de la textwidth
):
<screen> :set tw? </screen>
?
după aceasta.
Introduceți următoarele opțiuni în .vimrc
:
* cindent
* autoindent
* smartindent
* incsearch
* autowrite
* hls
* syntax on
Atenție!! syntax on
nu este o opțiune în sine, nu se setează cu set
!. Introduceți-o așa cum apare.
Aflați ce face fiecare din opțiunile introduse în .vimrc
.
.vimrc
și acasă, conține setări minimale pentru un lucru eficient cu vim
.
.vimrc
publicate de utilizatorii vim
. Recomandarea noastră este să vă inspirați din ele și să preluați ce pare interesant și util pentru voi.
Puteți folosi de exemplu: * https://github.com/ddvlad/cfg/blob/master/_vimrc * http://swarm.cs.pub.ro/~mihai/.vimrc
Puteți folosi vim
și pentru a scrie text. În acest caz, o facilitate utilă este cea de spellcheck.
Există programe precum aspell
dar vim
vine integrat cu un modul de spell checking.
Pentru a-l activa, trebuie să setați opțiunea spell
. Se vor colora imediat cuvintele greșite. Pentru a obține o listă de sugestii de corectare folosiți z=
.
Activați facilitatea de spellcheck și corectați fișierul users
.
După cum ați observat, ștergerea unei porțiuni de text va face ca următoarea comandă de tip paste să lipească textul șters. Dacă dorim să avem mai multe bucăți de text salvate pentru a fi lipite ulterior trebuie să folosim registre.
Pentru a salva într-un registru prefixăm comanda de ștergere cu ”
și numele registrului. Pentru a-l folosi, procedăm similar.
Efectuați task-urile din 2_lines
. Folosiți cât mai puține taste.
Pentru a vedea diferențele între două fișierele putem folosi diff
. Pentru a crește productivitatea, vim
vine cu vimdiff
(shortcut pentru vim -d
).
Folosiți vimdiff
pentru a vedea diferențele între fișierele file1
și file2
.
:h vimdiff
).
Uneori este nevoie să repetăm aceeași secvență de acțiuni pentru mai multe linii. Pentru aceasta s-au creat macro-urile.
Pentru a porni înregistrarea unui macro se folosește q
urmat de litera registrului în care trebuie salvat macro-ul.
Când se dorește terminarea macro-ului se folosește tasta q
.
Pentru repetare, se folosește @
urmat de litera registrului în care a fost salvat.
Folosiți macro-uri pentru a insera , 3
înainte de ultima paranteză închisă de pe toate liniile din fișierul one_more_arg.c
Exista și o altă modalitate?