{{Laracast Мастерство Vim, 3, Mappings and Commands, 27.01.2015, 31.05.2016, https://laracasts.com/series/vim-mastery/episodes/3}} (0:00) Приятно видеть вас снова. Давайте немного настроим нашу конфигурацию. Если я буду делать настройки построчно, на это будет скучно смотреть. Вместо этого я покажу вам основы и затем дам образец по-настоящему хорошо задокументированного файла vimrc, который я обычно использую сам. Вы сможете выбрать нужные настройки и скопировать их в свой файл. Давайте отредактируем наш файл vimrc. Вот одна из первых вещей, за которую мы возьмемся. Очень неудобно постоянно открывать этот файл. (0:30) Каждый раз мы вводим %%(t):e ~/.vimrc%%. Я бы предпочел иметь горячую клавишу для этой команды. Давайте создадим её. Сделаю здесь небольшой подзаголовок. Назовем его %%(t)Mappings%%. Желательно организовать ваш файл vimrc, как можно лучше. Потому что, поверьте, через несколько месяцев вы не сможете вспомнить, для чего предназначена каждая из настроек. Потратьте время на описание того, что делает каждая строчка. (1:00) Предположим, что это в этом разделе находятся "mappings". "Mapping" в Vim - это просто способ сказать "когда я ввожу это, я хочу, чтобы произошло то". Очень просто. Итак, есть базовая комбинация %%(t)map%%. Но еще есть дополнительные. Например, %%(t)imap%% означает набор для режима вставки. %%(t)i%% для вставки. %%(t)n%% - набор для нормального режима, или, другими словами, когда вы нажимаете Escape. Давайте проделаем это. Говорим: когда пользователь вводит %%(t),ev%%, мы хотим править файл vimrc. (1:30) Нажмем пробел. Что теперь мы должны сделать? Введем %%(t):e%%, и мы можем добавить %%(t)~/.vimrc%%. Кроме того, есть переменная, на которую мы можем ссылаться. Введем %%(t):echo $MYVIMRC%%. Да, она указывает на файл vimrc в моей домашней директории. Это значит, что так я могу заменить %%(t)~/.vimrc%% на %%(t)$MYVIMRC%%. Давайтe продвинемся еще на шаг. Вы можете создать новую вкладку, введя %%(t):tabedit%%. (2:00) К примеру, если я выполню %%(t):tabedit $MYVIMRC%%, файл откроется в новой вкладке. На самом деле это может быть полезно. И, кстати, если вы хотите закрыть вкладку или буфер, вы можете сделать это, будто это файлы. Но буфер - это очень необычная вещь в Vim. В любом случае, если вы хотите закрыть его, просто введите %%(t):bd%% ("buffer delete"). И вот я избавился от него. Ладно, но мы как раз хотели открыть его, так что вернём обратно. У нас есть эта новая комбинация. (2:30) Давайте введем %%(t):tabedit $MYVIMRC%%. Это когда я ввожу %%(t),ev%% в нормальном режиме. Попробуем. Вернемся обратно в наш файл %%(t)practice%%. Теперь, обратите внимание, ввожу %%(t),ev%%... ничего. Ничего не произошло. В чём проблема? Помните, мы говорили об этом на прошлом уроке. Когда вы обновляете ваш файл vimrc, вы должны быть уверены, что перезагрузили его (source). Т.е. точно так же, как, скажем, вы бы добавили %%(t)alias%% в Bash. Но они не будут работать, пока вы не перезагрузите файл или не откроете новую вкладку. (3:00) То же самое справедливо и тут. Мы проделаем здесь то же самое. Но до поры до времени я буду перезагружать и вводить %, что означает "текущий файл". В этот раз, если мы попытаемся ввести %%(t),ev%%, то добъемся, чего хотели... почти. Мы видим этот раздел внизу. И теперь я должен нажать Enter для доступа к нему. Но почему бы нам не добавить переход на новую строчку. Просто считайте это обычным нажатием Enter. Сохраним. Перезагрузим файл. (3:30) Далее, введем %%(t):bd%%, чтобы закрыть буфер. Теперь это сработает. %%(t),ev%% - и мы там. Вот она, гибкость Vim в действии. Для простых задач вашего проекта, вы можете создать сочетания клавиш - собственный язык - чтобы ускорить процесс работы. Предлагаю добавить тут небольшой комментарий. "Облегчает правку файла vimrc". Даже, если вам это кажется излишним, я думаю, это стоит того. Теперь, почему бы нам не перезагружать файл vimrc автоматически, когда мы правим его? (4:00) Давайте создадим новый раздел. У вас, возможно, будет несколько команд в вашем файле, которые бы мы назвали автоматическими. Давайте создадим раздел для них: %%(t)Auto-Commands%%. Я создаю новый %%(t)autocmd%%. Конкретно, я хочу отметить, когда мы пишем буфер. Какой тип файла мы имеем в виду? Это наш файл vimrc. Когда мы сохраняем файл, что нам нужно сделать, так это перезагрузить его. Добавим небольшой комментарий: (4:30) "Автоматически перезагружать файл при сохранении". Это последний раз, когда мы проделываем это вручную. Далее будет создана автоматическая команда. Давайте попробуем. Скажем, сейчас мы хотим изменить это на %%(t),ed%%. Сохраняем файл и он будет автоматически перезагружен. Теперь, если я попробую ввести %%(t),ed%% и, как вы видите вверху, открывается новая вкладка. Немного поясним. (5:00) Если мы закроем буфер, что ж.. Независимо от вкладки это тот же самый буфер. Если я сделаю это, обратите внимание, они обе закроются. Вернем их обратно. Если вы просто хотите закрыть текущую вкладку, то.. если вы не знаете как, то можете ввести %%(t):help%% для поиска в документации. Например, %%(t):help tabclose%%... переходим. Мы можем видеть прямо наверху здесь то, что искали. Т.е. можете вводить это любым способом, в том числе в виде аббревиатуры. Теперь мы можем увидеть - закроется текущая вкладка. (5:30) Ладно, давайте попробуем ввести %%(t):bd%%, чтобы удалить буфер. Теперь просто закроем одну вкладку. Можно также ввести %%(t):tabclose%% или %%(t):tabc%%. Теперь только эта вкладка закрылась. Вернем назад комманду %%(t):ev%% для правки моего файла vimrc. Теперь, что на счет запятой перед командой? Ну, так просто принято в Vim. Когда вы вводите какой-то символ - любую клавишу на самом деле - то указываете тем самым на ввод любого пользовательского сочетания клавиш. (6:00) Таким образом, вы можете быть уверенным, что не перезаписали существующее сочетание клавиш. Вы можете встретить, что люди делают что-то вроде этого. Значение %%(t)%% в Vim является... вы можете думать об этом, как о пользовательском префиксе для ваших имён. В версии Vim "из коробки" символ %%(t)%% это %%(t)\%%. Что это значит? Скажем, когда я ввожу %%(t)\ev%%, я хочу вызвать эту команду. Давайте попробуем. Введем %%(t)\ev%% и, вы видите, открылась новая вкладка. Введу %%(t):tabc%%, чтобы закрыть ее. (6:30) Если подумать, то Vim целиком сосредоточен на рабочем процессе и на том, чтобы сделать работу максимально удобной для ваших пальцев. Поэтому по умолчанию обратный слеш выглядит как-то странно. Не знаю, почему они используют его. Так что мы будем использовать вместо него запятую. Я введу %%(t)o%%, чтобы создать новую строчку сверху. И давайте введем: %%(t) let mapleader = ',' %% Я не хочу использовать слеш, который предлагается по умолчанию. Хочу использовать запятую. Теперь, я хочу снова сделать пометку для себя. (7:00) "%%(t)%% по умолчанию - это обратный слеш, но запятая намного лучше". Я сохраню это, и потому что сейчас у нас есть автокоманда для перезагрузки он будет перезагружен. Теперь, если я введу %%(t):ev%%, это создаст новую вкладку. Хорошо, давайте закончим с еще несколькими настройкам и двинемся дальше. Вещь, которая вам должна понравиться, - это нумерация строк. Давайте посмотрим. Может быть %%(t):help line number%% или %%(t)help number%% или иногда, проще найти команду в Google. Но в этом случае, мы, видимо, нашли, что нужно. (7:30) Поместить номер в начале каждой строки. Давайте закроем буфер и введем %%(t)set number%%. И запишу, прямо здесь: "Давайте активируем нумерацию строк". После перезагрузки мы можем видеть нумерацию строк. Что еще? Может быть мы хотим установить межстрочный интервал. Давайте посмотрим %%(t):help linespace%%. Вот, как мы можем ссылаться на параметр. Это выглядит как будто относится к числу пикселей между символами. Давайте начнем. (8:00) Закроем эту вкладку и введем %%(t)set linespace%% и далее нужное число. Но, обратите внимание, это не сработало. Тут есть один нюанс. Это будет работать только в версии Vim с GUI-интерфейсом. Например, в MacVim. Это не работает по умолчанию. Позвольте показать. Мы перешли в нашу папку %%(t)practice%%. Откроем ее в MacVim. Развернем на весь экран. Введем %%(t),ev%% и теперь, видите, межстрочный интервал стал больше. Если я поставлю значение 25, то это сразу вступит в силу. (8:30) Давайте выйдем отсюда. Вернемся. Но как включить это в терминальном Vim, если мы этого хотим? Для этой ситуации вы должны использовать настройки самого терминала. Для примера, я введу Command+%%(t),%% для просмотра настроек iterm, во вкладке %%(t)Profiles%%, раздел %%(t)Text%%. Здесь внизу вы просто устанавливаете вертикальное расстояние. Вот так. И делаете так, как вам нравится. Опять же я оставлю комментарий тут, потому что иначе не запомню. (9:00) Напишем "Межстрочный интервал только для MacVim". Окей, давайте сделаем немного больше того, что мы хотели сегодня. Что если мы ищем что-то? Если вы вводите %%(t)/%% (вот он, внизу экрана). Теперь я могу набрать любой термин и, если я нажму Enter, мой курсор будет постоянно переносится сюда. Давайте вернем все назад. Я могу держать нажатой %%(t)k%% - это прокрутка вверх. Или я могу ввести %%(t)gg%%, чтобы сразу перейти наверх. Давайте попробуем снова. Поищем %%(t)set%%. Введем %%(t)/set%% + Enter. (9:30) Это перенесет меня к первому вхождению. Далее, если я введу %%(t)n%% (next - "дальше"), то перейду к следующему вхождению термина. Может быть вам нужно немного подсветки для ясности. Давайте добавим это в свой раздел. Скопируйте это. На самом деле, я должен показать вам, как делать это. Если вы хотите скопировать всю строку, вы должны ввести %%(t)V%%, чтобы выделить ее. %%(t)y%% -это новая команда - для копирования (yank). (10:00) Считайте это хитрым названием для копирования. Итак, копируем (%%(t)y%%) этот текст и далее, если я введу %%(t)p%%, он будет вставлен. Теперь другой вариант. Если вы нажмёте %%(t)yy%% - это опять то же самое, что и копирование целой строчки. Итак, копируем строчку, вставляем - это %%(t)yyp%%. Если я продолжу выполнять %%(t)yyp%%... %%(t)yyp%%... строки продолжат вставляться. В качестве приятного бонуса я могу использовать точку. Если нажать точку, это подставит последнюю команду. Итак, выполним последнюю команду. (10:30) Не переживайте о сложности. Несмотря на то, что я учу этому всему, я сам иногда думаю, ого, как много тут разных команд. Вам не нужно запоминать их все за один раз. Хорошо, давайте введем %%(t)Search%%. И первое, что я хотел бы сделать, это установить подсветку для поиска (%%(t)set hlsearch%%). Теперь, когда мы обновили файл, обратите внимание, что все вхождения удобно подсвечены. Еще можно сделать так: %%(t)colorscheme%%, Enter и теперь они подсвечены. Это удобно. Во время работы они остаются подсвечены. (11:00) Это немного раздражает в Vim. Теперь проясним, как выключать подсветку. Мы можем сделать это командой %%(t):nohlsearch%%. Это выключит ее. Но, парни, я не хочу делать это каждый раз. Давайте добавим небольшое сочетание клавиш для этого. Прямо здесь, пониже я введу, например, %%(t)nmap %%. Распространенное выражение. Итак, когда я ввожу это сочетание, я хочу выключить подсветку. Далее %%(t):nohlsearch%%. (11:30) Подсветка должна выключиться. Давайте попробуем ввести %%(t)/set%%, это найдет все вхождения. Я могу нажать %%(t)n%%, чтобы передвигаться по ним. Теперь я могу добавить %%(t),%%, пробел и это удалит подсветку. Оставим комментарий "Простое удаление подсветки". Хорошо, теперь продолжим с поиском. Есть замечательные настройки, которые позволяют автоматически или пошагово (incrementing) подсвечивать результаты поиска. (12:00) Для примера, если я выполню %%(t)/set%% (обратите внимание, что ничего не подсвечивается, пока я не нажму Enter). А если я введу %%(t)set incsearch%%... Сохраню это. Теперь быстрое замечание. У нас будет несколько таких случаев в этом видео. Я сохранил, но похоже все зависло. Обратите внимание, я ввожу букву и ничего не просходит. Уверен, вы уже встречались с этим. Я объясню это вскоре. (12:30) В этот раз мы искали %%(t)/set%% и, заметьте, когда я набирал, сразу работал поиск - пошаговый поиск до первого вхождения. И теперь мы можем фильтровать то, что нашли. Это действительно удобно. Вот я внизу и хочу найти %%(t)autocmd%%. Введем %%(t)gg%% для перехода наверх. Я могу ввести %%(t)/autocmd%% и это мгновенно перенесет меня туда. Полезно. Хорошо, давайте закончим это видео, исправив это зависание. Когда я сохранял файл каждый раз в этом видео, это занимало больше времени, чем нужно. (13:00) И вот почему. Это то, что постоянно случается с пользователями Vim. Я хочу посмотреть на это в реальном времени. Это началось с этого раздела. Что происходит каждый раз, когда вы обновляете ваш файл vimrc? Он еще не знает, что вы уже создали эту автокоманду. Он снова создаст другую. И далее, каждый раз при сохранении и обновлении файла, процесс повторяется каждый раз. Если я сделаю это еще 50 раз, то процесс займет еще больше времени. (13:30) Ясно, что нам это не подходит. Мы просто хотим выполнить это один раз. Вот как можно поправить это в Vim. Теперь очень быстро… введу %%(t)zz%%, чтобы убедиться, что текущая строчка (где курсор) оказалась посередине экрана. Это здорово. Особенно в Laracasts, где когда я опускаюсь вниз, видеоплеер закрывает оставшуюся часть. Итак, я могу ввести %%(t)zz%% чтобы убедиться, что я посередине страницы. Возможно, вы хотите записать это. Хорошо, поместим это в группу: (14:00) %%(t)augroup%% и дальше можем дать любое имя. Я назову %%(t)autosourcing%%. Она будет выполнять следующее... далее введем %%(t)augroup END%%. И в конце нужно сделать еще кое-что. Эта конструкция загружает группу, что хорошо. Но кроме этого, если я введу %%(t)autocmd%% + восклицательный знак, то это очистит группу. Таким образом, мы можем быть уверенными, что мы не создали дубликатов и всегда начинаем с чистой группы. Сейчас я закрою всё целиком. (14:30) Вернем обратно Vim. Теперь, как вы видите, это происходит супер-быстро. Итак, %%(t):w%%, чтобы сохранить, и это происходит мгновенно, что важно для вас. Когда вы добавляете эти автокоманды (кстати, вы будете делать это много раз для разных файлов)... Когда вы открываете этот тип файла, нужно использовать такую подсветку синтаксиса и такие настройки. Используйте автокоманды для этого. Просто убедитесь, что они всегда хранятся в группах. Команд может быть сколько угодно в каждой группе. (15:00) На этом закончим урок. Вы узнали немало хитростей. В следующем уроке их будет еще больше.