Статьи

Эффективная разработка Rails с Vim

Vimlogo.svg

Если вы новичок в 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. Удачи!