Направете своя Vim по-умен с помощта на Ctrlp и Ctags

Аз абсолютно обичам Vim и използвам Vim за цялото си кодиране и писане от година на година. Въпреки че все повече хора, особено за тези, които работят с JavaScript, предпочитат модерни редактори на кодове като Sublime Text или VSCode, предпочитам да отделя малко време, опитвайки се да направя играчката си по-интелигентна.

CtrlP

Ако сте човек на Sublime Text, Atom или VSCode, трябва да използвате ctrl + pхиляди пъти, за да подобрите производителността. Е, не ревнувайте, ако сте човек на Vim, защото този изискан Vim плъгин CtrlP ще ви даде всичко необходимо.

Проверете този официален документ за инсталиране и настройка.

Ctags

Ctags е инструмент, който ще пресее вашия код, методи за индексиране, класове, променливи и други идентификатори, съхранявайки индекса във файл с тагове. Файлът с тагове съдържа по един таг на ред. В зависимост от аргументите на командния ред и езика, срещу който се изпълняват ctags, от този индекс може да се получи много информация.

Понастоящем Ctags поддържа 41 езика за програмиране и е сравнително лесно да добавите дефиниции за повече.

Ctags улеснява много навигирането в по-голям проект, особено ако кодът, с който работите, е непознат. Ако не сте сигурни какво прави методът или как трябва да бъде извикан, можете да преминете направо към дефиницията му. Ако сте в низходящата спирала на 500+ ред скрипт Perl и искате да знаете къде е била дефинирана променлива преди три часа, можете да се върнете обратно към нея. И след това можете да се върнете обратно там, където сте работили.

Можете да инсталирате Ctags с помощта на Homebrew в OSX:

brew install ctags

Моля, обърнете внимание, че OS X се доставя с изпълним Ctags, но не е буен Ctags и липсва повечето полезни функции. Ако видите грешка като Invalid Parameterпри стартиране ctags, това означава, че системата не използва тази, която сте инсталирали с Homebrew. За да разрешите това:

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

Когато седите в директорията, която искате да индексирате, просто изпълнете:

ctags -R.

Ctags ще се разхождат из директорията рекурсивно, маркирайки всички изходни файлове, които среща. За много големи проекти това може да отнеме известно време, но обикновено е доста бързо.

Може да се нуждаете и от допълнителна конфигурация за Ctags, по-долу е използваното от ~/.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.*

Ето как изглежда да се определи функцията:

Също така можете да използвате Ctrlp за търсене на тагове вместо файлове. За да направите това, първо трябва да картографирате пряк път във вашия .vimrc:

nnoremap . :CtrlPTag

Ето как работи:

Надявам се да помогне :)

Пиша код за аудио и уеб и свиря на китара в YouTube. Ако искате да видите повече неща от мен или да знаете повече за мен, винаги можете да ме намерите в:

Уебсайт:

//haochuan.io/

GitHub:

//github.com/haochuan

Средно:

//medium.com/@haochuan

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