На этой неделе я попробовал Visual Studio Code (VSCode), новый редактор от Microsoft, функции которого ориентированы на веб-разработку. Одна из его замечательных особенностей заключается в том, что он предоставляет IntelliSense разработчикам JavaScript, а также является кроссплатформенным — он поддерживает Mac OS X, Linux и Windows.

IntelliSense — одна из тех вещей, которые хорошо работают, если вы изучаете кодовую базу или API и работаете со строго типизированным языком. Поскольку такие языки, как C#, имеют подробные подсказки типов, IntelliSense может предоставить богатый интерфейс завершения, который поможет вам найти нужные объекты и методы. Visual Studio также поддерживает комментарии к коду и упрощает ввод комментариев Microsoft в стиле XML.

Однако JavaScript — это не C#, поэтому VSCode приходится прикладывать дополнительные усилия, чтобы извлекать правильные подсказки типов. Он работает с использованием файлов определений Microsoft TypeScript. Это немного похоже на ctags — у вас фактически есть файл тегов, который сопоставляет имена и значения, чтобы облегчить завершение. Однако штрафы за определения типов пишутся частично вручную, поэтому это не так просто, как ctags.

Если вы считаете, что IntelliSense для JavaScript выглядит круто, вы можете добиться такого же поведения и в Vim. Один из способов сделать это с помощью ctags — вам нужно установить Exuberant Ctags для вашей платформы, а затем вы, вероятно, захотите использовать плагин для автоматической генерации тегов. Я написал Введение в ctags, чтобы вы начали.

Однако, поскольку JavaScript немного неудобен, вы можете пойти дальше, используя генератор тегов, который понимает JavaScript и более современные вещи, такие как модули Node. Плагин vim-nodejs-complete на самом деле прост в установке и даст вам завершение для встроенных модулей Node и модулей в папке ./node_modules вашего текущего проекта. Вот пример, где я вижу все методы объекта process:

Вам просто нужно привыкнуть к использованию универсального ярлыка, который называется C-x C-o.

Также существует проект под названием Tern, представляющий собой движок анализа кода для JavaScript. Он работает как сервер, который подключаемый модуль Vim запрашивает информацию о заданной функции, типе или переменной. Он даже поддерживает переименование переменных — загляните в репозиторий Tern for Vim для получения дополнительной информации.

Существует множество других плагинов Vim и проектов JavaScript, которые могут улучшить работу в Vim, поэтому стоит потратить время на их изучение, чтобы увидеть, что работает для вас.