Может войдёшь?
Черновики Написать статью Профиль

Мастерство Vim: Перемещаемся под коду с Ctags

перевод Laracasts Мастерство Vim

Это перевод видео-урока с Laracasts, серия Мастерство Vim, урок №9Browse Like a Pro With Ctags от . Перевод обновлён . Опечатка? Выдели и нажми Ctrl+Enter.

(0:00)
Думайте о ctags почти как о базе данных синтаксиса, по крайней мере всех ваших методов и символов. Когда вы вводите один из них, вы немедленно переключитесь в этот файл или метод. Возможно, версия ctags вам доступна «из коробки», если вы на Mac. Однако, по моему опыту, это обычно не так. Итак, установим Homebrew. Вероятно, вы уже установили его. Если нет, это действительно прекрасный инструмент для установки всего — от, собственно, PHP до бесконечного числа маленьких полезных утилит.

(0:30)
Таких как, wget, tree и других прикольных вещей. Оставляю это вам. Это очень-очень быстро. Далее вы можете ввести «brew install ctags». Я уже выполнил это, и если теперь запущу, то мы увидим, что он включен и я могу посмотреть раздел помощи. Если вы на Windows, это называется Exuberant Ctags. Просто зайдите на эту страницу, найдите релиз и установите его. Теперь установим файл тегов.

(1:00)
Мы можем сделать это, введя shctags -R для рекурсивной обработки. Если хотите, то можете уточнить папку, но я вызову её для всех файлов и папок. Готово. Если у вас большая папка vendor или папка модулей Node.js, вы можете исключить целую папку или тип файлов, так как это может занять немного больше времени. Вам решать. В любом случае, если я выведу список своих файлов, вы увидите новый файл tags. Если вы хотите, то можете добавить его в .gitignore, чтобы он не попал в коммит.

(1:30)
Хорошо. Это то, что мы можем делать. Если я запущу MacVim и посмотрю файлы… Мы только что установили новый Laravel. В этом случае похоже, что папка vendor не была даже установлена. Мы еще не выполнили установку Composer. Но это нормально. Давайте найдем какой-нибудь метод для просмотра. Может быть в нашем обработчике исключений. Если мы прокрутим вниз… Как на счет этого метода? Мы хотим переходить в метод PHPreport быстро, но у нас нет нужного файла. Хорошо, сейчас мы узнаем несколько способов сделать это.

(2:00)
И очень быстро… Позвольте переключиться в полный экран. Первый — используя NERDTree. Немного медленно, но в качестве варианта пойдет. У нас установлено сочетание клавиш для Command+1. Найдем файл Exceptions/Handler.php. Удерживаем j или нажмем Ctrl+D, пока не увидите его. Это способ используется в обычных редакторах. Но это предполагает, что вы знаете, где находится этот метод. Иногда вы хотите править метод, но вы не знаете, где найти его. Может быть это метод фреймворка, но вы не можете сказать, где находятся классы или откуда метод взят. Так что в этих случаях такой способ бесполезен.

(2:30)
Command+1, чтобы закрыть это. Я также закрою этот буфер. Т.к. у нас установлены ctags, мы можем использовать :tag и добавить его имя — report. И мы тут. Это то, что я имел ввиду, когда говорил, что когда вы установите и настроите Vim должным образом, вы сможете просматривать свой проект быстрее, чем с любым другим инструментом. Теперь, как насчет ситуации, когда это же имя метода определено в нескольких местах?

(3:00)
К примеру, давайте перейдем в наш контроллер и просто вставим скопированное. Я введу PHPreturn 'something being done'. И, очень быстро, — я должен показать вам, что в этом случае я удаляю все в круглых скобках. Я должен нажать d+i+). Я использую этот способ постоянно. Удалить все внутри скобок. В этом случае, если я хочу удалить все внутри кавычек — d+i+' и готово.

(3:30)
Или, может быть я хочу что-то изменить. Тогда нажму u, чтобы вернуть назад. Я скажу c (change), i (inner) и затем кавычки — то есть нажму c+i+'. Я немедленно войду в режим вставки и могу внести изменения. Повторю это для вас. В конце концов, как я сказал, это язык. Если я хочу выделить что-то внутри кавычек — v+i+'. Теперь я выделил это. Или тут — v+i+). Давайте сделаем еще кое-что. Если мы хотим выделить все, что в фигурных скобках, — если мы хотим удалить метод — введем v+i+[.

(4:00)
И теперь я могу удалить это. А если у нас несколько строчек… Снова — v+i+[ выделит все. Или v+a+[ выделит все, включая скобки. То же самое применимо ко всему. v+a+( выделит не только то, что внутри скобок, но также сами скобки. Хорошо, простите за небольшое отступление тут. Это полезно знать. Я использую это постоянно. Теперь у нас есть два разных метода PHPreport.

(4:30)
Я бы хотел видеть их оба во всплывающем окне. Закрою буфер и этот тоже. Однако, мы добавили новый метод после того, как создали файл tags. Это означает, что если я введу :tag report, я все равно перейду в этот файл, потому что новый метод не представлен в файле ctags. Тут есть несколько вариантов. Первая — вы можете создать быстрый набор горячих клавиш для запуска этой команды. И, помните, внутри Vim вы всегда можете использовать вопросительный знак для вызова любой команды оболочки.

(5:00)
В нашем случае, это список файлов. Это означает, что здесь вы можете ввести :!ctags -R в любом месте и вы пересоздадите этот файл. Вы можете также назначить для этого специальную клавишу. Некоторые даже добавляют для этого git hooks, так что когда вы делаете коммит в git, вы автоматически запускаете команду, которая пересоздает этот индекс. Тут есть много вариантов. Но в любом случае мы уже сделали это. Теперь наш индексный файл должен иметь два метода PHPreport. Если я введу :tag report… В данном случае мы опять попали в тот же файл.

(5:30)
Но есть так же другой способ. Если я введу :tn, это покажет мне следующий тег. Или :tp, чтобы перейти к предыдущему. Или, наконец, :ts для выбора всех доступных тегов. В нашем случае у нас есть три совпадения. Одно — в Handler.php, другое — в Controller.php и еще одно — в файле compiled.php. На самом деле, мы должны исключить его, потому что не хотим просматривать этот файл. В этом случае мы перейдем ко второму.

(6:00)
И это переместит нас в файл Controller. Это немного утомительно — вводить :tag и, далее, название метода. Давайте добавим горячую клавишу для этого. Переключусь в мой файл .vimrc. Нажмем Ctrl+D, чтобы переместиться вниз, к mapping. Пусть пока так. И я создам новое сочетание: «если я ввожу <leader>f, то хочу найти тег». Что равнозначно вводу :tag<space>.

(6:30)
Знаю, может показаться, будто мы сэкономили всего несколько символов — удивительно, но разница есть. Ладно, я введу gt, чтобы переключиться в эту вкладку или, конечно, вы можете щелкнуть мышкой. Я не побью вас за это. Многие готовы навалять вам, если вы делаете что-то способом, который на 1% отличается от «Vim way». Это глупо. Это все только для того, чтобы вы чувствовали себя комфортно. Как бы там не было, теперь я введу ,f и сразу могу печатать нужный тег. Вообразите, как быстро. Давайте закроем это. Всякий раз, когда вы хотите найти метод PHPreport, введите ,f report. И не забудьте, вы можете использовать автодополнение.

(7:00)
Если я нажму Tab здесь, он добавит окончание за меня. И я могу продолжить нажимать Tab для просмотра других совпадений. Хорошо, повторим. ,f report — и мы тут. Я могу нажать далее Tab, чтобы перейти к следующему вхождению и продолжить перемещаться по ним, пока не достигну последнего. Или я могу вести :tp (tab previous), чтобы вернутся назад. И, наконец, :ts, чтобы посмотреть список всех совпадений. Далее, я просто введу номер, который я хочу просмотреть. Давайте перейдем к последней вещи.

(7:30)
Что, если вы видите метод и хотите быстро перейти в него? Вот так. Я перейду в свой файл User.php. Промотаю вниз. Добавим метод. Введу его вручную. Позже я покажу вам, как создавать сниппеты. Давайте введем isSubscribed(). И какой-нибудь метод. И пока просто напишем PHPreturn false. Хорошо. Теперь мне нужно обновить ctags. Теперь переключимся к любому файлу, не важно к какому. Например, Controller.php. Я собираюсь избавиться от этого полностью. Введу PHPsomeMethod(), нажму d+i+), чтобы удалить это.

(8:00)
Теперь, напишем PHP$user = new \App\User. И я хочу проверить, подписан ли пользователь на что-либо. Вы будете видеть это постоянно. И, очень быстро, — вы хотите перейти к этому методу под курсором. У нас есть установленный ctags и актуальный файл tags. Мне просто нужно нажать Ctrl+]. Заметьте, это мгновенно перенесет нас туда. Запомните это. Теперь я нажму Ctrl+^ и это переместит меня в предыдущее местоположение.

(8:30)
Запомните это. Ctrl+] перенесет вас туда, где метод определен. Невероятно удобно. Мой курсор уже тут. Мне не нужно вводить еще что-то. Ctrl+] — быстрое решение. Будьте уверены, что записали это. Даже я записываю. Я часто оставляю пометки внизу моего файла .vimrc. Поверьте, вы забудете это, особенно то, чем вы не пользуетесь часто.

(9:00)
Небольшие вещи, вроде меток или регистров. Вскоре я покажу вам их. Вы не будете использовать их все время, поэтому хорошо бы все записывать. Начните записывать сейчас, чтобы выработать привычку. Как насчет того, что мы делали на предыдущем уроке? Нажмите zz, чтобы отцентровать строчку, где находится курсор. Выполним это. Итак zz — мы отцентровали ее. Эти небольшие заметки помогут вам. В моем файле .vimrc у меня есть, возможно, 20 или 30 разных небольших напоминаний для себя.

(9:30)
Я держу их в .vimrc, чтобы они были доступны все время. Если вы будете делать их где-то еще, то не будете смотреть в них достаточно часто и забудете. Я постоянно нахожусь в своем файле .vimrc, поэтому часто просматриваю записи, чтобы освежить их в памяти.

Как вы считаете, полезен ли этот материал? Да Нет

Написать комментарий

Разметка: ? ?

Авторизуйся, чтобы прокомментировать.