Padarykite savo „Vim“ protingesnį naudodami „Ctrlp“ ir „Ctags“

Aš labai myliu „Vim“ ir naudoju „Vim“ visiems savo kodams ir rašymui kiekvienais metais. Nors daugiau žmonių, ypač tiems, kurie dirba su „JavaScript“, teikia pirmenybę šiuolaikiniams kodų redaktoriams, tokiems kaip „Sublime Text“ ar „VSCode“, verčiau praleisti šiek tiek laiko, kad žaislas taptų protingesnis.

„CtrlP“

Jei esate „Sublime Text“, „Atom“ ar „VSCode“ vaikinas, turite naudoti ctrl + ptūkstančius kartų, kad pagerintumėte produktyvumą. Na, nepavydėkite, jei esate „Vim“ vaikinas, nes šis įmantrus „Vim“ papildinys „CtrlP“ suteiks jums viską, ko jums reikia.

Patikrinkite šį oficialų dokumentą, kaip įdiegti ir nustatyti.

„Ctags“

„Ctags“ yra įrankis, kuris persiųs jūsų kodą, indeksavimo metodus, klases, kintamuosius ir kitus identifikatorius, išsaugodamas indeksą žymos faile. Žymų faile yra viena žyma vienoje eilutėje. Priklausomai nuo komandinės eilutės argumentų ir kalbos, su kuria susiduria ctags, iš šio indekso galima gauti daug informacijos.

Šiuo metu „Ctags“ palaiko 41 programavimo kalbą ir palyginti lengva pridėti apibrėžimus.

„Ctags“ leidžia daug lengviau naršyti didesniame projekte, ypač jei kodas, su kuriuo dirbate, yra nepažįstamas. Jei nesate tikri, ką daro metodas arba kaip jis turėtų būti vadinamas, galite pereiti tiesiai prie jo apibrėžimo. Jei esate „500“ eilutės „Perl“ scenarijaus žemyn spirale ir norite sužinoti, kur kintamasis buvo apibrėžtas prieš tris valandas, galite iškart pereiti prie jo. Vėliau galite pereiti atgal ten, kur dirbote.

„Ctags“ galite įdiegti naudodami „Homebrew“ OSX:

brew install ctags

Atkreipkite dėmesį, kad „OS X“ yra su vykdomuoju „Ctags“, tačiau jis nėra gausus „Ctags“ ir trūksta daugumos naudingų funkcijų. Jei matote klaidą, pvz., Invalid ParameterKai paleidžiate ctags, tai reiškia, kad sistema nenaudoja tos, kurią įdiegėte su „Homebrew“. Norėdami tai išspręsti:

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

Kai sėdite kataloge, kurį norite indeksuoti, tiesiog paleiskite:

ctags -R.

Ctags eis per katalogą rekursyviai, pažymėdamas visus šaltinio failus, su kuriais jis susiduria. Labai dideliems projektams tai gali užtrukti, tačiau paprastai tai vyksta gana greitai.

Jums taip pat gali prireikti papildomos konfigūracijos „Ctags“, žemiau yra „ ~/.ctagsAš naudoju“:

--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.*

Štai kaip atrodo funkcijos apibrėžimas:

Taip pat galite naudoti „Ctrlp“, kad ieškotumėte žymių, o ne failų. Norėdami tai padaryti, pirmiausia turite susieti nuorodą .vimrc:

nnoremap . :CtrlPTag

Štai kaip tai veikia:

Tikiuosi, kad tai padės :)

Rašau garso ir interneto kodą, groju gitara „YouTube“. Jei norite pamatyti daugiau mano daiktų ar sužinoti daugiau apie mane, visada galite mane rasti:

Interneto svetainė:

//haochuan.io/

„GitHub“:

//github.com/haochuan

Vidutinis:

//medium.com/@haochuan

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