Pull to refresh

Vim для программиста

Reading time2 min
Views15K
Любимый многими редактор Vim не является IDE. Однако в нём реализовано много замечательных возможностей, облегчающих работу с кодом.

Обычно цикл работы с кодом сводится к поправить код-скомпилировать-поправить код-скомпилировать-… В Vim есть средства, заточенные специально под этот процесс. Выглядит это так:

:make вызывает компилятор с нужными параметрами, после окончания компиляции вы можете прыгать по ошибкам в исходниках (если таковые были найдены).
:cc переходит к месту текущей ошибки, :cc [nr] переходит к ошибке номер [nr].
:cnext и :cprevious переходят соответственно к следующему и предыдущему месту ошибки.
:clist показывает список ошибок. Однако список ошибок неудобно постоянно вызывать командой :clist, к тому же, по этому списку нельзя искать (что иногда бывает полезно, особенно когда список большой). Поэтому есть альтернативный способ прыгать по ошибкам — открыть окно (да, в Vim есть окна, :help windows если что) со списком ошибок.
:copen открывает это самое окно. Это обычное окошко, в нём работают все команды перемещения, поиска и т.д. Отличие только в том, что изначально текст в нём помечен как неизменяемый, чтобы вы случайно его не искукожили. При нажатии Enter на строке с ошибкой откроется исходник и курсор спозиционируется на строку, в которой эта ошибка собственно была найдена.
:cclose, как вы уже наверное догадались, окошко это закрывает.

Команды эти сильно облегчают жизнь, но набирать их лень. Поэтому можно в файле .vimrc назначить им какие-нибудь кнопочки. Например вот кусок моего .vimrc:
" build mappings
map <F7> :wall \| make<Cr>
map <F4> :cn<Cr>zvzz:cc<Cr>
map <S-F4> :cp<Cr>zvzz:cc<Cr>


<F7> сохраняет все файлы и выполняет команду :make.
<F4> это уже не просто :cnext, а немножко магии. :cn<Cr> переходит к следующей ошибке. zv разворачивает fold (об этом в следующий раз если интересно), zz позиционирует текущую строку в центр экрана, а :cc<Cr> нужен для того, чтобы внизу показать сообщение об ошибке, которое к этому времени пропадёт. С Shift+F4 всё аналогично.

Чтобы всё это работало, вы настраиваете Vim под свой компилятор. (Компилятор в данном случае это понятие условное, это может быть как настоящий компилятор, так и интерпретатор, запускаемый с ключами «проверить код на ошибки» или например tidy, который отвалидирует вам HTML.) Делается это командой :compiler. :compiler без параметров выдаст вам список поддерживаемых «компиляторов», а :compiler foo включит поддержку компилятора foo. Поддержка эта включается банально выполнением скрипта compiler/foo.vim (скрипт ищется в 'runtimepath'). Сам же скрипт выставляет несколько опций Vim, из которых наиболее интересны нам две:

'makeprg' — программа, которая будет выполняться, когда вы дадите Vim команду :make. Для gcc например это будет make, для perl — perl -Wc % и т.д.
'errorformat' — специального вида строка, объясняющая Vimу, как парсить сообщения об ошибках, которые вывалит компилятор.
Так что если поддержки вашего компилятора нет в комплекте Vim и на www.vim.org в разделе Scripts, можно написать её самому.

То, что я тут понаписывал, это самые основы, для того, чтобы можно было оценить возможности. Подробнее читать в :help quickfix. Там вы узнаете в частности о том, что подобно :make можно использовать команду :grep чтобы искать подстроку в файлах и перемещаться по найденным строкам, а так же много других интересных вещей :)

Happy Vimming!
Tags:
Hubs:
Total votes 20: ↑16 and ↓4+12
Comments46

Articles