Intermediar VimScript

În tutorial Configurația de bază Vim, V-am arătat elementele de bază ale configurației a sevă editor. Acum este timpul să aflați mai multe. VimScript este un limbaj de programare complet cu care puteți crea orice tip de program de automatizare de care aveți nevoie. Acest tutorial va aduce cunoștințele dvs. la nivelul următor cu un creator de structuri de director de proiect, explorând Autocommands, și o privire la Maximum-Awesome extensie pentru MacVim.

Autocommands

Autocommands sunt comenzi pentru a avea sevă efectuați o acțiune atunci când se aplică o anumită condiție: crearea unui fișier nou, scrierea unui fișier și așa mai departe.

Este o modalitate foarte bună de a automatiza o parte din munca pe care trebuie să o faceți într-un proiect. De exemplu, atunci când salvați a SASS fișier, an autocommand poate compila la normal CSS Pentru dumneavoastră.

Formatul pentru un autocommand este:

autocmd    

Unde este acțiunea editorului pe care comanda ar trebui să o aștepte. De asemenea, puteți specifica mai multe acțiuni simultan, separându-le cu o virgulă.

Cu 86 posibil să-ți pun cârlig, nu-i voi descrie pe toți aici. Pentru a vedea lista completă, puteți să tastați : ajutor autocmd-evenimente-abc. Aceasta deschide un tampon diferit cu lista completă. Pentru programul demonstrativ, voi folosi BufNewFile acțiune pentru a rula funcția pentru a verifica și pentru a crea o structură folder director de proiect.

este o expresie regulată pentru numele fișierului la acțiune.

este comanda reală în VimScript pentru a executa atunci când se întâmplă că se potrivește cu . Trebuie să înceapă cu un colon, :, așa cum ați vedea în linia de stare a editorului.

Din moment ce fac o mulțime de dezvoltare site-uri web, funcția de helper va crea structura de proiect necesară pentru un nou site Web. De aceea autocommand trebuie să declanșeze HTML crearea de fișiere. Formatul necesar este:

funcţie! CreateProject (fișier) echo "Salvare" a: fișier endfunc autocmd BufNewFile * .html: apelați CreateProject (expand ('%: p')) 

Funcția pentru proiect este doar scheletul. Pe măsură ce progresează tutorialul, voi adăuga mai mult la această funcție.

Cu asta în .vimrc fișier, veți vedea numele fișierului reluat la bara de stare atunci când deschideți o nouă HTML fișier într-un buffer. Puteți face acest lucru folosind :nou comanda pentru a crea un tampon nou cu numele de fișier dat sau când deschideți sevă cu un nume de fișier pe linia de comandă.

extinde ( '%: p') macro dă calea completă la noul fișier când autocommand declanșează. În felul acesta, funcția CreateProject va primi numele fișierului și directorul său.

Acest lucru funcționează bine pentru deschiderea și închiderea pur și simplu sevă fără a reîncărca vreodată fișierul de configurare. Uneori, totuși, veți dori să modificați fișierul de configurare și să îl reîncărcați fără a ieși. sevă va efectua apoi autocmd de mai multe ori pe tampon nou. Asta ar putea provoca o mizerie.

Trebuie, prin urmare, să puneți autocmd la un an augroup pentru Autocomand Group. Apoi, eliminați grupul înainte de a adăuga o nouă comandă. autocmd line devine:

augroup CreateProiect autocmd! autocmd BufNewFile * .html: apelați CreateProject (expand ('%: p')) augroup END 

autocmd! spune sevă să uităm ce a mai fost în acest grup înainte. Utilizați acest bloc în loc de autocmd line în ultima listare. Aceasta este o bună practică atunci când scrieți autocmds.

Cu scriptul creat până în prezent încărcat în sevă, redeschide sevă cu această linie de comandă: vim test.html. Imaginea de mai sus este ceea ce veți obține. Acesta va da calea noului fișier. Dacă faceți același lucru, dar cu un fișier care există deja, nu veți primi această solicitare în linia de jos.

Structuri de date

VimScript are mai mult decât variabile. De asemenea, puteți utiliza liste. O listă este o grupare de obiect la o variabilă. Lista este excelentă pentru păstrarea informațiilor aferente. În cazul creării unei structuri de fișiere, vor exista două liste: lista de directoare create și o listă de fișiere de creat.

Specificați o listă cu []. De aceea, creați două liste precum:

dați fișierele = ["/ js / base.js", "/ css /", "/ css / base.css "," /doc/help.html "] 

Aceasta creează două liste: una numită dirs și celelalte "dosare". Dacă doriți să inspectați ce este într-o listă, o puteți face referire la un index. Tine minte, VimScript are indexarea bazată pe zero. Pentru a obține primul element, trebuie să folosiți indexul de zero. Odată ce acest lucru este în dvs. .vimrc fișier și îl reîncărcați, îi puteți vedea cu următorul text:

: fisiere ecou [0] 

Acest lucru va ecou "/js/base.js" la linia de stare. De asemenea, puteți să indicați valorile începând de la cea mai mare valoare dreaptă cu un indice negativ. Prin urmare,

: fișiere ecou [-2] 

va reda "/css/base.css" linia de stare. Puteți obține chiar și un subgrup de elemente precum:

: fișiere ecou [1: 2] 

Aceasta va provoca șirul ['/css/base.css', '/doc/help.html'] pentru a afișa în linia de stare. Un sub-set de set este încă un set!

Am avut cele două definiții de listă în afara funcției doar pentru scop demonstrativ. Cel mai bine este să nu creați variabile în global (adică: în afara unei funcții). Având o mulțime de variabile globale face domeniul de aplicare globală aglomerat. Se poate, de asemenea, conflict cu alte scripturi de pe drum.

Controlul debitului programului

Pentru a procesa fiecare element din liste, voi folosi a pentru-structura buclă. A pentru-buclă execută în mod repetat codul închis până când se întâmplă o condiție. Pentru a trece peste fiecare articol din listă, codul devine următorul:

funcţie! CreateProject (fișier) permite fișierele = ["/ js / base.js", "/ js / final", "/ css", "/ css / "/coc/base.css", "/doc/help.html"] pentru dir în dirs endfor pentru nume în fișiere endforc endccd autocmd BufNewFile * .html: apelați CreateProject (expand ('%: p')) 

Cele două liste se află acum în interiorul funcției și două pentru buclele se repetă prin fiecare listă. Rețineți că există o nouă variabilă înainte de în declarație și lista după în afirmație. Noua variabilă dobândește fiecare element din matrice în mod secvențial.

Există o altă structură în buclă VimScript numit in timp ce-buclă. Forma de bază este:

indice index = 0 în timp ce index < len(dirs) echo l:dirs[index] l:index += 1 endwhile 

Acest cod bifează fiecare element din dirs afișați-l și expediați-l la linia de stare. Observați noua variabilă index. Această variabilă a fost utilizată pentru a urmări numărul de ori dispărut în buclă și pentru a obține în mod succesiv fiecare element din listă. Pentru a lucra cu liste, pentru-bucla este mai eficientă.

Finalizarea funcției

Cu structurile de date și buclele în loc, voi termina acum codul. Restul codului arată astfel:

funcţie! CreateProject (fișier) permite fișierele = ["/ js / base.js", "/ js / final", "/ css", "/ css / "/css/base.css", "/doc/help.html"] permite părinte = fnamemodify (a: fișier, ": p: h") pentru dir în dirs letd newdir = l: parent. dir if! isdirectory (l: newdir) apelați mkdir (l: newdir) endif endfor pentru nume în fișiere lăsați newfile = l: părinte. numele fișierului de fișiere (newfile) sistem de apel ("atingeți" l: newfile) endif endfor endfunc autocmd BufNewFile * .html: apelați CreateProject (expand ('%: p') 

Am adăugat o nouă variabilă mamă care este structura directorului părinte al fișierului dat funcției. Comanda fnamemodify vă permite să extrageți diferite părți ale unei căi între platforme. Puteți citi mai multe despre el folosind sevă sistem de ajutor: : ajutor fnamemodify (). Observați, pentru a face referire la fişier variabila a trecut la funcția pe care am avut-o să o cuprindă cu A:. A: domeniul de aplicare se referă la Arguments.

În fiecare buclă, am creat o variabilă care concatează directorul părinte cu noul director sau nume de fișier. Apoi verific pentru existența lor și le creez dacă nu există. Pentru a verifica existența, isDirectory () verificarea funcțiilor pentru director și filereadable () verifică existența dosarului. Eu folosesc a ! pentru a anula valoarea returnată din funcții. Pentru a crea directoare, apelați mkdir () comanda. Pentru a crea fișiere goale, trebuie să utilizați comanda sistemului atingere.

De asemenea, observați în interiorul fiecărei buclă și dacă declarația am avut la domeniul de aplicare variabilele care sunt în domeniile superioare cu L: domeniul de aplicare. L: domeniul de aplicare se referă oriunde în definiția funcției. Domeniile inferioare nu moștenesc automat domeniile superioare! Asta mă prinde tot timpul.

Maximum-Awesome

Acum, că veți intra în greu cu sevă, Maximum-Awesome este un pachet de configurare care încarcă mai multe setări implicite și pachete mari pentru utilizare sevă pe Mac. Este Ruby on Rails centric, dar este util pentru orice tip de programare.

Deschideți programul termial într-un director pe care doriți să îl instalați. Apoi tastați aceste comenzi:

git clone https://github.com/square/maximum-awesome.git cd maxim-minunat rake 

Când se termină, deschideți-o sevă din nou și veți vedea un mediu de lucru frumos.

Există o mulțime de pachete interesante în această configurație. Distrează-te explorând!

Concluzie

Acum, că știți cum să creați scripturi de automatizare pentru a vă ajuta fluxul de lucru, continuați și experimentați cu alte funcții utile.

Când personalizați a sevă mediu, veți umple mai mult controlul și veți putea face mai mult. Amintiți-vă, practicarea a ceea ce învățați este singura modalitate de a vă îmbunătăți și a vă aminti. Deci, mergeți mai departe și exersați-vă să creați propriile dvs. scripturi de automatizare VimScript!