VIM

индекс
158,91

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

Любимый многими редактор 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 и на http://www.vim.org в разделе Scripts, можно написать её самому.

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

Happy Vimming!
+12
2 июля 2008, 16:11
24

комментарии (46)

+2
nailll #
Блог VIM по-тихоньку накапливает полезные материалы - это хорошо!

От себя добавлю ссылку на отличную подборку цветовых настроек (syntax highlighting) для Vim: http://www.cs.cmu.edu/~maverick/VimColor…
По ссылке есть темы для языков C, Perl, Java, HTML и LaTeX
+1
pento #
Рекомендую Colors Sampler Pack
http://www.vim.org/scripts/script.php?script_id=625
0
g00d #
А я балдео от ВИМа, все мои знакомые в ИДЕ сидели, а я в ВИМе мог все =), было супер. В ВИМе насколько я помню есть даже плагин IRC клиента )).
Помню когда преподавал, решил обучить людей немножко им пользоваться... Приятно для людей открывать мир, особенно набором сочетаний клавиш. "Для сохранения файла, нажмите Ескей Шифт двоеточие дубль В интер" и вот эту фразу я повторял раз за разом =)))))) ой насмеялися мы тогда.

Но все изменилось когда я увидел TextMate =))
0
borodatyj #
ссылку на:

1.консольный TextMate
2.TextMate для Unix

))
0
g00d #
1. врядли
2. Unix === MacOSX =)))
0
borodatyj #
вот именно поэтому Texmate не конкурент виму.
0
zhovner #
"дабл Ю" намного мелодичнее чем "дубль ВЭ"
+2
mastd #
Неплохая подборка статей о vim http://openclue.org/tag/vim/, особенно, всем кто пишет на python, стоит обратить внимание на вот эту статью - "Python with a modular IDE (Vim)".
0
pento #
Vim + Python (на русском)
http://allaboutvim.blogspot.com/2007/12/vim-python.html
0
runnig #
кто-нить дебажит в виме, а?
0
mastd #
дебажит, что вас конкретно интересует, я дебажу C и Python.
0
pento #
А как дебажишь питон, если не секрет?
0
mastd #
Я пользуюсь способом описанным в подборке статей, ссылку на которую давал выше. Вы коментели. :)
0
Paul #
А С как? Clewn?
0
mastd #
Ага ага. :)
0
runnig #
мне нужно то же самое, но нет времени читать-настраивать все. если просто, то пожалуйста, ткни носом где написано?
0
mastd #
про то, как скрестить vim и pdb написано тут http://openclue.org/tag/vim/,
для С использую Clewn, http://clewn.sourceforge.net/.
0
dekko #
Спасибо за интересные статьи, час начал изучать vim. Не могли бы вы рассказать с азов, например, как сделать folding, как самому настраивать подсветку синтаксиса, автоматическая генерация классов по шаблону и автоподстановка, если есть.
+1
mastd #
отвечу про фолдинг кратко, дальше в :help folding. Чтобы сделать "складку" :), нужно перейти в визуальный режим (V), выделить кусок текста, который хотите свернуть, и нажать zf. Чтобы развернуть свернутое нужно передвинуть курсор на закладку и нажать zc. Это не самый удобный способ фолдинга, тема слишком обширна для комента, в хелпе все рассписано подробно. :)
0
dekko #
Спасибо, а то долго мучился, раскрыть то раскрыл, а как свернуть... :)
0
Paul #
Я немножко дополню предыдущий комментарий.

zc это свернуть, развернуть zo :) zR развернуть все фолды в буффере, zM свернуть всё-всё-всё. Ну и ещё, 'foldmethod' можно выставить либо в indent либо в syntax, Vim сам свернёт по своему усмотрению. Остальное таки в :help folding
0
mastd #
Про автоматическую генерацию классов еще, не могу не попиарить один из любимых плагинов snippetsEmu :)
Кому то в комментах к предыдущим статьям уже советовал.. отказались, может быть вам кстати придется. http://tinyurl.com/cm4nm :)
0
pento #
Мини-статья :)
http://allaboutvim.blogspot.com/2007/08/c-snippetsemu.html
0
Paul #
Подсветка синтаксиса кстати должна работать из коробки, главное создать в домашнем каталоге файл .vimrc, пусть даже пустой, иначе Vim работает в так называемом compatible mode (режим максимальной похожести на vi), в котором отключено всё, что только можно. А лучше взять файл vimrc_example.vim, скопировать его в свой домашний .vimrc и дальше уже пилить.

Про автоподстановку читать :help :abbreviate.
0
dmrt #
Скажите пожалуйста как прикрутить файл .vim (с подсветкой для perl) к .vimrc или как это делается???
0
Paul #
Поддержка perl есть в стандартной поставке. Если она не работает, сделайте следующее:
1. Убедитесь, что у вас установлен Vim runtime (в Vim :echo $VIMRUNTIME и посмотрите, не пустая ли это директория).
2. Проверьте, что в $VIMRUNTIME есть файлы ftplugin/perl.vim, indent/perl.vim и syntax/perl.vim
3. Добавьте в свой .vimrc строчки
filetype plugin indent on
syntax on

4. Если не заработает, прийдется читать help. :help :syntax, :help :filetype. Если заработает, можно всё равно почитать :help perl.vim, там всякие тонкие настройки.
0
dmrt #
У меня свой файл с настройками blacklight.vim, куда его положить и как подключить лучше?
0
dmrt #
0
pento #
Скопируй в ~/.vim/colors/
А в ~/.vimrc добавь colorscheme blacklight
0
Paul #
Это обычная цветовая схема, положите в каталог colors в любом из каталогов из 'runtimepath'. Под Win лучше сложить в %HOME%\vimfiles\colors\blacklight.vim, под *NIX — $HOME/.vim/colors/blacklight.vim
После этого либо руками в Vim :colo blacklight, либо в .vimrc прописать только без двоеточия вначале.
0
dmrt #
нет мне интересно просто уже, сделал все как в других color, другие подключаются, а этот нет.
0
dmrt #
вобщем на последнем посту к вим неправильная подсветка, некоторые работают, но не так как нарисовано
0
Paul #
Не очень понятно в чем ошибка.
1. Что говорит Vim если в нем набрать :colo blacklight ?
2. Наберите :set runtimepath? — проверьте, что директория colors в которую вы положили blacklight.vim является дочерней одной из директорий 'runtimepath'.
0
dmrt #
текст выводится просто серым, а другие подсветки из поста, рисуются совершенно другими цветами, не такими которые в примерах
0
Paul #
Возможно терминал поддерживает только 16 цветов, а цветовая схема расчитана на терминал, поддерживающий хотя бы 256.

Только что проверил — у меня в gVim всё красиво, а вот в Vim консольном полная ахинея (у меня Win).
0
dmrt #
Возможно, да! Я использую putty, там в настройках правда написано "позволять 256 цветов"! Во всяком случае спасибо!
0
Paul #
Наберите в Vim set t_Co? узнаете, сколько цветов поддерживается.
0
dmrt #
действительно t_Co=8, значит никак?
0
Paul #
Я, честно говоря, не специалист в никсовых терминалах, ничего не подскажу. Может кто-то другой, читающий тему, поможет.

Как вариант, можете подправить тему, подобрав наиболее близкие цвета. Но конечно такой же мягкой и приятной, как на скриншоте она врядли останется.
0
Paul #
Наткнулся вот на совет, посмотрите, может чего-то полезного накопаете. Ну и See also внизу тоже гляньте.
0
dmrt #
Ну да, действительно, сенкс, но вроде как для терминала 16- это максимум.
0
Paul #
Я добился того, что в терминале 256 цветов — поставил в PuTTY Connection->Data->Terminal type string значение xterm-256color вместо xterm (проверяю вот этим). Но в Vim всё равно только 16 цветов, копаю дальше...
0
Paul #
О, вроде заборол. Надо было просто выкинуть из .vimrc строки, что я посоветовал в предыдущем комментарии и руками поставить :set t_Co=256, Vim упорно детектит 8. Но теперь всё красиво.
0
dmrt #
ага, действительно, заработало, круто, моя любимая цветовая схема http://www.cs.cmu.edu/~maverick/VimColor…
0
CelesteKing #
Скажи честно, в чём причемущество вима над netbeans для C++ разработки ?
0
Paul #
Говорю честно, netbeansом не пользовался, поэтому на вопрос ответить не могу.

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.