Если вы новичок в Vim, обязательно прочитайте мое введение, так как оно поможет подготовить вас к этой статье. Здесь я сосредоточусь на использовании Vim для эффективной разработки Rails.
Rails Plugin
Тим Поуп написал очень полезный плагин Vim под названием [Rails.vim] [1], который предоставляет множество отличных функций, включая улучшенную подсветку синтаксиса, частичное извлечение и более простую навигацию в проекте Rails.
Установка с использованием Vundle
Как мы видели в предыдущем уроке , любой плагин очень легко установить с помощью Vundle. Просто добавьте следующую строку в call vundle#begin()
и call vundle#end()
:
Plugin 'tpope/vim-rails'
После этого введите :PluginInstall
, нажмите Enter, и Vundle сделает все остальное. Перезапустите Vim, и Rails.vim будет готов к использованию. На самом деле URL плагина — https://github.com/tpope/vim-rails
но, как мы видели в предыдущем уроке, нам не нужно добавлять URL Github, потому что Vundle добавит его автоматически, так как он использует Github по умолчанию. для плагинов источников.
Все команды в Rails.vim имеют пространство имен под буквой R
Таким образом, чтобы получить доступ к любой из команд при просмотре любого .rb, .erb, ..etc
Rails ( .rb, .erb, ..etc
), введите :R
и дважды нажмите tab, чтобы просмотреть их список. Вы можете просмотреть документацию, набрав :help Rails
Переходы с помощью gf
Из правила есть исключение, что каждая команда Rails.vim начинается с буквы :R
, которая является gf
(сокращение от Go to File). Поведение Vim по умолчанию при вводе gf
с курсором на имени файла — открыть этот файл. Однако при использовании Rails.vim это поведение изменяется, поэтому, если вы введете gf
для любого идентификатора, вы попадете в файл, где он указан. Например, при вводе gf
с курсором, расположенным на слове «компания», Vim приведет вас к модели компании:
has_one :company
Кроме того, если вы попробуете это на любом методе, Vim также перенесет вас в файл, где определен метод, даже если это встроенный метод Rails. Просмотрите файл маршрутов, нажмите gf
для любого идентификатора, и вы увидите, что Vim теперь понимает, где он определен.
get "home", to: "pages#home", as: "home"
Если курсор находится home
, Vim перенесет вас в PagesController
и поместит курсор на home
действие внутри него. Это также работает с частичными именованными маршрутами и многими другими идентификаторами Rails.
НОТА:
1. Чтобы это работало, обязательно откройте Vim из директории проекта Rails.
2- Чтобы вернуться к предыдущему файлу, нажмитеCTRL + o
в командном режиме.
3- Чтобы перейти вперед в посещаемых файлах, нажмитеCTRL+ i
.
4- Чтобы просмотреть список посещенных файлов, нажмите:jumps
.
Навигация в файлах проекта
Rails.vim позволяет легко перемещаться по различным файлам проекта, таким как models
, view
или controllers
. Вы можете легко перейти к любому из них, а также к определенной строке или методу. Позвольте мне объяснить, как это сделать.
Навигационная команда | Значение |
---|---|
Rcontroller | Перейти к соответствующему контроллеру, как если бы вы находились в файле модели и хотите перейти к его контроллеру. |
Rmodel | Перейти к модели |
Rview | Просто добавьте название вида (индекс, показать, редактировать), чтобы перейти к соответствующему виду. |
Runittest | Перейти к соответствующему модульному тесту. |
Rfunctionaltest | Перейти к соответствующему тесту. |
Rintegrationtest | Перейти к указанному интеграционному тесту, спецификации интеграции или функции огурца. |
Rspec | Перейти к данной спецификации. |
Rmigration | Используйте вкладку «Завершение», чтобы выбрать одну из доступных миграций и перейти к одной из них. |
Rschema | Перейти к схеме проекта. |
Rmailer | Перейти к данному почтовику. |
Rhelper | Перейти к данному помощнику. |
Rjavascript | Перейти к данному файлу JavaScript или CoffeScript. |
Rstylesheet | Перейти к данной таблице стилей. |
Rtask | Перейти к заданию. |
Rlib | Перейти к данной библиотеке, если аргументы не указаны, она переходит к Gemfile. |
Rlayout | Перейти к макету текущего контроллера. |
НОТА:
Вы можете указать контроллер, модель, вид или тестовый файл, который хотите открыть, введя его имя. Кроме того, Vim обеспечивает завершение вкладки при вводе имен файлов.
Открытые файлы в разделенных окнах
Если вы хотите открыть файл в разделенном окне, просто введите :RV
вместо :R
и элемент, который вы хотите открыть (модель, вид, контроллер и т. Д.). Это откроет файл в вертикальном разделении. Если вы хотите горизонтальное разделение, используйте :RS
Открытые файлы в новых вкладках
Вы можете открыть любой файл Rails в новом окне, просто используя :RT
вместо :R
Открытые файлы в текущем буфере
Вы можете открыть любой файл в текущем буфере (что означает добавление его содержимого к текущей позиции курсора в текущем файле), используя :RD
.
Запуск тестов
Зачем выходить из текстового редактора только для запуска тестов? Rails.vim дает вам возможность запускать тесты прямо из редактора, просто набрав :Rake
. Вы также можете запускать подмножества тестов, таких как функциональные тесты, модульные тесты, интеграционные тесты, функции Cucumber, спецификации RSpec.
Генерация миграций
Зачем оставлять Vim для запуска миграции? Просто введите :Rgenerate migration add_something_to_tablename
. Это не только сгенерирует миграцию, но и приведет вас к файлу, который действительно полезен и экономит время.
Инвертирование миграции
Что, если вы хотите инвертировать миграцию, используйте :Rinvert
.
Запуск, перезагрузка и уничтожение сервера
- Вы можете запустить серверный процесс из Vim, используя
:Rserver
. - Вы можете остановить существующий процесс и запустить новый (перезапустить сервер) с помощью
:Rserver!
, - Вы можете убить работающий сервер с помощью
:Rserver!-
.
Просмотр текущего соответствующего пути
Если вы хотите открыть правильный URL-адрес для текущего файла, например app/controllers/companies_controller.rb
, введите :Rpreview
. Откроется «/ companies», если сервер работает.
НОТА:
Эта команда является контекстно-зависимой, поэтому, если вы ееindex
действииindex
CompaniesController
, она приведет вас к соответствующему маршруту/companies/index
Частичное извлечение
Плагин Rails.vim предлагает очень удобную функцию, называемую частичное извлечение. Немного утомительно извлечь часть ERB
в частичную, потому что это включает в себя такие шаги, как вырезание некоторого текста, создание нового файла с именем, начинающимся с _
, и вставка этого текста, а затем рефакторинг исходного представления для включения частичной. Почему бы не позволить Виму справиться с этим в простой команде.
Если это ваш файл, в app/views/user/show.html.erb
:
20 <div> 21 <h2><%= @user.name %></h2> 22 <p><%= @user.email %></p> 23 </div>
И вы выполните эту команду:
:21,22Rextract profile
Ваш файл изменяется на это:
20 <div> 21 <%= render 'profile' %> 22 </div>
Будет создан новый файл с соответствующим кодом в соответствующем пути. app/views/user/_profile.html.erb
теперь содержит:
1 <h2><%= @user.name %></h2> 2 <p><%= @user.email %></p>
Команда Rextract
будет вести себя по-разному в зависимости от файла, в котором она выпущена. Если вы находитесь в представлении, он извлечет код в частичное. Если вы находитесь в помощнике, он создаст помощника с извлеченным кодом. Если вы находитесь в модели или контроллере, это создаст новую проблему с извлеченным кодом.
SnipMate
SnipMate — очень полезный плагин для управления фрагментами кода. Это экономит много времени при написании кода, и вы будете использовать его ярлыки для создания больших фрагментов кода. SnipMate также поддерживает другие языки, такие как JavaScript и HTML.
Установка
Используя Vundle, просто добавьте следующую строку в call vundle#begin()
и call vundle#end()
:
Plugin 'garbas/vim-snipmate'
Вызовите :PluginInstall
и перезапустите Vim.
Ruby Snippets
Теперь вы можете использовать фрагменты. Откройте файл контроллера, введите def
, а затем нажмите клавишу табуляции. Vim вставит блок def end
, выделит имя метода и войдет в режим вставки. После ввода имени метода снова нажмите клавишу табуляции, и курсор переместится в определение метода. Довольно полезно, верно?
Есть много других полезных фрагментов, таких как:
Блок кода | кратчайший путь |
---|---|
если конец блока | если |
если еще конец блока | Ифе |
Каждый блок | еа |
Каждый с индексом | eawi |
карта | карта |
Collect | седло |
Выбрать | сель |
сканирование | SCA |
Учебный класс | CLA |
Чтобы просмотреть полный список доступных фрагментов Ruby, откройте файл ~/.vim/snippets/ruby.snippets
.
Вы также можете добавить свои собственные фрагменты в этот файл, просто следуйте формату. Давайте возьмем фрагмент if end
в качестве примера:
snippet if if ${1:condition} ${2} end
Слово if
после snippet
— это имя фрагмента. Следующая строка — это сам фрагмент. ${1
— это первое место, куда будет помещен курсор, и слово «условие» будет выделено и готово к замене. ${2}
— это следующая позиция курсора после нажатия пользователем клавиши табуляции. Я рекомендую вам добавить свои собственные фрагменты для повышения эффективности редактирования.
CTags
Еще один полезный инструмент — Exuberant Ctags. Это позволяет вам легко перемещаться по исходному коду вашего проекта. Он индексирует объекты исходного кода по тегам, что позволяет редактору легко найти любой объект исходного кода и перейти к его определению.
Установка
Во-первых, вы должны убедиться, что Ctags не установлен в вашей системе. Введите which ctags
, если он возвращает результат, например ctags: aliased to /usr/local/bin/ctags
, тогда вам не нужно его устанавливать.
Если вам нужно установить его, вот инструкции для различных платформ. Если вы используете Fedora Linux, загрузите пакет RPM. Если вы используете MacOSX, используйте Hombrew для его установки, набрав brew install ctags
. В Ubuntu есть пакет exuberant-ctags
который вы можете установить с помощью менеджера пакетов apt-get.
Запуск Ctags
Чтобы запустить Ctags в исходном коде вашего проекта, введите ctags -R --exclude=.git --exclude=log *
из корня вашего каталога Rails. Аргумент с заглавной буквы R
делает его рекурсивным. Мы исключили каталог .git по понятным причинам.
Теперь создается файл с именем tags , который следует добавить в файл .gitignore.
Последний шаг — добавить следующую строку в файл vimrc
чтобы сообщить Vim, где искать файл тегов.
set tags=./tags;
Ctags теперь готов. Перейдите к любому исходному файлу, поместите курсор на любой метод и нажмите CTRL + ]
. Vim перейдет к определению.
Например:
flash[:alert] = 'alert'
Если курсор находится на flash
и вы нажали CTRL + ]
, Vim перейдет к определению источника. Это очень удобно для просмотра исходного кода Rails и получения дополнительной информации о нем.
НОТА:
Вы можете перейти к определениям, введяtag method_name
. Чтобы перейти кhas_many
наберите:tag has_many
.
Вы можете использовать регулярные выражения, такие как: tag / validate *
Ack
Ack — отличная замена для grep
. Ack ищет в файлах строки, содержащие соответствие данному шаблону. Когда файл не выбран, Ack просматривает обычные файлы, которые явно не исключены параметрами --ignore-dir
и --ignore-file
, которые присутствуют в файлах ackrc
или в командной строке.
Установка
В MacOSX вы можете установить Ack с помощью Hombrew, набрав в терминале brew install ack
. В Ubuntu вы можете сделать это с помощью sudo apt-get install ack-grep
, также вы можете обратиться к этому [site] [2] для других поддерживаемых операционных систем.
Простой поиск исходного кода
Вы можете использовать Ack из терминала и из Vim. Чтобы использовать его из Vim в качестве замены для grep, просто добавьте следующую строку в файл vimrc
:
" Use ack instead of grep set grepprg=ack
Вы можете использовать Ack из терминала, набрав ack --ruby controller
, который напечатает все строки со словом «controller».
Теперь, если вы :grep controller
в Vim, он будет использовать Ack для поиска в файлах проекта вхождений «controller» и вывода строк, где он найден.
Редактирование .ackrc config
Возможно, мы хотим игнорировать файлы журналов и ресурсов, верно? Мы можем сделать это с помощью файла конфигурации с именем ackrc
расположенного в каталоге проекта. Он также может быть размещен в вашем домашнем каталоге для глобальной конфигурации.
Игнорируйте файлы журнала и ресурсов со следующими строками:
--ignore-dir=log --ignore-dir=public/assets
Быстрая навигация по результатам
При использовании grep some_text
в Vim он напечатает строки своего вхождения. Когда вы нажмете Enter
, он перейдет к первому вхождению. Как вы переходите к следующему?
Просто введите :cn
чтобы перейти к следующему результату, и :cp
чтобы перейти к предыдущему.
tComment
Существует полезный плагин для комментирования и раскомментирования кода Ruby, который называется tComment. Это работает как тумблер, позволяющий выделять большие фрагменты кода, комментируя / не комментируя с помощью одного ярлыка.
Установка
Как и в предыдущих примерах, установка с Vundle проста. Просто добавьте следующую строку в ваш vimrc
внутри call vundle#begin()
и call vundle#end()
:
Plugin 'tomtom/tcomment_vim'
Вызовите :PluginInstall
и перезапустите Vim.
использование
Вот список ярлыков, предоставляемых плагином tComment:
кратчайший путь | Описание |
---|---|
дс {перемещение} | Переключить комментарии |
НКУ | Переключить комментарий для текущей строки |
дс {перемещение} | Область комментариев |
ССАГПЗ | Прокомментировать текущую строку |
Vim RSpec
Thoughtbot создал очень удобный плагин для запуска тестов RSpec от Vim. Это значительно экономит время, позволяя запускать спецификации RSpec изнутри Vim. Плагин Vim RSpec находится под сильным влиянием скринкастов Гэри Бернхардта « Уничтожить все программное обеспечение» .
Установка
Добавьте следующую строку в ваш vimrc
внутри call vundle#begin()
и call vundle#end()
:
Plugin 'thoughtbot/vim-rspec'
Вызовите :PluginInstall
и перезапустите Vim.
использование
Вот стандартные сочетания клавиш, которые предоставляет плагин RSpec. Вы можете настроить его и добавить предпочтительные сочетания клавиш в файл .vimrc
.
" RSpec.vim mappings map <Leader>t :call RunCurrentSpecFile()<CR> map <Leader>s :call RunNearestSpec()<CR> map <Leader>l :call RunLastSpec()<CR> map <Leader>a :call RunAllSpecs()<CR>
Рубин Рефакторинг
Ruby Refactoring — это плагин, написанный Enrique Comba Riepenhausen для упрощения рефакторинга Ruby. Как он утверждает в файле readme , Ruby Refactoring вдохновлен некоторыми шаблонами рефакторинга, которые Гари Бернхардт представил в Software Craftsmanship User Group UK.
Установка
Добавьте следующую строку в ваш vimrc
внутри call vundle#begin()
и call vundle#end()
:
Plugin 'ecomba/vim-ruby-refactoring'
Вызовите :PluginInstall
и перезапустите Vim.
использование
Посмотрите на отличную документацию , которую предоставляет Джастин, которая охватывает все, что вам нужно для использования этого плагина.
Учебные ресурсы
1- Использование Vim в качестве полноценной среды разработки Ruby on Rails
2- Рубиновое автозаполнение
3- Введение — Rails Vim
4- плагин Vim Bundler
5- Конечный плагин
Резюме
В этом уроке мы рассмотрели некоторые из наиболее полезных плагинов Vim для написания Rails. Если вы следовали всем моим предложениям, ваш редактор Vim теперь является эффективной RoR IDE. Удачи!