Pisanje riječi na engleskom i pisanje koda su dvije potpuno različite stvari. Dok programirate, provodite više vremena mijenjajući datoteke, čitajući, krećući se i uređujući kod u poređenju sa pisanjem teksta. Ima smisla da postoje različite vrste programa za pisanje Engleskih riječi u odnosu na kod (npr. Microsoft Word vs. Visual Studio Code).
Kao programeri, koristimo najveći dio našeg vremena uređujući kod, tako da je isplativo uložiti vaše vrijeme da bi postali dobri u korišćenju editora koji zadovoljava vaše potrebe. Evo kako se uči novi editor:
- Počnite sa tutorijalom (npr. ova lekcija, plus resursi na koje vas uputimo)
- Koristite editor za sve potrebe uređivanja teksta (čak iako vas to u startu usporava)
- Istražujte stvari u hodu: ukoliko vam se čini da postoji bolji način da se nešto odradi, on vjerovatno i postoji.
Ukoliko budete slijedili, i u potpunosti se posvetite korišćenju novog programa za svaku svrhu uređivanja teksta, vremenski okvir za učenje sofisticiranog tekst editora izgleda ovako. Za sat ili dva, naučićete osnovne funkcije editora kao što je otvaranje i uređivanje datoteka, sačuvaj/izađi i navigacija. Nakon 20 sati, trebali bi da budete brzi kao što ste bili sa vašim starim editorom. Nakon toga, počinju privilegije: Imaćete dovoljno znanja i memorije mišića tako da će vam korišćenje novog editora uštedjeti na vremenu. Moderni text editori su moćni i fensi alati, tako da učenje nikada ne prestaje: bićete sve brži kako učite
Koji editor da naučite?
Programeri imaju oprečna mišljenja u vezi sa editorima teksta.
Koji editori su popularni danas? Pogledajte ovaj StackOverflow survey (može postojati i pristrasnost budući da korisnici StackOverflowa možda nisu reprezentativni za programere u cjelini). Visual Studio Code je najpopularniji editor. Vim je najpopularniji editor koji se zasniva na komandnoj liniji.
Vim
Svi instruktori ovih lekcija koriste Vim kao njihov editor. Vim ima bogatu istoriju. Potiče od Vi editora (1976), i razvija se i dan danas. Iza Vima stoje neke veoma uredne ideje, i iz ovog razloga, puno alata podržava Vim mod emulacije (npr. 1.4 miliona ljudi je instaliralo Vim emulator za VS code). Vim je vjerovatno vrijedan učenja čak iako na kraju ipak pređete na neki drugi editor.
Nije moguće naučiti svu funkcionalnost Vim-a za 50 minuta, tako da ćemo se fokusirati na objašnjenje filozofije Vim-a, naučiti vas osnove, pokazati vam neke napredne funkcionalnosti, i dati vam resurse da bi savladali alat.
Filozofija Vim-a
Kada programirate, koristite najveći dio vašeg vremena čitajući/uređujući, a ne pišući. Iz ovog razloga, Vim je modalni editor: ima različite modove za unošenje teksta u odnosu na manipulaciju teksta. Vim je programatičan (Sa Vimscript i sa drugim jezicima kao što je Python), i Vim's interfejs je sam po sebi programski jezik: tasteri su komande, i ove komande su uklopljive. Vim izbjegava upotrebu miša, jer je to previše sporo, Vim čak izbjegava upotrebu dugmadi sa strelicama jer iziskuju previše pokreta.
Krajnji rezultat je editor koji se uklapa u brzinu kojom mislite.
Režimsko uređivanje
Dizajn Vim-a se bazira na ideji da programeri provode dosta vremena čitajući, krećući se i praveći manje izmjene, u poređenju sa pisanjem dugih linija teksta. Iz ovog razloga, Vim ima više operativnih režima.
- Normal: Za kretanje kroz fajl i pravljenje izmjena
- Insert: Za ubacivanje teksta
- Replace: Za zamjenu teksta
- Visual: (običan, linija ili blok): za selektovanje blokova teksta
- Command-line: Za pokretanje komandne linije
Pritisci na tastere imaju različita značenja u različitim režimima rada. Na primer, slovo
1
x
U svojoj uobičajenoj konfiguraciji, Vim prikazuje trenutni režim u donjem lijevom uglu. Početni/Podrazumijevani režim je Normalni režim. Obično ćete provesti većinu vašeg vremena između Normalnog i Insert režima.
Mijenjate režim pritiskom na
1
<ESC>
1
i
1
R
1
v
1
V
1
<C-v>
1
^V
1
:
Koristićete
1
<ESC>
Osnove
Ubacivanje teksta
Iz Normalnog režima, pritisnite
1
i
1
<ESC>
Baferi, tabovi, i windows
Vim održava set otvorenih datoteka, koji se nazivaju "baferi". Vim sesija ima broj tabova, svaki od njih ima broj windows-a. Svaki windows pokazuje jedan bafer. Za razliku od drugih programa koji su vam poznati, kao što su web pretraživači, ne postoji 1-1 korespondiranje između bafera i windows-a; Windows su samo pregledi. Dati bafer može biti otvoren u više windows-a, čak i u okviru istog tab-a. Ovo može biti zgodno, na primer, da bi se prikazale dvije različite strane datoteke u isto vrijeme.
Uobičajeno, Vim se otvara sa jednim tabom, koji sadrži jedan windows.
Komandna linija
Komandnoj liniji se može pristupiti kucanjem
1
:
1
:
- izađi (zatvori window)
1
:q
- sačuvaj (“ispiši”)
1
:w
- sačuvaj i izađi
1
:wq
- {naziv datoteke} otvori datoteku za editovanje
1
:e
- prikaži otvorene bafere
1
:ls
- {topic} otvori pomoć
1
:help
- otvori pomoć za
1
:help :w
komandu1
:w
- otvori pomoć za
1
:help w
pokret1
w
Vim interfejs je programski jezik
Najvažnija ideja u Vim-u jeste da je Vimov intefejs u stvari programski jezik. Pritisci na tastere su komande, i ove komande sastavljaju. Ovo omogućava efikasno kretanje i editovanje, posebno kada komande postanu memorija mišića.
Kretanje
Trebalo bi da većinu vašeg vremena provodite u Normal režimu, koristeći komande kretanja da bi se kretali kroz bafer. Kretanje kroz Vim se takođe naziva "imenica", zato što se ono odnosi na dijelove teksta.
- Osnovno kretanje: (lijevo, dolje, gore, desno)
1
hjkl
- Riječi: (sledeća riječ),
1
w
(početak riječi),1
b
(kraj riječi)1
e
- Redovi: (Početak reda),
1
0
(prvi non-blank karakter),1
^
(kraj reda)1
$
- Ekran: (vrh ekrana),
1
H
(sredina ekrana),1
M
(dno ekrana)1
L
- Skrol: (gore),
1
Ctrl-u
(dolje)1
Ctrl-d
- File: (početak fajla),
1
gg
(kraj fajla)1
G
- Broj reda: or
1
:{number}<CR>
(line {number})1
{number}G
- Misc: (odgovarajući item)
1
%
- Pronađi: ,
1
f{character}
,1
t{character}
,1
F{character}
- find/to naprijed/nazad {character} na trenutnoj liniji. -1
T{character}
/1
,
za navigaciju sa podudaranjem1
;
- Pretraga: za navigaciju sa podudaranjem
1
/{regex}, n / N
Selekcija
Visual režimi:
- Visual
- Visual Line
- Visual Block
Mogu se koristiti ključevi za kretanje da bi se izvršila selekcija
Editovanje
Za sve što ste navikli da koristite miš, sada ćete raditi sa tastaturom koristeći komande za kretanje i editovanje. Ovdje Vim interfejs počinje da izgleda kao programski jezik. Vim komande za editovanje se nazivaju "glagoli", jer glagoli djeluju na imenice.
- enter Insert mode
1
i
- ali za manipulaciju/brisanje teksta, želite da koristite nešto više od backspace-a.
- /
1
o
ubaci liniju ispod/iznad1
O
- d{motion} izbriši{pokret}
- npr. je izbriši riječ,
1
dw
je izbriši do kraja linije,1
d$
je izbriši do početka linije1
d0
- npr.
- promijeni{pokret}
1
c{motion}
- npr. je promjena riječi
1
cw
- kao praćen sa
1
d{motion}
1
i
- npr.
- izbriši karakter (jednako sa
1
x
)1
dl
- zamijeni karakter (jednako sa
1
s
)1
xi
- Visual režim + manipulacija
- izaberi tekst, za brisanje ili
1
d
za promjenu.1
c
- izaberi tekst,
- za undo,
1
u
za redo1
<C-r>
- za kopiranje/"yank"(neke druge komande kao
1
y
takođe kopiraju)1
d
- za paste
1
p
- Još mnogo stvari za naučiti npr. mijenja case karaktera
1
~
Brojanje
Možete kombinovati imenice i glagole sa brojanjem, koje će izvršiti zadatu akciju više puta.
- pomijera tri riječi naprijed
1
3w
- pomijera pet linija dolje
1
5j
- briše sedam riječi
1
7dw
Modifikatori
Možete koristiti modifikatore da promijenite značenje riječi. Neki modifikatori su
1
i
1
a
- mijenja sadržaj unutar para zagrada
1
ci(
- mijenja sadržaj unutar uglastih zagrada
1
ci[
- briše string sa jednostranim navodnicima, uključujući okružujuće jednostrane navodnike
1
da'
Demo
Evo pokvarene fizzbuzz implementacije
1 2 3 4 5 6 7 8 9 10 11
def fizz_buzz(limit): for i in range(limit): if i % 3 == 0: print('fizz') if i % 5 == 0: print('fizz') if i % 3 and i % 5: print(i) def main(): fizz_buzz(10)
Popravićemo sledeće probleme:
- Main nikada nije pozvan
- Počinje sa 0 umjesto sa 1
- Ispisuje "fizz" i "buzz" na posebnim linijama za brojeve djeljive sa 15
- Ispisuje "fizz" za brojeve djelive sa 5
- Koristi hard-kodiran argument 10 umjesto da primi argument komandne linije
Pogledajte video lekciju za demonstraciju. Uporedite kako se promjene vrše pomoću Vima sa načinom na koji možete izvršiti iste izmjene pomoću drugog programa. Vidite kako je u Vimu potrebno vrlo malo pritisaka tipki, što vam pruža mogućnost da uređujete brzinom kojom mislite.
Prilagođavanje Vima
Vim se prilagođava putem konfiguracijske datoteke u običnom tekstu u
1
~/.vimrc
Mi pružamo dobro dokumentovanu osnovnu konfiguraciju koju možete koristiti kao polaznu tačku. Preporučujemo je zato što podešava neko od Vimovih pokvarenih osnovnih ponašanja. Preuzmite naš config ovdje i sačuvajte ga u 1
~/.vimrc
Vim je veoma prilagodljiv, i vrijedi uložiti vrijeme u istraživanje opcija prilagođavanja. Možete vidjeti dotfiles drugih ljudi na GitHubu za inspiraciju, na primer, Vim configs vaših instruktora (Anish, Jon(koristi neovim), Jose).Takođe, postoji dosta dobrih blog postova na ovu temu. Pokušajte da ne radite samo copy-paste punih konfiguracija drugih ljudi, pročitajte ih, shvatite ih, i uzmite ono što vam je potrebno.
Ekstenzije Vima
Postoji puno plugina za ekstenziju Vima. Suprotno zastarelom savjetu koji možete naći na internetu, nije vam potreban plugin menadzer za Vim (još od Vim 8.0). Umjesto toga, možete koristiti ugrađeni sistem upravljanja paketima. Jednostavno kreirajte direktorijum
1
~/.vim/pack/vendor/start/
1
git clone
Evo nekih naših omiljenih plugina:
- ctrlp.vim: fuzzy file finder
- ack.vim: code search
- nerdtree: file explorer
- vim-easymotion: magic motions
Pokušavamo da izbjegnemo da vam damo veoma veliku listu plugina ovdje. Možete provjeriti dotfiles instruktora (Anish. Jon, Jose) da vidite koje druge plugine koriste. Pogledajte Vim Awesome za više sjajnih Vim plugina. Takođe, postoji dosta blog postova na ovu temu, samo pretražite "Najbolji Vim plugini".
Vim-mod u drugim programima
Mnogi alati podržavaju Vim emulaciju. Kvalitet varira od dobrog do odličnog; zavisno od alata, možda neće podržati fensi Vim funkcije, ali većina pokriva osnove veoma dobro.
Shell
Ukoliko ste Bash user, koristite
1
set -o vi
1
bindkey -v
1
fish_vi_key_bindings
1
export EDITOR=vim
1
git
Readline
Mnogi programi koriste GNU Readline biblioteku za interfejs komandne linije. Readline podržava (osnovnu) Vim emulaciju takođe, koja može biti omogućena dodavanjem sledeće linije u
1
~/.inputrc
1
set editing-mode vi
Sa ovim podešavanjem, na primer, Python REPL će podržati Vim vezivanje.
Others
Postoji čak i Vim keybinding ekstenzija za web browsere - neki od popularnih su Vimium za Google Chrome i Tridactyl za Firefox. Možete čak dobiti Vim vezivanje u Jupyter notebooks.
Napredni Vim
Evo par primjera koji će vam pokazati moć editora. Ne možemo vas naučiti sve ove stvari, ali ćete ih naučiti vremenom. Imajte na umu: kada god koristite editor i pomislite "mora da postoji bolji način da se ovo uradi", vjerovatno i postoji: pogledajte online.
Pretraži i zamijeni
1
:s
1
%s/foo/bar/g
- Mijenja foo sa bar globalno u fajlu
1
%s/\[.*\](\(.*\))/\1/g
- Mijenja naziv Markdown linka sa čistim URL-om
Više prozora
- da podijeli prozore
1
:sp / :vsp
- Može imati više views-a na isti buffer.
Macros
- za početak snimanja macroa u registru
1
q{character}
1
{character}
- za prekid snimanja
1
q
- replays macro
1
@{character}
- Macro izvršenje se zaustavlja zbog greške
- izvršava macro {number} puta
1
{number}@{character}
- Macroi mogu biti rekurzivni
- Prvo očistite macro sa
1
q{character}q
- Snimite macro, sa da bi pozvali macro rekurzivno
1
@{character}
- Primjer: Konvertujte xml u json (file)
- Niz objekata sa ključem “name” / “email”
- Koristite Python program?
- Koristite sed/regexes
1
g/people/d
1
%s/<person>/{/g
1
%s/<name>\(.*\)<\/name>/"name": "\1",/g
- ...
- Vim komande / macros
- ,
1
Gdd
briše prvu i poslednju liniju1
ggdd
- Macro da formatira pojedinačan element (register )
1
e
- Ide na liniju sa
1
<name>
1
qe^r"f>s": "<ESC>f<C"<ESC>q
- Ide na liniju sa
- Macro da formatira osobu
- Ide na liniju
1
<person>
1
qpS{<ESC>j@eA,<ESC>j@ejS},<ESC>q
- Ide na liniju
- Macro da formatira osobu i da ide na sledeću osobu
- Ide na linuju
1
<person>
1
qq@pjq
- Ide na linuju
- Izvršava macro do kraja fajla
1
999@q
- Ručno uklanja poslednje i dodaje
1
,
i1
[
1
]
- Prvo očistite macro sa
Resursi
- je tutorijal koji dolazi instaliran sa Vimom - ukoliko je Vim instaliran, trebalo bi da ste mogućnosti da pokrenete
1
vimtutor
iz shell-a.1
vimtutor
- Vim Adventures je igra kojom se uči Vim
- Vim Tips Wiki
- Vim Advent Calendar ima razne Vim savjete
- Vim Golf je code golf ali gdje je programski jezik Vim UI
- Vi/Vim Stack Exchange
- Vim Screencasts
- Practical Vim (book)
Vježbe
- Završite . Napomena: Najbolje izgleda na 80x40 (80 kolona sa 24 reda) prozora terminala.
1
vimtutor
- Preuzmite naš basic vimrc i sačuvajte ga u . Pročitajte dobro dokumentovane datoteke (koristeći Vim!) i pogledajte kako Vim izgleda i kako se ponaša malo drugačije sa novom konfiguracijom.
1
~/.vimrc
- Instalirajte i podesite plugin: ctrlp.vim.
⋅⋅1. Kreirajte plugin direktorijum sa ⋅⋅2. Preuzmite plugin:
1
mkdir -p ~/.vim/pack/vendor/start
⋅⋅3. Pročitajte dokumentaciju za plugin. Pokušajte da koristite CtrlP da locirate datoteku krećući se kroz direktorijum projekta, otvarajući Vim, i korišćenjem Vim komandne linije za početak1
cd ~/.vim/pack/vendor/start; git clone https://github.com/ctrlpvim/ctrlp.vim
. ⋅⋅4. Izmijenite CtrlP dodavanjem konfiguracije u vaš1
:CtrlP
da otvorite CtrlP pritiskajući Ctrl-P.1
~/.vimrc
- Da bi izvježbali Vim, ponovo odradite Demo iz ove lekcije na vašoj mašini.
- Koristite Vim za svako vaše editovanje teksta u sledećem mjesecu. Kada god nešto izgleda neefikasno, ili pomislite "mora da postoji bolji način", Guglajte, vjerovatno i postoji. Ako zaglavite, dođite dok traju office hours ili nam pošaljite mejl.
- Podesite vaše druge alata da koriste Vim vezivanje (Vidi instrukcije iznad).
- Dalje prilagodite vaš i instalirajte još plugina.
1
~/.vimrc
- (Napredno) Konvertujte XML u JSON Primjer fajla koristeći Vim macroe. Pokušajte sami da ovo odradite, ali možete pogledati macros sekciju iznad ukoliko zaglavite.