Зробіть Vim розумнішим, використовуючи Ctrlp та Ctags

Я абсолютно люблю Vim, і я використовую Vim для всіх своїх програм кодування та написання з року в рік. Хоча дедалі більше людей, особливо для тих, хто працює з JavaScript, віддають перевагу сучасним редакторам коду, таким як Sublime Text або VSCode, я волію витратити трохи часу, намагаючись зробити свою іграшку більш розумною.

CtrlP

Якщо ви хлопець із піднесеним текстом, атомом або VSCode, ви повинні використовувати ctrl + pтисячі разів для підвищення продуктивності. Ну, не заздріть, якщо ви хлопець з Vim, адже цей вишуканий плагін Vim CtrlP дасть вам все, що вам потрібно.

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

Ctags

Ctags - це інструмент, який пробирає ваш код, методи індексації, класи, змінні та інші ідентифікатори, зберігаючи індекс у файлі тегів. Файл тегів містить по одному тегу на рядок. Залежно від аргументів командного рядка та запущеної мови ctags, з цього індексу можна отримати багато інформації.

В даний час Ctags підтримує 41 мову програмування, і порівняно легко додати визначення для більшої кількості.

Ctags значно полегшує орієнтацію у великому проекті, особливо якщо код, з яким ви працюєте, незнайомий. Якщо ви не впевнені, що робить метод або як його слід називати, ви можете перейти до його визначення. Якщо ви знаходитесь у низхідній спіралі сценарію Perl на 500+ рядків і хочете знати, де змінна була визначена три години тому, ви можете повернутися до неї. А згодом ви можете повернутися назад туди, де працювали.

Ви можете встановити 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