На днях пересматривал довольно старое выступление по Vim чувака по имени Maxin Cardamom, где он рассказывал, как можно обойтись без некоторых самых распространённых плагинов и ничего себе не сломать. Доклад оказался очень интересным и некоторые вещи у меня закрепились и теперь я их использую на практике. Видео доклада будет ниже, а в статье я опишу, чем из советов я воспользовался и как мои волосы стали мягкие и шелковистые после этого.
Тем, кто знает английский рекомендуемую посмотреть самим этот видос, а потом сравнить свои ощущения и открытия с моими, всем остальным добро пожаловать.
Итак, что это за хитрости.
Простая замена FZF или быстро находим файлы по неполному названию.
Самые распространённые плагины, которые делают тоже самое - это ctrlp.vim и fzf.vim. Они хорошо работают, но остановиться на них я так и не смог, просто вбивал :e file_name.txt
или визуально искал в NERDTree, если файл был достаточно глубоко запрятан.
Оказалось что можно довольно легко искать файлы, даже очень глубоко запрятанные.
Добавляем в ~/.vimrc строчки:
" для поиска во всех подкаталогах
set path+=**
" при нажатии Tab в командном режиме для авто дополнения варианты будут отображаться в меню, а не появляться по-одному.
set wildmenu
Теперь, если заново открыть Вим в папке с нужным проектом, набрать команду :find my_fi
и нажать (где “my_fi” - это часть имени нужного файла) Tab, то будет показано меню с вариантами того, что можно открыть. Клавишей Tab и Shift-Tab можно перемещаться по этому меню. Если нажать Enter, откроется выбранный файл.
Можно сделать ещё проще, если мы знаем, что имя файла уникально, то набрав :find my_fi
нажимаем Enter и сразу попадаем в нужный файл.
Точно так же и с буферами. Раньше, чтобы открыть нужный буфер, я смотрел список всех открытых буферов командой :ls
и запоминал номер нужного буфера, а затем переходил к этому нужному буферу :b5
, где 5 - это нужный буфер. Опять-таки оказалось, что можно воспользоваться командой :b my_fi
и нажать Tab, опять отобразиться меню с вариантами. Если вместо таба нажать Enter, откроется нужный буфер, если другие не содержат этих же символов.
Ищем объявление функции или переменной. Ctags.
Уже давно IDE позволяют переходить к местам, где определена та или иная функция или переменная. В Vim для разных языков это сделано плагинами этих языков. По работе я много работаю с terraform и пользуюсь разными модулями, написанными в соседних командах. К сожалению, Vim да и другие редакторы не умеют корректно переходить на определения ресурсов, поэтому, засучив рукава, можно это поправить.
На помощь нам придёт утилита ctags, она есть во всех дистрибутивах Linux и в brew для MacOs.
Изначально Ctags поддерживает C-подобные языки и немного дополнительно, но terraform - нет. Не проблема, ведь можно настроить ctags под любой язык. Для terraform у меня такой конфиг:
--recurse
--exclude=.git
--langdef=terraform
--langmap=terraform:.tf.tfvars
--regex-terraform=/^[[:space:]]*resource[[:space:]]*"([^"]*)"[[:space:]]*"([^"]*)"/\2/r,Resource/
--regex-terraform=/^data[[:space:]]*"([^"]*)"[[:space:]]*"([^"]*)"/\2/d,Data/
--regex-terraform=/^[[:space:]]*variable[[:space:]]*"([^"]*)"/\1/v,Variable/
--regex-terraform=/^[[:space:]]*provider[[:space:]]*"([^"]*)"/\1/p,Provider/
--regex-terraform=/^[[:space:]]*module[[:space:]]*"([^"]*)"/\1/m,Module/
--regex-terraform=/^[[:space:]]*output[[:space:]]*"([^"]*)"/\1/o,Output/
--regex-terraform=/^([a-z0-9_]+)[[:space:]]*=/\1/f,TFVar/
Теперь заходим в папку с нашим проектом и выполняем команду ctags . -R
. В папке будет создан файл tags, в нём соответственно, будут прописаны все метки.
Теперь открываем Vim, подводим курсор к одному ресурсу или переменной, нажимаем Ctrl-] и перемещаемся в место объявления ресурса. Чтобы прыгнуть обратно нажимаем Ctrl-t. Теперь моя работа с terraform стала на много удобнее и быстрее.
Более подробно почитать про работу с метками в Vim можно по ссылке.
Остальное, что я не использовал.
Авто заполнение.
Я использую YouCompleteMe плагин, который подсказывает по мере набирания текста. Я ленивый и не хочу нажимать дополнительные клавиши для вызова авто заполнения.
Навигатор по папкам и файлам.
Предпочитаю пользоваться NERDTree потому что позволяет показать на файловой системе открытый сейчас файл.
Сниппеты.
Не прижились.
Использование утилиты сборки.
В Vim никогда не применял команду :make
и пока об этом не пожалел. Может потому, что нету одного языка, на котором пишу. Мне гораздо проще вызывать и фильтровать эти команды в терминале.
Короче.
Очень рекомендую к просмотру это выступление, оно помогает узнать или освежить в памяти очень часто нужные вещи. Ещё вот ссылка на слайды выступления.