Učinite Vima pametnijim pomoću Ctrlp i Ctagova

Ja apsolutno volim Vima i koristim ga za svo kodiranje i pisanje iz godine u godinu. Iako sve više ljudi, posebno onima koji rade s JavaScriptom, preferira moderne uređivače koda poput Sublime Text ili VSCode, radije bih proveo malo vremena pokušavajući svoju igračku učiniti inteligentnijom.

CtrlP

Ako ste tip s uzvišenim tekstom, atomom ili VSCodeom, morate ctrl + ptisuće puta poboljšati produktivnost. Pa, nemojte biti ljubomorni ako ste Vim momak jer će vam ovaj fensi Vim dodatak CtrlP pružiti sve što trebate.

Provjerite ovaj službeni dokument za instalaciju i postavljanje.

Ctagovi

Ctags je alat koji će pregledati vaš kôd, metode indeksiranja, klase, varijable i druge identifikatore, spremajući indeks u datoteku oznaka. Datoteka oznaka sadrži po jednu oznaku po retku. Ovisno o argumentima naredbenog retka i jeziku s kojim se pokreću ctagovi, iz ovog indeksa može se dobiti puno informacija.

Ctags trenutno podržava 41 programski jezik, a relativno je lako dodati definicije za više.

Ctags olakšava kretanje većim projektom, osobito ako vam je kod s kojim radite nepoznat. Ako niste sigurni što metoda radi ili kako bi se trebala zvati, možete prijeći izravno na njezinu definiciju. Ako ste u silaznoj spirali 500+ redaka Perl skripte i želite znati gdje je varijabla definirana prije tri sata, možete se vratiti na nju. A nakon toga možete se odmah vratiti tamo gdje ste radili.

Oznake možete instalirati koristeći Homebrew u OSX-u:

brew install ctags

Imajte na umu da OS X dolazi s izvršnom datotekom Ctags, ali nije bujan-Ctags i nedostaje joj većina korisnih značajki. Ako vidite pogrešku poput Invalid Parameterpokretanja ctags, to znači da sustav ne koristi onaj koji ste instalirali s Homebrewom. Da biste to riješili:

$ alias ctags="`brew --prefix`/bin/ctags"

Kad sjedite u direktoriju koji želite indeksirati, samo pokrenite:

ctags -R.

Ctagovi će rekurzivno hodati kroz direktorij, označavajući sve izvorne datoteke s kojima se susreće. Za vrlo velike projekte to bi moglo potrajati, ali obično je prilično brzo.

Možda će vam trebati i dodatna konfiguracija za Ctagove, u nastavku navodim ~/.ctags:

--langmap=javascript:.js.es6.es.jsx--javascript-kinds=-c-f-m-p-v
--regex-javascript=/^[ \t]*(var|let|const)[ \t]+([A-Za-z0-9_$]+)[ \t]*=[ \t]*\[/\2/A,Array,Arrays/
--regex-javascript=/^[ \t]*(var|let|const)[ \t]+([A-Z][A-Za-z0-9_$]+)[ \t]*=[ \t]*function/\2/C,Class,Classes/--regex-javascript=/^[ \t]*class[ \t]+([A-Za-z0-9_$]+)/\1/C,Class,Classes/
--regex-javascript=/^[ \t]*export[ \t]?({[ \t]*)*([A-Za-z0-9_\*]*[ \t]as[ \t])([A-Za-z0-9_]+)/\3/E,Export,Exports/--regex-javascript=/^[ \t]*export[ \t]?({[ \t]*)*([A-Za-z0-9_\*]*[ \t]as[ \t])*([A-Za-z0-9_]+),[ \t]*([A-Za-z0-9_\*]*[ \t]as[ \t])([A-Za-z0-9_]+)/\5/E,export,Exports/--regex-javascript=/^[ \t]*export[ \t]?({[ \t]*)*([A-Za-z0-9_\*]*[ \t]as[ \t])*([A-Za-z0-9_]+),[ \t]*([A-Za-z0-9_\*]*[ \t]as[ \t])*([A-Za-z0-9_]+),[ \t]*([A-Za-z0-9_\*]*[ \t]as[ \t])([A-Za-z0-9_]+)/\7/E,Export,Exports/--regex-javascript=/^[ \t]*export[ \t]?(var|let|const)[ \t]+([A_Za-z0-9_$]+)/\2/E,Export,Exports/--regex-javascript=/^[ \t]*export[ \t]?(var|let|const)[ \t]+([A_Za-z0-9_$]+)[ \t]*[^,]+,[ \t]*([A_Za-z0-9_$]+)/\3/E,Export,Exports/--regex-javascript=/^[ \t]*export[ \t]?(var|let|const)[ \t]+([A_Za-z0-9_$]+)[ \t]*[^,]+,[ \t]*([A_Za-z0-9_$]+)[ \t]*[^,]+,[ \t]*([A_Za-z0-9_$]+)/\4/E,Export,Exports/
--regex-javascript=/^[ \t]*function[ \t]*([A-Za-z0-9_$]+)[ \t\(]/\1/F,Function,Functions/--regex-javascript=/^[ \t]*[\(]function[ \t]*([A-Za-z0-9_$]+)[ \t\(]/\1/F,Function,Functions/--regex-javascript=/^[ \t]*(var|let|const)[ \t]+([a-z][A-Za-z0-9_$]+)[ \t]*=[ \t]*function[^\*][^\*]/\2/F,Function,Functions/--regex-javascript=/^[ \t]*(var|let|const)[ \t]+([a-z][A-Za-z0-9_$]+)[ \t]*=[ \t]*\([^\*]/\2/F,Function,Functions/
--regex-javascript=/^[ \t]*function[ \t]*\*[ \t]*([A-Za-z0-9_$]+)/\1/G,Generator,Generators/--regex-javascript=/^[ \t]*(var|let|const)[ \t]+([a-z][A-Za-z0-9_$]+)[ \t]*=[ \t]*function([ \t]*\*)/\2/G,Generator,Genrators/--regex-javascript=/^[ \t]*(\*[ \t])([A-Za-z0-9_$]+)[ \t]*\(.*\)[ \t]*{/\2/G,Generator,Generators/
--regex-javascript=/^[ \t]*import[ \t]?({[ \t]*)*([A-Za-z0-9_\*]*[ \t]as[ \t])([A-Za-z0-9_]+)/\3/I,Import,Imports/--regex-javascript=/^[ \t]*import[ \t]?({[ \t]*)*([A-Za-z0-9_\*]*[ \t]as[ \t])*([A-Za-z0-9_]+),[ \t]*([A-Za-z0-9_\*]*[ \t]as[ \t])([A-Za-z0-9_]+)/\5/I,Import,Imports/--regex-javascript=/^[ \t]*import[ \t]?({[ \t]*)*([A-Za-z0-9_\*]*[ \t]as[ \t])*([A-Za-z0-9_]+),[ \t]*([A-Za-z0-9_\*]*[ \t]as[ \t])*([A-Za-z0-9_]+),[ \t]*([A-Za-z0-9_\*]*[ \t]as[ \t])([A-Za-z0-9_]+)/\7/I,Import,Imports/
--regex-javascript=/^[ \t]*this\.([A-Za-z0-9_$]+)[ \t]*=.*{$/\1/M,Method,Methods/--regex-javascript=/^[ \t]*([A-Za-z0-9_$]+)[ \t]*[:=][ \t]*[\(]*function[ \t]*\(/\1/M,Method,Methods/--regex-javascript=/^[ \t]*static[ \t]+([A-Za-z0-9_$]+)[ \t]*\(/\1/M,Method,Methods/--regex-javascript=/^[ \t]*([A-Za-z0-9_$]+)\(.*\)[ \t]*{/\1/M,Method,Methods/
--regex-javascript=/^[ \t]*(this\.)*([A-Za-z0-9_$]+)[ \t]*[:=].*[,;]*[^{]$/\2/P,Property,Properties/
--regex-javascript=/^[ \t]*(var|let|const)[ \t]+([A-Za-z0-9_$]+)[ \t]*=[ \t]*{/\2/O,Object,Objects/
--regex-javascript=/\/\/[ \t]*(FIXME|TODO|BUG|NOBUG|\?\?\?|\!\!\!|HACK|XXX)[ \t]*\:*(.*)/\1/T,Tag,Tags/
--regex-javascript=/^[ \t]*(var|let|const)[ \t]+([A-Za-z0-9_$]+)[ \t]*=[ \t]*[^\[{]*;$/\2/V,Variable,Variables/
--exclude=min--exclude=vendor--exclude=\*.min.\*--exclude=\*.map--exclude=\*.swp--exclude=\*.bak--exclude=tags--exclude=node_modules--exclude=bower_components--exclude=test--exclude=__test__--exclude=build--exclude=dist--exclude=*.bundle.*

Evo kako to izgleda kao da ćemo definirati funkciju:

Također možete koristiti Ctrlp za pretraživanje oznaka umjesto datoteka. Da biste to učinili, prvo morate mapirati prečac u .vimrc:

nnoremap . :CtrlPTag

Evo kako to funkcionira:

Nadam se da pomaže :)

Pišem kod za audio i web i sviram gitaru na YouTubeu. Ako želite vidjeti više stvari od mene ili znati više o meni, uvijek me možete pronaći u:

Web stranica:

//haochuan.io/

GitHub:

//github.com/haochuan

Srednji:

//medium.com/@haochuan

YouTube: //www.youtube.com/channel/UCNESazgvF_NtDAOJrJMNw0g