Editori (VIM)

Sledeca lekcija
Video lesson

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 insert režimu će samo umetnuti bukvalni znak x, ali u normalnom režimu će izbrisati karakter pod kursorom, a u vizuelnom režimu će izbrisati odabrano.

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>
za prelazak sa bilo kojeg režima nazad u normalni režim. Iz normalnog režima uđite u Insert režim sa
1 i
Replace režim sa
1 R
, Visual režim sa
1 v
, Visual line režim sa
1 V
, Visual Block mode sa
1 <C-v>
(Ctrl-V, ponekad se piše kao
1 ^V
), i režim komandne linije sa
1 :
.

Koristićete

1 <ESC>
dosta u toku korišćenja Vim-a, razmislite da zamijenite Caps Lock za Escape (macOS instrukcije)

Osnove

Ubacivanje teksta

Iz Normalnog režima, pritisnite

1 i
za insert režim. Sada, Vim se ponaša kao bilo koji drugi text editor, dok ne pritisnete
1 <ESC>
da se vratite u normalni režim. Ovo, zajedno sa osnovama koje su gore objašnjene, je sve što vam je potrebno da bi počeli da koristite Vim kao tekstualni editor(iako nije izuzetno efikasno, ukoliko koristite svo vaše vrijeme za editovanje iz Insert režima).

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 :
u Normal režimu. Vaš kursor će preći na komandnu liniju na dnu vašeg ekrana nakon pritiskanja
1 :
. Ovaj mod ima mnogo funkcionalnosti, uključujući otvaranje, čuvanje, i zatvaranje datoteka, i zatvaranje Vima.

  • 1 :q
    izađi (zatvori window)
  • 1 :w
    sačuvaj (“ispiši”)
  • 1 :wq
    sačuvaj i izađi
  • 1 :e
    {naziv datoteke} otvori datoteku za editovanje
  • 1 :ls
    prikaži otvorene bafere
  • 1 :help
    {topic} otvori pomoć
  • 1 :help :w
    otvori pomoć za
    1 :w
    komandu
  • 1 :help w
    otvori pomoć za
    1 w
    pokret

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:
    1 hjkl
    (lijevo, dolje, gore, desno)
  • Riječi:
    1 w
    (sledeća riječ),
    1 b
    (početak riječi),
    1 e
    (kraj riječi)
  • Redovi:
    1 0
    (Početak reda),
    1 ^
    (prvi non-blank karakter),
    1 $
    (kraj reda)
  • Ekran:
    1 H
    (vrh ekrana),
    1 M
    (sredina ekrana),
    1 L
    (dno ekrana)
  • Skrol:
    1 Ctrl-u
    (gore),
    1 Ctrl-d
    (dolje)
  • File:
    1 gg
    (početak fajla),
    1 G
    (kraj fajla)
  • Broj reda:
    1 :{number}<CR>
    or
    1 {number}G
    (line {number})
  • Misc:
    1 %
    (odgovarajući item)
  • Pronađi:
    1 f{character}
    ,
    1 t{character}
    ,
    1 F{character}
    ,
    1 T{character}
    - find/to naprijed/nazad {character} na trenutnoj liniji. -
    1 ,
    /
    1 ;
    za navigaciju sa podudaranjem
  • Pretraga:
    1 /{regex}, n / N
    za navigaciju sa podudaranjem

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.

  • 1 i
    enter Insert mode
    • ali za manipulaciju/brisanje teksta, želite da koristite nešto više od backspace-a.
  • 1 o
    /
    1 O
    ubaci liniju ispod/iznad
  • d{motion} izbriši{pokret}
    • npr.
      1 dw
      je izbriši riječ,
      1 d$
      je izbriši do kraja linije,
      1 d0
      je izbriši do početka linije
  • 1 c{motion}
    promijeni{pokret}
    • npr.
      1 cw
      je promjena riječi
    • kao
      1 d{motion}
      praćen sa
      1 i
  • 1 x
    izbriši karakter (jednako sa
    1 dl
    )
  • 1 s
    zamijeni karakter (jednako sa
    1 xi
    )
  • Visual režim + manipulacija
    • izaberi tekst,
      1 d
      za brisanje ili
      1 c
      za promjenu.
  • 1 u
    za undo,
    1 <C-r>
    za redo
  • 1 y
    za kopiranje/"yank"(neke druge komande kao
    1 d
    takođe kopiraju)
  • 1 p
    za paste
  • Još mnogo stvari za naučiti npr.
    1 ~
    mijenja case karaktera

Brojanje

Možete kombinovati imenice i glagole sa brojanjem, koje će izvršiti zadatu akciju više puta.

  • 1 3w
    pomijera tri riječi naprijed
  • 1 5j
    pomijera pet linija dolje
  • 1 7dw
    briše sedam riječi

Modifikatori

Možete koristiti modifikatore da promijenite značenje riječi. Neki modifikatori su

1 i
, koji znači "unutrašnji", ili
1 a
, koji znači "okolo".

  • 1 ci(
    mijenja sadržaj unutar para zagrada
  • 1 ci[
    mijenja sadržaj unutar uglastih zagrada
  • 1 da'
    briše string sa jednostranim navodnicima, uključujući okružujuće jednostrane navodnike

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
(Sadži Vimscript komande). Vjerovatno da postoji dosta osnovnih podešavanja koje želite da uključite.

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/
, stavite plugine tu (npr. pomoću
1 git clone
).

Evo nekih naših omiljenih plugina:

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
. Ukoliko koristite Zsh,
1 bindkey -v
. Za Fish,
1 fish_vi_key_bindings
. Dodatno, bez obzira koji shell koristite, možete
1 export EDITOR=vim
. Ovo je okruženje varijabli koje se koristi da bi se odlučilo koji editor se otvara kada program hoće da pokrene editor. Na primer,
1 git
će koristiti ovaj editor za commit poruku.

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
fajl:

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
(zamjena) komanda (dokmentacija)

  • 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

  • 1 :sp / :vsp
    da podijeli prozore
  • Može imati više views-a na isti buffer.

Macros

  • 1 q{character}
    za početak snimanja macroa u registru
    1 {character}
  • 1 q
    za prekid snimanja
  • 1 @{character}
    replays macro
  • Macro izvršenje se zaustavlja zbog greške
  • 1 {number}@{character}
    izvršava macro {number} puta
  • Macroi mogu biti rekurzivni
    • Prvo očistite macro sa
      1 q{character}q
    • Snimite macro, sa
      1 @{character}
      da bi pozvali macro rekurzivno
    • 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
          ,
          1 ggdd
          briše prvu i poslednju liniju
        • 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
        • Macro da formatira osobu
          • Ide na liniju
            1 <person>
          • 1 qpS{<ESC>j@eA,<ESC>j@ejS},<ESC>q
        • Macro da formatira osobu i da ide na sledeću osobu
          • Ide na linuju
            1 <person>
          • 1 qq@pjq
        • Izvršava macro do kraja fajla
          • 1 999@q
        • Ručno uklanja poslednje
          1 ,
          i dodaje
          1 [
          i
          1 ]

Resursi

Vježbe

  1. Završite
    1 vimtutor
    . Napomena: Najbolje izgleda na 80x40 (80 kolona sa 24 reda) prozora terminala.
  2. Preuzmite naš basic vimrc i sačuvajte ga u
    1 ~/.vimrc
    . Pročitajte dobro dokumentovane datoteke (koristeći Vim!) i pogledajte kako Vim izgleda i kako se ponaša malo drugačije sa novom konfiguracijom.
  3. Instalirajte i podesite plugin: ctrlp.vim. ⋅⋅1. Kreirajte plugin direktorijum sa
    1 mkdir -p ~/.vim/pack/vendor/start
    ⋅⋅2. Preuzmite plugin:
    1 cd ~/.vim/pack/vendor/start; git clone https://github.com/ctrlpvim/ctrlp.vim
    ⋅⋅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četak
    1 :CtrlP
    . ⋅⋅4. Izmijenite CtrlP dodavanjem konfiguracije u vaš
    1 ~/.vimrc
    da otvorite CtrlP pritiskajući Ctrl-P.
  4. Da bi izvježbali Vim, ponovo odradite Demo iz ove lekcije na vašoj mašini.
  5. 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.
  6. Podesite vaše druge alata da koriste Vim vezivanje (Vidi instrukcije iznad).
  7. Dalje prilagodite vaš
    1 ~/.vimrc
    i instalirajte još plugina.
  8. (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.