среда, 6 мая 2009 г.

vim IDE

Каждый современный программист использует IDE.
Например Eclipse или KDevelop.А есть самая лучшая IDE - VIM .

Программирую я на ruby и большей частью проекты связаны с rails.
Расскажу какими плагинами к vim я пользуюсь



Любимая функция gf - по русски go_to_file.
Например наводите курсор на "render :file => 'app/views/test.test.html.erb'" - переходите в коммандный режим и жмете на gf. И вы переместились в файл 'app/views/test.test.html.erb'. Что б переместиться в исходный файл не закрывая текущий - жмем в коммандном режиме :bn. Переместитья закрыв :bd. Важно перед перемещением записать изменения.

При редактировании контроллера хочется перейти во вьюшку - на имени контроллера размещаем курсор и вводим :Rview .Редактируем код вьюшки и хочется часть кода вынести в отдельный файл - например со строки 10 до 25 - :10,25Rextract extracted_file. Автоматом строки уносятся в необходимый нам файл , а на их месте создается <%= render :partial => 'extracted_file'%>
Перемещение в определенную модель :Rmodel modelname
Подобным образом :Rmigration , :Rcontroller, :Rview

И еще отличная возможность автодописывания слов при нажатии на клавиши ctrl+p

Это маленькая частичка функционала - но используемого повседневно.Почитать подробней можно в :help - документации идущей вместе с плагином. Экономятся годы Вашего времени.

Следующий плагин настоящего лентяя Surround.vim .

Surround позволяет легко и удобно работать с тегами. Чем ужасен любой тег ? Тем что с двух сторон практически одно и тоже и набирать болго и cкучно.

Например хочу написать <%= @book.name %> пишем @book.name затем переходим в коммандный режим и жмем yss= .
Все получили <%= @book.name %>

Так же создается <% -%> yss-
Или <% -%>\n<% end -%> yss что по русски будет ctrl+shift+e (т.е. контрол плюс большая Е)


Это теги для рельсов , но есть и для HTML, например yss<b> создаст вокруг строки <b></b>

Что же делать если тег необходим не вокруг строки, а вокруг слова ?
Меняем на ysw<b>
Как можно догадаться s - string, w - word

И последняя из простых операций - замена тега
есть у нас <b>test</b> хотим получить <a>test</a>
Набираем cst<a> и все готово.

За подробностями отправляйтесь читать доки.

Ну и на последок - всегда необходимо знать что за функция и где она определена.
Это позволяем делать программка ctags.

Первым делом необходимо поставить эту программу.
Затем создаем индексный файл
Выполняем в папке проекта
ctags --recurse=yes --exclude=*.swp --exclude=*.js --exclude
Рекурсивно создать индексный файл исключая своп файлы , яваскрипт и файлы git'а
на выходе у нас файлик ./tags
Ставим плагин для вима для работы с файлом тегов ctags.vim

в ~/.vimrc вписываем найденные на просторах интернета строчки

let g:ctags_regenerate = 0
let g:ctags_statusline=1
let generate_tags=1
set tags+=./tags
map [I:let nr = input("Which one: ")exe "normal " . nr ."[\t"


Теперь можно работать.
Выбираем функцию , наводим на нее курсор и жмем g] - либо сразу переходим к месту ее определения либо выскакивает список где определяются одноименные с нашей функции.

И на последок - феноменальная функция вима - :split и :vsplit :)

Для начала вполне хватит.
Получаем экономию ресурсов компьютера и отличную IDE.

1 комментарий:

Дмитрий Франк комментирует...

Для работы с тегами ctags я бы посоветовал плагин Indexer, который (сам или с помощью плагина project) позволяет организовать проекты и прозрачно генерит теги для них. Открыл файл из одного проекта - сгенерились теги для всех файлов из этого проекта; открыл файл из другого проекта - сгенерились теги для всех файлов из другого проекта. Сохранил файл - теги для нужного проекта обновились. Теги из разных проектов не перемешаются, все продумано.