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

Мастерство Vim: Поиск и замена по всему проекту

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

Это перевод видео-урока с Laracasts, серия Vim Mastery, урок №11Custom Highlighting от . Перевод обновлён . Опечатка? Выдели и нажми Ctrl+Enter.

(0:00)
Одна вещь в Vim является загадкой для новых пользователей — как происходит поиск проектов. Например, верно то, что, если мы перейдем... я не знаю... в PHPAuthController, то вы увидите, — прокручу тут вниз — что я добавил новый раздел с названием John Doe. В текущем файле я могу найти это легко. Мы уже умеем это. Я могу ввести /, далее мой поисковый запрос и это перенесет меня сюда. А если есть два вхождения... Если мы проделаем это еще раз, то я нажму n, что переместит меня к следующему вхождению.

(0:30)
Нажму u пару раз, чтобы отменить. Но, что если нам нужно искать во множестве файлов? Это будет немного сложнее и требует чуть больше объяснений. Давайте пройдем несколько шагов, чтобы сделать это процесс приятнее. Давайте начнем с простого grep в командной строке. Весьма вероятно, что он уже доступен вам. Итак введу grep -R (просмотреть рекурсивно в моём проекте) на наличие фразы John Doe. И мы начнем с текущей папки. Это весьма быстро.

(1:00)
Мы можем видеть эту фразу в PHPAuthController так, как мы ее указали. Так что да, вы можете делать это из командной строки и затем переключиться в найденное соответствие. Но вам все еще нужно просматривать все это. Да, довольно много шагов. Теперь, мы, конечно, можем переключится в vimgrep. Я могу ввести снова :grep -R (искать) 'John Doe' (начать с корневой папки) ./. И, снова, мы делаем это через командную строку, но это отличается от того, что мы сделали в первый раз. Если я введу :copen, то откроется окно с ошибками Quickfix.

(1:30)
Мы не говорили об этом, но много плагинов и встроенных утилит могут делать это автоматически. Если вы хотите посмотреть список ошибок или все что есть в этом списке, вы можете ввести :copen. И, так как сейчас мы запустили grep, вы видите, Vim выводит совпадения в этом списке. Для примера, давайте закроем это и выйдем отсюда. Если мы введем :copen с нуля, он покажет все вхождения с John Doe. Я могу кликнуть на одно из них.

(2:00)
Теперь мы тут. Это работает, но, если мы вернемся... эта команда довольно многословна. Я бы хотел иметь что-то, вроде :search 'John Doe'. Это то, что мне нужно в большинстве случаев. Давайте выясним, как добиться этого. Я покажу вам две вещи. Начнем с Ag. Это в сущности молниеносно быстрый интерфейс для The Silver Searcher. Вам не обязательно даже знать, что такое The Silver Searcher. Это просто способ выполнять поиск очень-очень бысто. Возможно, вы слышали о grep, конечно, или об ack.

(2:30)
Ag — наиболее быстрый, по моему опыту. Теперь давайте выясним, как установить это на ваш компьютер. Мы можем использовать Homebrew для установки. Не забывайте, мы уже обсуждали Homebrew в предыдущем видео. Если у вас нет его, зайдите на brew.sh и просто запустите его. Он должен быть у каждого разработчика на Mac. Если мы вернемся сюда... Давайте просто запустим это. У меня он уже установлен. Я могу нажать Ctrl+C, чтобы выйти. Это действительно очень просто.

(3:00)
Давайте вернемся назад и разберемся с этим. Installation — мы можем установить его с помощью Vundle, как всегда это делаем. Вы можете также просмотреть некоторые настройки. Вернемся в Vim. ,ev, чтобы перейти в файл .vimrc. Или, не забудьте, мы читаем файл plugins.vim. Вместо этого, давайте перейдем туда. Теперь внизу я введу Plugin и вставлю то, что скопировал. Вернемся в .vimrc. Сохраню, файл будет автоматически перезапущен.

(3:30)
Теперь я могу ввести :PluginInstall, чтобы добавить его. Отлично. Давайте закроем это. И теперь у нас есть новая команда :Ag. Она у нас, конечно, есть также в командной строке, потому что мы установили её через Homebrew. Давайте попробуем: Ag. Кстати, A должна быть заглавной. Если вы введете строчную букву, работать не будет. Итак, с заглавной: :Ag — вот так. В нашем случае показывается предыдущее окно Quickfix с результатами поиска. Закроем все. И это тоже. Сделаем это еще раз:

(4:00)
:Ag 'John Doe' — и мы тут. Сейчас автоматически открывается окно Quickfix. Что мы делаем тут? Давайте заменим это на Jane Doe. Сохраним. Скопирую это и перейду куда-нибудь еще. В любое место. Например, в server.php. Вставим это сюда. Давайте закроем это. И это. Выполним еще раз поиск. Теперь будем искать Jane Doe. Он будет автоматически искать очень быстро рекурсивным способом. И вот, пожалуйста, — найден это файл, а также этот.

(4:30)
Теперь я могу использовать j и k, для выбора между ними, или нажать Enter, чтобы открыть файл. А если я захочу перейти куда-нибудь еще, просто кликну на другом результате. Хорошо. Я буду использовать это для обычного поиска. Но, если мне нужен поиск с заменой, — это немного другая история. Если мне нужны поиск и замена, то я могу перейти сюда и сделать нужные изменения. И, далее, повторить то же самое для каждого файла. Но, думаю, мы можем немного упростить процесс. Для этого добавим другой плагин.

(5:00)
Если я переключусь на вторую вкладку, мы можем использовать greplace. Это работает отлично. Давайте скопируем URL, чтобы установить с помощью Vundle. И, снова, вы можете просмотреть наши настройки. В этом случае мы будем использовать Ag. Удостоверьтесь, что установили его. Давайте вернемся к нашему plugins.php, сюда вниз. Далее я введу ,ev, чтобы перейти в файл .vimrc. Мы добавим новые настройки. Например, здесь.

(5:30)
Скопируем NERDTree и введем Greplace.vim. Окей, давайте вернемся. Похоже, это то, что нужно. Вставлю это. И, может быть, прямо тут запишу: «Мы хотим использовать Ag для поиска». Хорошо, выполним :PluginInstall. Должно быть, все готово. Выполню :bufdo bd!, чтобы закрыть все буферы. Теперь у меня есть эта новая команда :Gsearch («grep search»).

(6:00)
Но на самом деле внутри мы будем использовать Ag. Давайте запустим это. Он попросит меня добавить запрос, — Jane Doe. Также место, где искать. Я могу указать любую папку в приложении (app/*) или во всем проекте (*). Теперь он показывает все вхождения Jane Doe. Это тот файл, где мы произвели замену. Вы можете, либо менять каждое вхождения в отдельности, либо я покажу вам в следующем видео, как использовать множественное выделение (если вам нравиться подход SublimeText).

(6:30)
Или еще — мы можем выделить строчки и это нечто новое. Я могу ввести <, '>s/ (мой запрос) John Doe (далее, еще один слэш и фразу для замены) /Jane Doe. Если мы выполним это, вы видите, фраза заменилась. Давайте выполним это еще раз вместе: <, '>s/John Doe/Changed. Теперь мы выполним :Greplace, для слияния этих действий с другими результатами поиска. Запустим.

(7:00)
Это, либо проведет нас через каждый файл и попросит подтвердить, хотите ли вы обновить этот файл или тот файл. Либо же вы можете ввести a и это выполнит все возможные замены. Хорошо. Я введу :wa, чтобы сохранить каждый файл (write all files). Теперь все готово. Кстати, я нажму Ctrl+W,O, чтобы развернуть текущий буфер на полный экран. Так что да, всё было сделано. Если я перейду к server.php. Видите, это отражено здесь.

(7:30)
И далее, как я сказал, вернемся к PHPAuthController. Здесь то же самое. Еще раз, чтобы убедиться, что вы запомнили. Пройдем этот процесс еще раз: Gsearch... (меня интересуют изменения) Changed. Давайте укажем целый проект (*). В этом случае мы нашли эти два файла, но также зацепили другой файл (compiled.php), который нам не нужен. Я только обновлю эти две строчки. <, '>s/Changed/ (и заменим это на) John. И теперь я могу ввести :Greplace.

(8:00)
И еще раз a, чтобы принять все замены. Наконец, сохраним все файлы и готово. Я закрою это. Command+P, перейдем в server.php. Вот так. И теперь другой... не помню... Command+E, PHPAuthController. Введу заглавную G, чтобы перейти вниз файла. Или, в качестве варианта, gg, чтобы перейти наверх. Не уверен, упоминали ли мы это. Хорошо бы запомнить: G — это вниз, gg — наверх.

(8:30)
Вы можете нажать заглавную V, что бы перейти в визуальный режим. И затем заглавную G, чтобы выделить всю страницу. Таким образом, можете комбинировать эти команды. Или, в качестве альтернативы, можно нажать V, gg для выделения до верха страницы. И d для удаления. Или, опять же, если вы используете MacVim и привыкли к Command+A, это сработает. Решать вам. Хорошо, достаточно для этого урока. Убедитесь, что вы потренировались и закрепили это в памяти.

(9:00)
Мы рассмотрели основные grep-команды. Потом мы установили Ag и The Silver Searcher. И, наконец, мы установили плагин Greplace.vim, чтобы делать поиск и замену по всему проекту крайне простым.

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

Комментарии (2)

Afatar

Только меня бесят в тексте непонятные циферки в скобках (0:00, 0:30....) ?

Proger_XP

Логично предположить, что это время в видео для простоты ориентирования.

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

Разметка: ? ?

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