{{Laracast Vim Mastery, 11, Custom Highlighting, 08.02.2016, 19.06.2016, https://laracasts.com/series/vim-mastery/episodes/11}} (0:00) Одна вещь в Vim является загадкой для новых пользователей - как происходит поиск проектов. Например, верно то, что, если мы перейдем... я не знаю... в %%AuthController%%, то вы увидите, - прокручу тут вниз - что я добавил новый раздел с названием %%(t)John Doe%%. В текущем файле я могу найти это легко. Мы уже умеем это. Я могу ввести %%(t)/%%, далее мой поисковый запрос и это перенесет меня сюда. А если есть два вхождения... Если мы проделаем это еще раз, то я нажму %%(t)n%%, что переместит меня к следующему вхождению. (0:30) Нажму %%(t)u%% пару раз, чтобы отменить. Но, что если нам нужно искать во множестве файлов? Это будет немного сложнее и требует чуть больше объяснений. Давайте пройдем несколько шагов, чтобы сделать это процесс приятнее. Давайте начнем с простого %%(t)grep%% в командной строке. Весьма вероятно, что он уже доступен вам. Итак введу %%(t)grep -R%% (просмотреть рекурсивно в моём проекте) на наличие фразы %%(t)John Doe%%. И мы начнем с текущей папки. Это весьма быстро. (1:00) Мы можем видеть эту фразу в %%AuthController%% так, как мы ее указали. Так что да, вы можете делать это из командной строки и затем переключиться в найденное соответствие. Но вам все еще нужно просматривать все это. Да, довольно много шагов. Теперь, мы, конечно, можем переключится в %%(t)vimgrep%%. Я могу ввести снова %%(t):grep -R%% (искать) %%(t)'John Doe'%% (начать с корневой папки) %%(t)./%%. И, снова, мы делаем это через командную строку, но это отличается от того, что мы сделали в первый раз. Если я введу %%(t):copen%%, то откроется окно с ошибками Quickfix. (1:30) Мы не говорили об этом, но много плагинов и встроенных утилит могут делать это автоматически. Если вы хотите посмотреть список ошибок или все что есть в этом списке, вы можете ввести %%(t):copen%%. И, так как сейчас мы запустили %%(t)grep%%, вы видите, Vim выводит совпадения в этом списке. Для примера, давайте закроем это и выйдем отсюда. Если мы введем %%(t):copen%% с нуля, он покажет все вхождения с %%(t)John Doe%%. Я могу кликнуть на одно из них. (2:00) Теперь мы тут. Это работает, но, если мы вернемся... эта команда довольно многословна. Я бы хотел иметь что-то, вроде %%(t):search 'John Doe'%%. Это то, что мне нужно в большинстве случаев. Давайте выясним, как добиться этого. Я покажу вам две вещи. Начнем с Ag. Это в сущности молниеносно быстрый интерфейс для The Silver Searcher. Вам не обязательно даже знать, что такое The Silver Searcher. Это просто способ выполнять поиск очень-очень бысто. Возможно, вы слышали о %%(t)grep%%, конечно, или об %%(t)ack%%. (2:30) Ag - наиболее быстрый, по моему опыту. Теперь давайте выясним, как установить это на ваш компьютер. Мы можем использовать Homebrew для установки. Не забывайте, мы уже обсуждали Homebrew в предыдущем видео. Если у вас нет его, зайдите на ((http://brew.sh brew.sh)) и просто запустите его. Он должен быть у каждого разработчика на Mac. Если мы вернемся сюда... Давайте просто запустим это. У меня он уже установлен. Я могу нажать Ctrl+C, чтобы выйти. Это действительно очень просто. (3:00) Давайте вернемся назад и разберемся с этим. Installation - мы можем установить его с помощью Vundle, как всегда это делаем. Вы можете также просмотреть некоторые настройки. Вернемся в Vim. %%(t),ev%%, чтобы перейти в файл %%(t).vimrc%%. Или, не забудьте, мы читаем файл %%(t)plugins.vim%%. Вместо этого, давайте перейдем туда. Теперь внизу я введу %%(t)Plugin%% и вставлю то, что скопировал. Вернемся в %%(t).vimrc%%. Сохраню, файл будет автоматически перезапущен. (3:30) Теперь я могу ввести %%(t):PluginInstall%%, чтобы добавить его. Отлично. Давайте закроем это. И теперь у нас есть новая команда %%(t):Ag%%. Она у нас, конечно, есть также в командной строке, потому что мы установили её через Homebrew. Давайте попробуем: %%(t)Ag%%. Кстати, %%(t)A%% должна быть заглавной. Если вы введете строчную букву, работать не будет. Итак, с заглавной: %%(t):Ag%% - вот так. В нашем случае показывается предыдущее окно Quickfix с результатами поиска. Закроем все. И это тоже. Сделаем это еще раз: (4:00) %%(t):Ag 'John Doe'%% - и мы тут. Сейчас автоматически открывается окно Quickfix. Что мы делаем тут? Давайте заменим это на %%(t)Jane Doe%%. Сохраним. Скопирую это и перейду куда-нибудь еще. В любое место. Например, в %%(t)server.php%%. Вставим это сюда. Давайте закроем это. И это. Выполним еще раз поиск. Теперь будем искать %%(t)Jane Doe%%. Он будет автоматически искать очень быстро рекурсивным способом. И вот, пожалуйста, - найден это файл, а также этот. (4:30) Теперь я могу использовать %%(t)j%% и %%(t)k%%, для выбора между ними, или нажать Enter, чтобы открыть файл. А если я захочу перейти куда-нибудь еще, просто кликну на другом результате. Хорошо. Я буду использовать это для обычного поиска. Но, если мне нужен поиск с заменой, - это немного другая история. Если мне нужны поиск и замена, то я могу перейти сюда и сделать нужные изменения. И, далее, повторить то же самое для каждого файла. Но, думаю, мы можем немного упростить процесс. Для этого добавим другой плагин. (5:00) Если я переключусь на вторую вкладку, мы можем использовать %%(t)greplace%%. Это работает отлично. Давайте скопируем URL, чтобы установить с помощью Vundle. И, снова, вы можете просмотреть наши настройки. В этом случае мы будем использовать Ag. Удостоверьтесь, что установили его. Давайте вернемся к нашему %%(t)plugins.php%%, сюда вниз. Далее я введу %%(t),ev%%, чтобы перейти в файл %%(t).vimrc%%. Мы добавим новые настройки. Например, здесь. (5:30) Скопируем NERDTree и введем %%(t)Greplace.vim%%. Окей, давайте вернемся. Похоже, это то, что нужно. Вставлю это. И, может быть, прямо тут запишу: "Мы хотим использовать Ag для поиска". Хорошо, выполним %%(t):PluginInstall%%. Должно быть, все готово. Выполню %%(t):bufdo bd!%%, чтобы закрыть все буферы. Теперь у меня есть эта новая команда %%(t):Gsearch%% ("grep search"). (6:00) Но на самом деле внутри мы будем использовать Ag. Давайте запустим это. Он попросит меня добавить запрос, - %%(t)Jane Doe%%. Также место, где искать. Я могу указать любую папку в приложении (%%(t)app/*%%) или во всем проекте (%%(t)*%%). Теперь он показывает все вхождения %%(t)Jane Doe%%. Это тот файл, где мы произвели замену. Вы можете, либо менять каждое вхождения в отдельности, либо я покажу вам в следующем видео, как использовать множественное выделение (если вам нравиться подход SublimeText). (6:30) Или еще - мы можем выделить строчки и это нечто новое. Я могу ввести %%(t)<, '>s/%% (мой запрос) %%(t)John Doe%% (далее, еще один слэш и фразу для замены) %%(t)/Jane Doe%%. Если мы выполним это, вы видите, фраза заменилась. Давайте выполним это еще раз вместе: %%(t)<, '>s/John Doe/Changed%%. Теперь мы выполним %%(t):Greplace%%, для слияния этих действий с другими результатами поиска. Запустим. (7:00) Это, либо проведет нас через каждый файл и попросит подтвердить, хотите ли вы обновить этот файл или тот файл. Либо же вы можете ввести %%(t)a%% и это выполнит все возможные замены. Хорошо. Я введу %%(t):wa%%, чтобы сохранить каждый файл (write all files). Теперь все готово. Кстати, я нажму Ctrl+W,O, чтобы развернуть текущий буфер на полный экран. Так что да, всё было сделано. Если я перейду к %%(t)server.php%%. Видите, это отражено здесь. (7:30) И далее, как я сказал, вернемся к %%AuthController%%. Здесь то же самое. Еще раз, чтобы убедиться, что вы запомнили. Пройдем этот процесс еще раз: %%(t)Gsearch%%... (меня интересуют изменения) %%(t)Changed%%. Давайте укажем целый проект (%%(t)*%%). В этом случае мы нашли эти два файла, но также зацепили другой файл (%%(t)compiled.php%%), который нам не нужен. Я только обновлю эти две строчки. %%(t)<, '>s/Changed/%% (и заменим это на) %%(t)John%%. И теперь я могу ввести %%(t):Greplace%%. (8:00) И еще раз %%(t)a%%, чтобы принять все замены. Наконец, сохраним все файлы и готово. Я закрою это. Command+P, перейдем в %%(t)server.php%%. Вот так. И теперь другой... не помню... Command+E, %%AuthController%%. Введу заглавную %%(t)G%%, чтобы перейти вниз файла. Или, в качестве варианта, %%(t)gg%%, чтобы перейти наверх. Не уверен, упоминали ли мы это. Хорошо бы запомнить: %%(t)G%% - это вниз, %%(t)gg%% - наверх. (8:30) Вы можете нажать заглавную %%(t)V%%, что бы перейти в визуальный режим. И затем заглавную %%(t)G%%, чтобы выделить всю страницу. Таким образом, можете комбинировать эти команды. Или, в качестве альтернативы, можно нажать %%(t)V%%, %%(t)gg%% для выделения до верха страницы. И %%(t)d%% для удаления. Или, опять же, если вы используете MacVim и привыкли к Command+A, это сработает. Решать вам. Хорошо, достаточно для этого урока. Убедитесь, что вы потренировались и закрепили это в памяти. (9:00) Мы рассмотрели основные %%(t)grep%%-команды. Потом мы установили Ag и The Silver Searcher. И, наконец, мы установили плагин %%(t)Greplace.vim%%, чтобы делать поиск и замену по всему проекту крайне простым.