Как сделать из vim ide
Новичок vim и я хочу иметь возможность компилировать код изнутри vim без запуска нового терминала и вызова компилятора.
Как мне это сделать? Обратите внимание, что это требование не ограничивается gcc только, мне иногда нужно вызвать python также текущий скрипт, над которым я работаю, так что вы поняли .
Написать Makefile , тогда вы можете просто:
изнутри vim. И если компиляция не удалась:
покажет вам предупреждение и ошибки. Выбор их приведет вас к соответствующему файлу и строке.
В vim текущий файл может называться % , так что
Смотрите :he cmdline-special (или здесь )
Если по какой-то причине вам не нравятся make-файлы, вы можете вызвать любую команду с помощью:!
Попробуйте плагин quickrun для Vim. На странице есть ссылка на github, который является последней версией и которую я использую.
Преимущество использования этого плагина по сравнению с выполнением :! - вывод команды будет собран и показан в разделенном окне.
Кроме того, по умолчанию этот плагин будет висеть на вашем экземпляре vim, когда вы попросите его выполнить команду, но его можно настроить на асинхронный запуск команды, что я и делаю. Прочитайте документацию для более подробной информации.
Я использую vim, в котором есть скомпилированный интерпретатор Python.
Я исходный файл Python, который имеет эту функцию:
И сопоставьте его с сочетанием клавиш:
Ранее я установил некоторые переменные окружения, чтобы определить точный терминал для запуска, если используется gvim, или в том же терминале, если не в X.
Затем я обычно просто набираю '; ri' в буфере Python для его запуска (обычно для проверки).
Vim может использоваться для компиляции с использованием gnu make для текущего файла - даже если для файла нет Makefile (более подробную информацию смотрите здесь ):
Таким образом, vim предоставляет вам доступ к отзыву об ошибках быстрого исправления из :help quickfix списка compiler ( ) - :cn следующая ошибка, :cp предыдущая ошибка, :cw ошибки списка нового окна.
Если у вас нет gnu make, вы можете установить переменную makeprg (измените на g ++, если вы компилируете C ++):
а затем использовать команду ВИМ грим для компиляции текущего файла и получить QuickFix список ошибок в Vim:
Я вынужден использовать VS2008 для большей части моих проектов на работе, но всякий раз, когда требуется редактирование нечетного текстового файла, я использую VIM.
Теперь я знаю, что есть плагины и еще что-то, что может заставить VIM работать как IDE, поэтому мне интересно, действительно ли кто-то использует его как IDE?
Vim - замечательная часть программного обеспечения, но довольно грязная из-за этого возраста. Vi был выпущен в 1976 году, а Vim был выпущен в 1991 году. Например, Vim предлагает довольно много разных способов сделать завершение текста: от простого ключевого слова до его "omni" системы завершения. Кроме того, некоторые плагины предпочитают работать со встроенной функциональностью, а другие просто заменяют ее оптовой. Надеемся, что следующие предложения помогут вам начать.
IDE с Vim
Вы можете попробовать этот новый патч для Vim, который позволяет использовать Vim внутри Visual Studio в качестве редактора:
Vundle
Во-первых, установите плагин менеджера плагинов Vundle для Vim! Он работает очень хорошо и упрощает управление плагинами Vim. Обрабатывает установку, обновление и удаление.
Например, ваш .vimrc теперь просто содержит:
И команда PluginUpdate установит их или обновит их.
Плагины для Vim-IDE
Следующие скрипты vim дают Vim больше чувства IDE. Имейте в виду, что у Vim есть огромное количество встроенных функций, поэтому у вас есть время, чтобы изучить те (что является постоянным путешествием), прежде чем загружать 20 плагинов.
Навигация:
-
Дерево Nerd - Навигация файловой системы
Command-T - Поиск проекта по имени файла для открытия
CtrlP - альтернатива Command-T, поиск нечеткого файла и буфера
Панель тегов - Навигационная навигация по функциям
Bookmarking - Закладки для vim (мой собственный плагин:))
Завершение текста:
-
delimitMate - Автоматическое закрытие круглых скобок, фигурных скобок и т.д.
tcomment - Легко комментировать/раскомментировать исходные коды команд
Ultisnips - система замечаний Vim
YouCompleteMe - Завершение кода, множество функций
neocomplete - Немного проще завершить код, чем YCM
Лично я считаю, что для завершения кода слишком много, и просто полагайтесь на Vim builtin CTRL-N функцию завершения текста, до вас, но помните CTRL-N ! Встроенная система завершения Vim выходит за рамки этого, с различными режимами завершения, такими как завершение имени файла с помощью CTRL-X CTRL-F или "omni-completion", которое пытается предложить завершение зависимого от типа файла с помощью CTRL-X CTRL-O . Для завершения Omni требуются плагины с файловым типом, поддержка vim-go для Golang.
Форматирование:
-
tabular - легко выравнивать текст
vim-surround - Быстро окружайте некоторый текст (т.е. скобки, теги. )
Просто потрясающе:
-
ALE - Проверка синтаксиса на разных языках, поддерживает Vim 8 новых функций, таких как асинхронные задания, чтобы гарантировать, что он не замерзает Vim во время работы.
fugitive - Git внутри vim, diffs, wame. etc
gitgutter - Live diff от Git исправленной версии файла
YankRing - Легкий доступ к ранее скопированным или удаленным текстовым объектам
Улучшенный графический интерфейс пользователя:
-
Airline - проще читать строку состояния с более полезной информацией
Gundo - Визуализируйте историю отмены vim как дерево (мой любимый, убедитесь, что вы включили постоянную отмену в Vim)
Цветовые схемы:
Распределение Vim
Вместо того, чтобы самостоятельно выполнять настройку и настройку, вы можете использовать следующие проекты, чтобы быстро начать работу с более IDE, например, Vim. Ниже перечислены два проекта, которые включают в себя многие плагины, о которых я упоминал выше:
Я рекомендую вам их не использовать. Вы узнаете гораздо больше, если потратите время на настройку vim самостоятельно и установите плагины в шахматном порядке, чтобы хорошо изучить каждый.
Руководства для плагинов Vim
VimAwesome может быть хорошим местом для просмотра плагинов Vim и поиска полезных и популярных.
Vim Patches
В дополнение к этим сценариям вы можете посмотреть некоторые из следующих патчей для Vim. Я не использовал их так, чтобы не быть уверенным в качестве, но большинство из них выглядят довольно многообещающими. Вы можете просмотреть все патчи здесь, которые делают vim более IDE:
-
Проверка кода - Проверка кода на лету (примечание: Syntastic - лучший выбор в наши дни).
Clewn - Позволяет отлаживать и переходить через код в Vim с помощью GDB.
С этими установленными сценариями и патчами вы должны иметь что-то в Vim довольно близко к функциям Visual Studio или Eclipse.
Довольно часто сталкиваюсь с мнением, что всякого рода “простые” редакторы для разработки не подходят и делать это можно почему-то только в каком-нибудь eclipse или чем-то вроде того и ничего что оно тянет за собой jvm, долго грузится, а на нетбуках так и вовсе без хороших танцев с бубном с этим работать невозможно. Я покажу как можно настроить вим для удобной работы с кодом, что будет интересно его энтузиастам или тем кто использует его из-за политики компании(да, такое внезапно бывает). На самом деле количество фич в нем куда больше, просто все они не влезут в статью, эта представляет собой своего рода продвинутое введение.
Сразу скажу что я использую чистый vim с эмулятором терминала st(потому что у urxvt у меня криво работает font fallback, а обычные эмуляторы терминала потребляют много ресурсов и на фоне этих медленно работают), а не gvim, потому что это дает большие преимущества в плане интеграции с tmux и многое другое. Более того, используется мой собственный форк с небольшой кастомизацией, позже напишу какой, найти его можно вот здесь: st-fork. Любители gui могли бы обратить внимание например вот на такой проект: atom-vim-mode. Он представляет собой интерфейс для взаимодействия редактора Atom который сейчас развивается семимильными шагами и neovim. К сожалению проект сырой, работает не всё, фич мало, но это и то лучше, чем всякие ideavim и тому подобное.
Кто вообще не знает как им пользоваться может обратиться сначала к vimtutor, а потом к :help. В том что касается vim script довольно много dark corners, с ними, если есть желание, лучше разбираться на реальных плагинах, которые лежат на гитхабе. В целом это не самый приятный язык, вот в NeoVim от него пытаются отойти в сторону lua, а для legacy кода на VimL сделать конвертер. Как-нибудь позже про него напишу, он даже почти юзабельный, лично для меня не хватает, пожалуй, полной поддержки биндингов python 2/3(например powerline использовать пока не выйдет) и нормальной поддержки биндингов ruby. Остается надеяться, что это будет решено в будущем. За прогрессом в области поддержки моей любимой powerline можно поглядеть здесь.
Your problem with Vim is that you don’t grok vi. из stackoverflow. Более всего стоит обратить внимание на команды, которые достались vim в наследство от ex(предка vi).
Vimcasts. Сборник скринкастов. Особенно полезны для новичка, потому что видно типичные use-cases и к чему какие хоткеи и команды приводят, удобно.
Также для вима существуют eclim, которые позволяют встраивать vim(точнее gvim) в eclipse. К сожалению его фичи вроде поддержки компилятора gcc для инкрементальной компиляции или возможность настройки для работы с linux kernel для меня не нужны, так что я его не использую, поддержка же динамических языков по сравнению с тем что у меня сделано для vim, оставляет желать лучшего, как и общая скорость работы и уж тем более скорость запуска(привет jvm). Вместо этого можно обратить внимание на hackathon-Embeditor который по идее делает то же самое для intellij idea, но для этого надо быть любителем последней, да и документации и поддержки нет, так что по этой причине он тоже не рассматривается.
~/.vimrc
Вместо единого файла настроек в ~/.vimrc у меня их целый огород, в основном конфиге лишь некоторый стаффчик вроде профилировки и прочего. Итак, что там есть:
Это “стандартные” и полезные установки чтобы все плагины корректно загрузились/установились. И ещё “guard” для “обрезанного” вима чтобы зря не писал много warning’ов и error’ов. К тому же в 21-ом веке нет большого резона использовать что-то кроме utf8.
Полезной функцией является вот эта, которую я нашел, кажется, на slashdot’е:
Здесь написано что если вим всё поддерживает, то добавить функцию для профилировки. Результаты будут записаны в /tmp/vim*profile.txt, их анализ труда не представляет. Это можно использовать когда vim тормозит непонятно почему. С большой долей вероятности первые строчки списков покажут “вредителя”.
Ещё одна забавная штука:
Это инициализация для NeoBundle, а также для powerline(красивая статусная строка, о ней, пожалуй, расскажу отдельно) и fzf, очень удобного, быстрого независимого от vim fuzzyfinder’а для быстрой навигации по файлам вроде того что есть в продуктах jetbrains. Чтобы он(fzf) работал как задумано ещё понадобится tmux, терминальный мультиплексор. Кстати взаимодействие с tmux одна из основных причин почему я использую именно vim, а не gvim.
Поддержа python2 в neovim:
И инициализация NeoBundle:
Плагины
Начну наверно с описания плагинов, потому что без них получить хороший автокомплит и тому подобные плюшки в виме не получится.
В качестве менеджера для плагинов я использую NeoBundle вместо Vundle, в основном потому что он поддерживает кэширование, “ленивую” загрузку плагинов по тригеррам, комментарии после NeoBundle и вообще есть не просит.
Список плагинов у меня такой:
Выглядит внушительно, но на самом деле всё не так страшно как кажется. Только некоторые из них имеют решающее значение, вроде YouCompleteMe, остальные это скорее приятное дополнение вроде файлов для подсветки синтаксиса или чего-то такого от чего я использую примерно одну команду(вроде vim-rename2)
YouCompleteMe
Чудо, произведенное на свет сотрудником google Valloric’ом. Дает быстрый автокомплит прямо во время печати с fuzzy-finding’ом. Выглядит это примерно вот так:
Поддержку omnisharp можно добавить по вкусу. Флаги с префиксом –system говорят о том чтобы он использовал те версии библиотек, которые уже есть в системе, вместо выкачивания своих. Для Arch linux это работает замечательно, в других дистрибутивах это может быть не так(особенно, наверное, вроде debian или mint)
Честно говоря с нахождением нормального работающего конфига под clang у меня в своё время были проблемы, пришлось запиливать его самому на базе образца что был у автора.
Итак, вот фрагмент “классического” примера .ycm_extra_conf.py:
В итоге всё должно полностью работать.
В случае cmake можно использовать
В результате мы получаем автокомплит для этого проекта с учетом всех его опций компиляции, путей и прочего. Как недостаток придется подождать пока это приложение скомпилируется, зато дальше всё работает очень быстро.
Для того чтобы YouCompleteMe всё корректно подхватил нужно положить этот файл в директорию с проектом(чтобы он переопределил тот который в ~/.vim):
Настройки для YouCompleteMe можно посмотреть в файле ~/.vim/03-plugins-config.vim
На мой взгляд интересная особенность это возможность включения и выключения ycm, например это может понадобиться если автокомплит по каким-то причинам сильно тормозит:
Также строки вида
Позволяют загружать конфигуацию только когда плагин уже присутствует, что по идее должно уменьшать интерференциюю между ними и ускорять загрузку.
С помощью этого уже можно неплохо писать код и выполнять навигацию по нему с помощью команд :YcmCompleter, теги для этого не требуются. Но так бывает не всегда так что рассмотрим создание тегов.
Теги gtags > cscope > ctags и навигация по коду
В целом могу сказать что gtags быстрее работают, занимают меньше места и имеют больше фич. В общем мастхэв. Кроме того есть интеграция с cscope системой для тегов. Дело в том что к сожалению поддержка cscope в vim’е прибита гвоздями, так что сделать такую же классную навигацию как для cscope не так-то просто(по крайней мере я такой интеграции не видел), но к счастью есть gtags-cscope, который ведет себя в точности как cscope и вим его нормально воспринимает через те же самые команды, не надо переучиваться.
Прежде всего рекомендую небольшую настройку:
Вот плагины, которые относятся к gtags:
Первый это плагин, который поставляется с gnu global, более-менее свежей версии. Его достоинство в том, что поддерживает практически всё то же, что и сам gtags. gasynctags нужен для асинхронного обновления тегов, в противном случае этот процесс для большого проекта занимал бы довольно много времени. Эту операцию можно выполнять автоматически, а можно забиндить на хоткей:
gtags-cscope-vim-plugin делает хоткеи для gtags такими же как и для cscope, довольно удобно. В случае чего их можно легко поменять. Которые начинаются с Ctrl+@ в моем сетапе вообще особого смысла не имеют, потому что для этого есть drmikehenry/vim-fixkey, он позволяет использовать биндинги gvim в vim.
В общем-то дальше всё как обычно, делаем chdir в проект, потом жмем Space+d и теги создаются. Кстати chdir удобно делать с помощью dbakker/vim-projectroot, он автоматически распознает директории с репозиториями, что удобно(позволяет сразу перейти в проект). Работаем с тегами gnu global как с cscope.
Сниппеты и UltiSnips
Другой популярной возможностью кодерских редакторов является поддержка сниппетов. Они позволяют редактору писать код за вас. Выглядит это чудо приблизительно вот так:
Остальные движки для сниппетов с YouCompleteMe вроде как не совместимы. В качестве тригерра лично мне удобно использовать [Alt]+s :
Динамическая проверка синтаксиса
Теперь когда clang думает что в коде что-то написано неправильно сразу будет видно что и как. Впрочем в случае YouCompleteMe в случае когда в коде допущена ошибка его автокомплит и прочие фичи, по крайней мере большая их часть, работать не будут, пока она не будет исправлена. Что в общем-то довольно удобно.
Также существует довольно обширная поддержка для других языков, но как правило триггером там служит сохранение файла. Что в большинстве случаев не проблема.
Вот как он у меня настроен:
Сборка и компиляциия
Лично мне больше всего по душе вот такие сочетания клавиш:
Вроде ни с чем важным не конфликтуют и нет необходимости тянуться до функциональных клавиш(которых может и не быть). Кроме make можно без особых проблем добавить поддержку любых других сборщиков, например cargo.
В случае если появятся какие-то ошибки они будут показаны в quickfix. Как это работает показано чуть ниже.
Быстрый поиск нужного файла в проекте(и не только)
Есть такая замечательная вещь как fzf, представляет из себя быстрый поисковик по файлам с fuzzy-finding’ом, написанный на ruby. Причем на активацию можно вешать абсолютно любые действия. В том числе и интегрировать его с vim(и tmux). Вот как это выглядит у меня, сначала компиляция с помощью vim+dispatch, потом поиск с помощью fzf:
Если кто-то подскажет как делать более толквые гифки буду благодарен.
Работа с vcs
Правда в последнее время вместо этого я пришел к использованию GV, который мне кажется намного более удобным и минималистичным. Вот то как выглядит его выхлоп:
Это первая из статей, которая посвящена vim’у, в следующей я сделаю обзор плагинов.
Vim-это мощный текстовый редактор, который принадлежит к одному из компонентов по умолчанию в каждом дистрибутиве Linux, а также Mac OS X. Фильм следует своей собственной концепции использования, заставляя сообщество разделиться на сильных сторонников и яростных противников, которые выступают за другие редакторы, такие как Emacs. (Кстати, это очень приятно зимой, когда две восторженные команды вместе играют в снежки).
Vim можно индивидуализировать и расширить с помощью дополнительных плагинов, чтобы приспособить инструмент к вашим конкретным потребностям. В этой статье мы выделим несколько расширений и обсудим полезную настройку для улучшения разработки программного обеспечения с помощью Python.
Автозавершение
Vim уже оснащен функцией автоматического завершения. Это хорошо работает, но ограничивается словами, которые уже существуют в текущем текстовом буфере. В режиме вставки с помощью комбинации клавиш CTRL+N вы получаете следующее слово в текущем буфере и CTRL+P последнее. В любом случае появляется меню со словами, из которого вы выбираете слово, которое будет вставлено в текст в текущей позиции курсора документа.
Это уже довольно круто. К счастью, такая же функция существует для целых строк текста. В режиме вставки сначала нажмите CTRL+X , а затем CTRL+L . Появится меню с аналогичными строками, из которого вы выберете строку, которую хотите вставить в текст в текущем положении курсора документа.
Для эффективной разработки в Python Vim содержит стандартный модуль с именем python complete (Python Omni Completion). Чтобы активировать этот плагин, добавьте следующие две строки в конфигурационный файл Vim .vimrc :
Затем в окне редактора Vim завершение работы выполняется в режиме вставки на основе комбинации клавиш CTRL+X с последующим CTRL+O . Появится подменю, предлагающее вам функции Python и ключевые слова для использования. Пункты меню основаны на описаниях модулей Python (“docstrings”). В приведенном ниже примере показана функция abs() с дополнительной справкой в верхней части экрана редактора vim.
Следующий плагин, который я хотел бы обсудить, называется Jedi-Vim . Он соединяет Vim с библиотекой Jedi autocompletion.
Установив соответствующий пакет в вашу систему Debian GNU/Linux, он нуждается в дополнительном шаге, чтобы заставить Jedi-Vim работать. Плагин должен быть активирован с помощью менеджера плагинов Vim следующим образом:
Далее проверьте состояние плагина:
Теперь плагин активирован, и вы можете использовать его в Vim во время программирования. Как только вы наберете точку или нажмете CTRL+Пробел , меню откроется и покажет вам имена методов и операторов, которые могут подойти. На рисунке ниже показаны соответствующие записи из модуля csv . Как только вы выберете пункт из меню, он будет вставлен в ваш исходный код.
Предоставленная в репозитории Git, установка требует дополнительных шагов для ее использования. Пакет на Debian GNU/Linux поставляется с скомпилированной версией, и после установки пакета через apt-get следующие шаги заставят его работать . Сначала включите пакет с помощью Vim Addon Manager ( vam ) или команды vim-addons :
Далее проверьте состояние плагина. Вывод ниже показывает вам, что плагин успешно установлен для вас как обычного пользователя:
В-третьих, скопируйте значение по умолчанию ycm_extra_conf.py файл из каталога примеров в папку ~/.vim/ следующим образом:
Последний шаг-добавить следующие две строки в файл .vimrc :
Первая строка-это комментарий, который можно опустить, а вторая строка определяет конфигурационный файл для плагина youcompleteme. Et voila – теперь Vim принимает автоматическое завершение кода. Когда вы увидите предлагаемую полезную строку завершения, нажмите клавишу TAB , чтобы принять ее. Это вставляет строку завершения в текущую позицию. Повторные нажатия клавиши TAB циклически повторяют предлагаемые доработки.
Подсветка синтаксиса
Vim уже поставляется с подсветкой синтаксиса для огромного количества языков программирования, включая Python. Есть три плагина , которые помогают улучшить его – один называется python-syntax , другой- python-mode , а третий – python.vim .
Среди прочего на сайте проекта python-syntax перечислено большое количество улучшений, таких как выделение исключений, доктестов, ошибок и констант. Приятной особенностью является переключение между подсветкой синтаксиса для Python 2 и 3 на основе дополнительной команды Vim – :Python2Syntax и :Python3Syntax . Это помогает определить возможные изменения, необходимые для запуска скрипта с обеими версиями.
Объединение Vim с системой контроля версий Git
Контроль версий очень важен для разработчиков, и Git, вероятно, лучшая система для этого. Компилируя код Python, интерпретатор создает ряд временных файлов, таких как __pikachu__ и *.pyc . Изменения этих файлов не нужно отслеживать в Git. Чтобы игнорировать их, Git предлагает функцию так называемого файла .gitignore . Создайте этот файл в своей ветке разработки, управляемой Git, со следующим содержимым:
Кроме того, добавьте файл README для вашего проекта, чтобы задокументировать, о чем он идет. Независимо от того, насколько мал ваш проект, файл README помогает вам (и другим) запомнить, для чего предназначен код. Запись этого файла в формате Markdown особенно полезна, если вы синхронизируете свой код Python с репозиторием на GitHub. Файл README автоматически преобразуется в HTML-код, который можно легко просмотреть в вашем веб-браузере.
Vim может сотрудничать с Git напрямую, используя специальные плагины. Среди прочих есть вим-беглец , гв.вим и уксус . Все они доступны на Github, и в основном в виде пакета для Debian GNU/Linux.
Скачав vim-fugitive через apt-get , он должен быть активирован аналогично тому, как это было сделано ранее с другими плагинами:
Этот плагин работает только с файлами, которые отслеживаются с помощью Git. Становится доступным большое количество дополнительных команд Vim, таких как :Gedit , : Gdiff , : G status , : G grep и :Glog . Как указано на сайте проекта эти команды Vim соответствуют следующим командам и действиям Git:
- :Gedit : Отредактируйте файл в индексе и запишите в него все изменения
- ::Great ( git checkout -- filename ): Загрузить содержимое файла в текущий буфер
- ::Write ( git add ): Добавьте файл в список отслеживаемых в данный момент файлов
- ::Diff ( git diff ): Вызовите поэтапную версию файла бок о бок с рабочей версией дерева и используйте возможности обработки Vim diff для поэтапной обработки подмножества изменений файла.
- ::Move ( git mv ): Переместить файл в новое место
- ::Status ( git status ): Показать текущее состояние вашего каталога Git
- ::Commit ( git commit ): Зафиксируйте ваши изменения
- ::Grep ( git grep ): Поиск заданного шаблона в репозитории Git
- :Glog ( git log ): Загружает все предыдущие версии файла в список quickfix, чтобы вы могли перебирать их и наблюдать за развитием файла!
- ::Blame ( git blame ): Показывает, кто внес последние изменения в файл
Работа Со Скелетами
Скелетные файлы (или шаблоны) – это хорошая функция Vim, которая помогает повысить вашу производительность, добавляя текст по умолчанию в файл при создании нового. Например, во многих файлах Python вы будете иметь a shebang , license, docstring и author info в начале файла. Было бы хлопотно вводить или даже копировать эту информацию в каждый файл. Вместо этого вы можете использовать скелетные файлы для добавления этого текста по умолчанию.
Допустим, например, вы хотите, чтобы все новые файлы Python начинались со следующего текста:
Вы бы создали файл с этим содержимым и назвали его чем-то вроде “skeleton.py”, а затем переместите его в каталог ~/.vim/skeleton.py . Чтобы указать Vim, какой файл следует использовать в качестве скелетного файла для Python, добавьте в свой файл .vimrc следующее:
Это говорит Vim использовать указанный файл скелета для всех новых файлов, соответствующих имени файла “*.py”.
Примечания по использованию плагинов
Обычно Vim работает довольно быстро. Чем больше плагинов вы активируете, тем больше времени это занимает. Запуск Vim задерживается и занимает заметно больше времени, чем раньше. Кроме того, обычно пакеты Debian/Ubuntu работают из коробки, и сценарии установки включают в себя все шаги для правильной настройки плагина. Я заметил, что это не так, и иногда требуются дополнительные шаги.
Больше Ресурсов
Существует ряд курсов и постов в блогах, которые охватывают различные настройки Vim для повседневного использования в качестве разработчика Python, и я бы настоятельно рекомендовал заглянуть туда.
Следующий курс нацелен на то, чтобы вы овладели Vim на любой операционной системе, помогая вам получить уровень знаний и комфортности работы с редактором, которого трудно достичь, читая статьи в одиночку:
Остальные-это некоторые замечательные ресурсы со всего Интернета, которые мы также нашли очень полезными:
Эти статьи помогут расширить ваши знания. Наслаждаться:)
Признание
Автор хотел бы поблагодарить Золеку Хатитонгве за ее помощь и критические замечания при подготовке статьи.
Vim : Редактор для программистов
Введение
Vim, как правило, активно используется программистами. Функциональность, простота использования и гибкость, которые дает Vim, делают его хорошим выбором для людей, которые пишут много кода. Это не должно показаться удивительным, так как написание кода включает в себя много редактирования.
Позвольте мне повторить, что навыки набора текста крайне важны для программиста. Если наши предыдущие обсуждения не убедили вас, надеюсь, статья Jeff Atwood с названием ' We Are Typists First, Programmers Second ' убедит вас.
Если вы не имеете опыта программирования, вы можете пропустить этот раздел.
Те же, кто любит программировать, увидят, как Vim может помочь в написании кода.
Простые вещи
Самая простая возможность в Vim, которую вы можете использовать при написании кода - это использовать подсветку синтаксиса. Это позволяет вам визуализировать, т.е. "видеть" ваш код, подсветка помогает вам в быстром чтении и написании вашего кода, а также помогает избежать очевидных ошибок.
Подсветка синтаксиса
Предположим вы редактируете файл синтаксиса Vim, запустите :set filetype=vim и посмотрите как Vim добавит цвета. Аналогично, если вы редактируете файл на Python, запустите :set filetype=python .
Для просмотра списка доступных типов языков, загляните в каталог $VIMRUNTIME/syntax/ .
На заметку: Если вы хотите включить подсветку синтаксиса для любого вывода Unix оболочки, просто перенаправьте вывод через канал в Vim, например, так: svn diff | vim -R - . Обратите внимание на тире в конце, которое говорит Vim, что он должен читать текст со стандартного ввода.
Умные отступы
Код опытного программиста, как правило, написан с правильным отступом, что делает код информативным и структура кода более очевидна. Vim может помочь в создании отступов, чтобы вы могли сосредоточиться на реальном коде.
Если вы отступаете до определенной линии и хотите, чтобы следующие строки были с таким же отступом, то вы можете использовать установку :set autoindent .
Если вы начинаете новый блок операторов и хотите, чтобы последующие строки автоматически шли с отступом еще на один уровень, то вы можете использовать :set smartindent . Обратите внимание, что поведение этого параметра зависит от использования конкретного языка программирования.
Скачки
Если язык программирования, который вы выбрали, использует фигурные скобки для разграничения блоков операторов, поместите курсор на одну из фигурных скобок и нажмите клавишу % для перехода на парную фигурную скобку. Этот ключ позволяет вам быстро переключаться между началом и концом блока.
Команды оболочки
Вы можете запустить команды оболочки из Vim, используя команду ' :! '.
Например, если команда date доступна в вашей операционной системе, запустите :!date и вы увидите строку с текущей датой и временем.
Это удобно в ситуации, когда вы хотите проверить что-то в вашей файловой системе, например, быстро узнать, какие файлы находятся в текущем каталоге :!ls или :!dir, и так далее.
Если вы хотите получить доступ ко всем возможностям оболочки, запустите :sh .
Мы можем использовать эти объекты для запуска внешних фильтров для редактируемого текста. Например, если вы имеете набор строк, которые вы хотите отсортировать, вы можете запустить :%!sort , эта команда передаст текущий текст команде sort в оболочке и затем вывод команды заменит текущее содержание файла.
Переходы
Есть много способов перемещаться по коду.
• Разместите ваш курсор на имени файла в коде и затем нажмите gf для открытия файла.
• Разместите ваш курсор на имени переменной и нажмите gd для перехода к локальному определению имени переменной. gD производит то же для глобального объявления, производя поиск с начала файла.
• Смотри :help 29.3, :help 29.4, и :help 29.5 по использованию команд. Например, [ I покаж ет все строки, содержащие ключевое слово под курсором!
Просмотр части кода
Файловая система
Используйте :Vex или :Sex для просмотра файловой системы в Vim и последующего открытия нужных файлов.
ctags
Мы видели, как производить простые действия в пределах одного файла, но что, если мы хотим перемещаться между различными файлами и иметь перекрестные ссылки между файлами? Тогда мы можем использовать вкладки для достижения этой цели.
Например, для просмотра файла мы можем использовать плагин taglist.vim .
1. Установим программу Exuberant ctags .
2. Установим плагин taglist.vim . Подробное описание установки — на странице скрипта.
3. Запустите :TlistToggle для открытия окна taglist. Класно, теперь вы можете просматривать части вашей программы, такие как макросы, определения типов, переменных и функций.
4. Вы можете использовать :tag foo для перехода к определению foo.
Taglist в действии.
5. Разместите ваш курсор на любом символе и нажмите ctrl-] для перехода к определению символа.
• Нажмите ctrl-t для возврата к предыдущему коду, который вы читали.
6. Используйте ctrl-w ] для перехода к определению символа в разделенном окне.
7. Используйте :tnext , :tprev , :tfirst , :tlast для движения между соответствующими тегами.
Обратите внимание, что Ctags богат поддержкой 33 языков программирования (на момент написания статьи) и может быть легко расширен на другие языки.
Смотри :help taglist-intro для подробной информации.
cscope
Для того, чтобы иметь возможность переходить к определениям в файлах, нам необходимо иметь такую программу как cscope. Однако, как следует из названия, эта конкретная программа работает только с программами на языке программирования Си.
1. Установите cscope. Обзор установки в :help cscope-info и :help cscope-win32 .
2. Скопируйте cscope_maps.vim в ваш каталог ~/.vim/plugin/ .
3. Перейдите в ваш каталог исходных кодов и запустите cscope -R -b для построения ('b'uild) рекурсивной ('r'ecursively) базы данных для всех подкаталогов.
4. Перезапустите Vim и откройте файл с исходным кодом.
5. Запустите :cscope show для подтверждения того, что cscope соединение создано.
6. Запустите :cscope find symbol foo для поиска символа foo. Вы можете сократить эту команду до :cs f s foo .
Вы также можете:
• Найти это определение - :cs f g
• Найти функции, вызываемые этой функцией - :cs f d
• Найти функции, вызовающие эту функцию - :cs f c
• Найти эту строку текста - :cs f t
• Найти этот шаблон egrep - :cs f e
Рис. cscope в действии
Предложения по использованию cscope в Vim вы найдете, запустив :help cscope-suggestions.
Также стоит установить плагин Source Code Obedience , он обеспечивает использование удобных сочетаний клавиш в плагинах cscope/ctags.
Если говорить о языке программирования Си, может быть довольно удобен плагин c.vim .
Компилирование
Мы уже видели в предыдущей главе описание :make для программ, которые мы пишем, поэтому мы не будем повторяться.
Легкое написание
Omnicompletion
Одной из наиболее востребованных функций, которая была добавлена в Vim 7, является "omnicompletion", когда текст может быть автоматически завершен в зависимости от текущего контекста. Например, если вы используете длинное имя переменной, причем используете это имя неоднократно, вы можете задать сочетание клавиш в Vim для автодополнения, и Vim будет вводить оставшуюся часть.
Vim решает эту задачу с помощью ftplugins, в частности по имени ftplugin/ complete.vim, например, pythoncomplete.vim.
Давайте запустим пример с простой программой на Python:
После ввода этой программы создайте новую строку в этом файле, наберите ' he ' и нажмите ctrl-x ctrl-o. Вам будут показаны варианты автозавершения.
Omni-completion в действии
Если вы получите ошибку E764: Option 'omnifunc' is not set , запустите :runtime! autoload/pythoncomplete.vim для загрузки плагина omnicompletion.
Чтобы не делать это каждый раз, вы можете добавить следующую строку в ваш ~/.vimrc :
autocmd FileType python runtime! autoload/pythoncomplete.vim
Vim автоматически использует первый вариант автодополнения, вы можете перейти к следующему или предыдущему с помощью ctrl-n и ctrl-p соответственно.
Если вы хотите оборвать использование omnicompletion, просто нажмите esc .
Изучите :help new-omni-completion для подробной информации о поддерживаемых языках (C, HTML, JavaScript, PHP, Python, Ruby, SQL, XML, . ) а также о том, как создавать свои собственные сценарии omnicompletion.
Примечание: Если вам больше нравится использовать кнопки со стрелками для выбора в списке omnicompletion, смотри Vim Tip 1228 как их подключить.
Я предпочитаю использовать просто ctrl-space вместо громоздкой комбинации ctrl-x ctrl-o . Для реализации этого, вставьте строку в ваш vimrc:
И еще, плагин PySmell может помочь тем пользователям Vim, которые программируют на Python.
Использование фрагментов
Фрагменты кода - это небольшие кусочки кода, которые, как правило, повторяются постоянно. Как и все хорошие ленивые программисты, вы можете использовать плагин, который поможет вам их вставлять. В нашем случае мы используем потрясающий плагин SnippetsEmu.
2. Создайте ваш каталог ~/.vim/after/ , если он еще не существует.
3. Запустите Vim, вставив имя этого плагина в командную строку. Например, запустите Vim как gvim snippy_bundles.vba
4. Запустите :source % . Тем самым 'vimball' будет распакован и большое количество файлов будет сохранено в соответствующие каталоги.
5. Повторите то же для snippy_plugin.vba
Теперь, давайте научимся использовать этот плагин.
1. Откройте новый файл, скажем test.py .
2. Нажмите клавиши d , e , f и затем .
3. Ура! Смотрите, как snippetsEmu создает структуру вашей функции. Вы должны увидеть в вашем файле следующее:
Примечание: В случае, если вы видите def и ничего больше, то, возможно, плагин фрагментов не загружен. Запустите :runtime! ftplugin/python_snippets.vim и посмотрите, поможет ли это.
4. Ваш курсор теперь находиться на имени функции, т.е. fname .
5. Наберите имя функции, скажем, test .
6. Нажмите и курсор автоматически перейдет к аргументам. Нажмите Tab снова для перехода к заполнению следующего пункта.
7. Теперь введите комментарий: Скажем Hi (привет)
8. Нажмите Tab снова и введите ' Hello World '
10. Ваша программа готова!
Теперь вы должны увидеть вот это:
Самое приятное то, что SnippetsEmu создает стандартное форматирование, которому нужно следовать, и что ничего в команде не будет "забыто".
Создание фрагментов
Давайте посмотрим, как создать свой собственный фрагмент.
Рассмотрим пример. Предположим, что мне нужно часто писать следующий код в ActionScript3:
Это простая комбинации получения/установки с использованием переменной. Проблема в том, что очень много такого шаблонного кода приходиться писать неоднократно. Давайте посмотрим, как автоматизировать это.
Плагин фрагментов языка SnippetsEmu ассоциирует st как начальный тег и et как закрывающий тег - это направляющие символы, между которыми мы вводим наш код.
Давайте начнем с простого примера.
exec "Snippet pubfun public function ".st.et.":".st.et." < ".st.et." >"
Добавьте эту строку в ваш ~/.vim/after/ftplugin/actionscript_snippets.vim .
Теперь откройте новый файл, скажем, test.as, наберите pubfun, нажмите и смотрите как это расширяется:
Курсор будет помещен на имени функции, нажмите tab чтобы войти в возвращаемый тип функции, введите tab снова для ввода тела функции.
Возвращаясь к нашей исходной задачи, вот что я придумал:
Примечание: Все фрагменты для этого плагина должны быть введены в одной строке. Это техническое ограничение.
Выполните следующие действия, чтобы можно было использовать новый фрагмент:
1. Добавьте эту строку в ваш ~/.vim/after/ftplugin/actionscript_snippets.vim .
2. Откройте новый файл test.as.
3. Наберите getset и нажмите и вы должны увидеть следующее:
4. Наберите color и нажмите . Обратите внимание, что переменная с именем color везде заменяется.
5. Наберите Number и нажмите . Ваш код теперь должен выглядеть так:
Посмотрите как в несколько нажатий клавиш мы получили результат! Мы заменили около 11 строк повторяющегося кода одной строкой сценария Vim.
Мы можем продолжать добавлять такие фрагменты для упрощения процесса кодирования, что поможет нам сконцентрироваться на реальной работе в программировании.
Смотри :help snippets_emu.txt для подробной информации (данный файл помощи будет доступен только после инсталляции плагина).
Vim может использоваться в качестве IDE с помощью нескольких плагинов.
Плагин Project
Плагин Project используется для создания Project-менеджера, используемого в Vim.
1. Скачайте плагин project .
2. Разархивируйте его в ваш каталог ~/.vim/ .
3. Запустите :helptags ~/.vim/doc/.
5. Запустите :Project . Слева откроется боковая панель, которая будет работать как 'project window'.
6. Запустите \\c (обратный слэш и ' c ')
7. Дайте ответы на следующие параметры
• введите имя (Name), скажем 'vim7_src'
• каталог (Directory), скажем C:\\repo\\vim7\\src\\
• опции CD, аналогично как у каталога выше
• Опции фильтрации (Filter), скажем *.h *.c
8. Вы увидите, что боковая панель заполняется списком файлов, которые соответствуют фильтру в указанном каталоге.
9. Используйте клавиши со стрелками или клавиши j/k для перемещения вверх и вниз по списку файлов, а нажатие клавиши E nter откроет файл в главном окне.
Это дает вам знакомый интерфейс в стиле IDE, и хорошо, что нет придуманных файлов конфигурации или задания путей установки, как в интегрированных средах разработки, которые обычно всегда имеют проблемы. Функциональность плагина Project проста и прямолинейна.
Вы можете использовать стандартные команды для открытия и закрытия проектов и их частей.
Вы также можете запускать скрипты в начале и в конце использования проекта, это поможет вам установить переменную PATH или набор опций компиляции и так далее.
Смотрите :help project.txt для подробной информации.
Запуск кода из текста
Вы можете запустить код прямо из Vim с помощью плагинов, таких как EvalSelection.vim или простые плагины, такие как inc-python.vim .
Интеграция SCM
Если вы начнете редактировать файл, вы можете сделать автоматическую проверку из Perforce с помощью плагина perforce . Аналогично, есть плагины для интеграции с CVS/SVN/SVK/Git .
Для обзора остальных плагинов, созданных для реализации IDE в Vim, см.:
Есть много плагинов, созданных для конкретных языков программирования, которые могут помочь вам изящно работать. Например, для Python могут быть полезны следующие плагины:
• SuperTab позволяет вам вызывать завершения, просто нажав tab , а затем использовать клавиши со стрелками для выбора опции.
• python_calltips показывает окно в нижней части, в котором дается список возможных завершений. Удобная особенность по сравнению с обычным завершением состоит в том, что вы можете посмотреть в документации информацию по каждому из вариантов.
• VimPdb поможет вам отладить программы на Python в Vim.
Создание своих плагинов
Вы можете написать свои плагины для расширения возможностей Vim. Например, вот задача которую вы можете сделать:
Написать плагин для Vim, который берет текущее слово и открывает браузер с документацией для этого конкретного слова (слово может быть именем функции или именем класса, и так далее).
Я расширил пособие и сделал его более общим:
Доступ к базам данных
Вы можете даже работать с 10 различными базами данных: Oracle, MySQL, PostgreSQL, Sybase, SQLite, и всё из Vim, с помощью плагина dbext.vim . Самое приятное то, что этот плагин поможет вам редактировать SQL, написанный в PHP, Perl, Java и т.д. И вы даже можете напрямую выполнять SQL запрос, даже если он встроен в другой язык программирования, и вас даже спросят о значении переменных.
Итоги
Мы изучили, как Vim можно использовать в программировании с помощью различных плагинов и установок. Если вам нужно больше, вы можете написать свои плагины для Vim (как мы уже видели в главе Scripting).
Хорошим источником дискуссий по теме будет Stack Overflow и блог Peteris Krumins's .
Читайте также: