Следующая новость
Предыдущая новость

Редактор, из которого не выйти. Как перестать бояться Vim и начать его использовать

03.10.2017 14:45
Редактор, из которого не выйти. Как перестать бояться Vim и начать его использовать

Содержание статьи

  • Самый странный редактор
  • Философия Vim
  • Командный и визуальный режимы
  • Как перейти на Vim с Sublime Text или Atom
  • Шаг 0. Выберем правильную версию vim
  • Шаг 1. Выберем эмулятор терминала с GPU-ускорением
  • Шаг 3. Сделаем базовые настройки в ~/.vimrc
  • Шаг 4. Установим пакетный менеджер
  • Шаг 5. Установим плагины и настроим их
  • Выводы

Vim — один из самых противоречивых инструментов из всех видевших свет. Это не просто редактор, это лакмусова бумажка, четко разделяющая программистов, администраторов и юниксоидов на своих и чужих. Пока одни задаются вопросом, зачем нужна эта мертвечина в 21 веке, другие не могут представить себе жизни без Vim. Но чем же он их привлекает? Почему у редактора, который появился на свет более сорока лет назад, столько фанатов в сегодняшнем мире? Попробуем разобраться.

Самый странный редактор

На первый взгляд Vim выглядит очень и очень странно. Первое знакомство с ним сопровождается страшными мучениями, когда ты просто не можешь понять, что происходит. Редактор либо вообще не реагирует на нажатия клавиш, либо ведет себя крайне неадекватно. Ты пишешь слово door, а вместо этого Vim переходит на новую строку и вставляет or. Ты стираешь эту галиматью и снова пробуешь что-то написать и, о чудо, на экране действительно появляется текст.

А потом его опять начинает глючить.

Спустя несколько попыток разобраться, как это работает, и бесчисленное количество матерных слов ты идешь в интернет и узнаешь, что Vim — двухрежимный редактор. Писать текст здесь можно только в режиме ввода (INSERT), для перехода в который следует нажать кнопку i или Insert.

Основной же режим, для выхода в который используется Esc, здесь предназначен для ввода, как тебе на первый взгляд кажется, хоткеев. Причем состоять они могут всего из одной клавиши: w — передвигает курсор к следующему слову, 0 — в начало строки, $ — в конец строки, A переводит курсор в конец строки и переключает редактор в режим ввода, u — аналог Ctrl-Z в нормальных редакторах.

Погуглив еще немного, ты обнаруживаешь, что есть также «хоткеи» из двух и более последовательных нажатий. Такие, как, например, dd, который удаляет всю строку и dw, удаляющий слово, gg и GG, которые перемещают курсор в начало и конец документа.

Немного привыкнув, ты уже можешь кое-как прыгать между режимами и вводить эти странные хоткеи — они даже начинают казаться тебе удобными, но один вопрос все-таки тебя не покидает:

— Зачем здесь эти режимы?!

«Хоткеи» Vim действительно удобны благодаря своей лаконичности, но разве необходимость переключения между режимами не убивает все их удобство? Разве не проще нажимать пусть и требующие больше движений горячие клавиши в нормальных редакторах, чем мотаться взад-вперед между режимами? Да, может быть сорок лет назад, когда на клавиатурах не было Ctrl и Alt, это и было оправдано, но сейчас-то зачем?

Так и заканчивает знакомство с Vim среднестатистический пользователь. Некоторое время он, конечно, еще потратит на то, чтобы найти выход, но затем забудет как страшный сон и вернется к своему любимому Sublime. А уж в условиях сурового сервера и nano сойдет.

Почему так происходит? По одной простой причине: для работы с Vim нужна совсем другая система мышления, переключиться на которую мало кому удается сразу.

23 мая 2017 года вопрос «Как выйти из Vim набрал один миллион просмотров на StackOverflow»

Философия Vim

Чтобы понять, почему Vim именно такой, какой есть и чтобы научиться использовать его эффективно, необходимо запомнить две простые истины.

Истина первая. Разделение режимов Vim имеет абсолютно логичный утилитарных характер. В одном режиме ты пишешь текст, во втором редактируешь. В современных редакторах эти границы размыты, мы привыкли писать и тут же редактировать, стирать, снова писать. В режиме ввода Vim позволяет это делать, но в очень ограниченных пределах: написал не ту букву — стер, написал другую. Все остальное — в режиме редактирования (основной режим).

Истина вторая. «Хоткеи», доступные в режиме редактирования, — это вовсе не хоткеи, а мощная система команд с аргументами, циклами и регистрами. При использовании Vim ты ни в коем случае не должен мыслить стандартным образом: сейчас я тыкну мышкой на том слове, потом нажму Backspace столько раз, сколько потребуется чтобы его стереть, напишу другое слово, а потом перемещу курсор обратно. Вместо этого ты должен отдать редактору команду: замени вон то слово на это и верни меня обратно.

Чтобы проиллюстрировать этот принцип, взглянем на простой пример. Допустим, ты просматриваешь только что написанный текст и замечаешь, что в абзаце, на котором в данный момент расположен курсор, последнее предложение лишнее и его следует удалить.

Первая идея, которая придет тебе в голову, — это взять мышку, выделить последнее предложение, выбрать в меню «Вырезать» или нажать Del. Звучит просто и логично, но что ты скажешь про это?

}d( 

Нажатие этих трех кнопок сделает то же самое. Я очень удивлюсь, если на это у тебя уйдет больше пары секунд времени.

Что они значат? Давай разберемся:

  • } — команда перемещения, перебрасывает курсор в конец абзаца;
  • d — команда изменения, а именно удаления (d — delete);
  • ( — команда перемещения, перебрасывает курсор в начало предыдущего предложения.

Так как команды перемещения могут быть аргументами команд изменения, вся команда на человеческом языке звучит так: } — переместить курсор в конец абзаца, а затем d( — удалить все символы до начала предыдущего предложения. А если совсем просто: удалить последнее предложение текущего абзаца.

Команды можно повторять, например: 3} — переместить курсор на три абзаца вперед, }d2( — удалить два последних предложения в абзаце, 3J — объединить следующие три строки в абзац (J — Join), 3w — перейти на три слова вперед (w — word), 50G — перейти к пятидесятой строке (G — Go).

Редактор, из которого не выйти. Как перестать бояться Vim и начать его использовать
У vim хорошая документация, просто набери :help и следуй инструкциям

Другой пример: ты опять же просматриваешь готовый текст и замечаешь слово Windows, которое лучше заменить на Linux. Решение в лоб — поставить курсор перед ним, нажать клавишу Del нужное количество раз, затем написать другое. Решение в затылок — переместить курсор на слово, нажать извращенную трехпальцевую комбинацию замены слова и написать другое. Правильное решение:

/Win<Enter>cwLinux 
  • /Win — команда перемещения с помощью поиска (в данном случае ищем Win);
  • cw — команда замены (c — change) с аргументом «слово» (w — word);
  • Linux — новое слово.

Чтобы просто удалить слово можно использовать такую команду: /Windw (dw — delete word). Обрати внимание: в отличие от «поиска и замены» тебе не обязательно писать слово целиком. Более то, ты можешь сделать то же самое другими методами. Например, если слово Windows второе в третьем предложении заменить его можно так: {3)wcwLinux.

Теперь о том, как редактировать код. Представь, что ты пишешь или просматраиваешь свой код и замечаешь, что метод текущего класса, вызов которого находится под курсором, используются только здесь и поэтому его лучше сделать приватным. То есть тебе надо перейти к декларации метода и вставить перед ним слово-модификатор private.

Нуб в этой ситуации будет действовать прямолинейно: промотает код, найдет в нем нужный метод, тыкнет мышкой, вставит private перед именем метода, а потом промотает обратно. Более продвинутый разработчик использует хоткей для быстрого перехода к декларации метода, он может даже использовать другой хоткей, чтобы быстро сделать метод приватным, а самый продвинутый еще и воспользуется хоткеем для возврата назад.

Пользователь Vim сделает так:

gdiprivate <Esc>`` 
  • gd — переходим к определению функции или метода (gd — go definition);
  • i — переключаемся в режим ввода;
  • private — слово-модификатор и пробел;
  • Esc — возвращаемся в обычный режим;
  • `` — прыгаем туда, где были до перехода (возвращаем курсор обратно).

Ты можешь сказать, что здесь у Vim нет никаких преимуществ по сравнению с хорошими средами разработки, но обрати внимание на два момента. Первый: это очень заезженный пример, и именно поэтому он легко решается с помощью современных средств разработки. Возьми ситуацию поэкзотичнее, и среда разработки окажется бессильна, а Vim позволит решить задачу быстро и эффективно.

Второй момент: как и современные средства разработки Vim имеет в своем арсенале огромное количество средств для повышения эффективности. Например, ты можешь заранее забить в конфиг Vim аббревиатуры: придумать для private псевдоним #p, который будет разворачиваться в private. А можешь повесить всю команду на одну комбинацию клавиш. Плюс для Vim есть несметное количество плагинов, которые облегчают разработку.

Кстати, обрати внимание на команду ``. Это команда ` (переход к метке) с аргументом ` (метка, которую редактор автоматически устанавливает перед любым перемещением курсора). Вместо `` можно использовать `., которая перебрасывает курсор к последнему отредактированному месту. Метки можно ставить и самостоятельно с помощью команды m, за которой следует буква. Например, ma — поставит метку «a», вернуться к которой можно с помощью `a или ‘a (для перехода к началу строки).

Это, опять же, одна из стандартных функций редакторов, но Vim может сделать ее гораздо более мощной. Как ты уже должен знать, команды модификации текста принимают в качестве аргументов команды перехода, а это значит, что прыжок к метке тоже можно использовать в качестве аргумента. К примеру, удалить текст начиная от текущего положения курсора до метки «a»: d`a.

К слову, команды удаления Vim не удаляют текст безвозвратно, а помещают его в буфер (в терминологии Vim — регистр), поэтому стандартными средствами здесь можно делать вещи, для которых в других редакторах потребовался бы отдельный хоткей. Например, менять две строки местами: ddp. Команда dd удаляет текущую строку (после чего курсор перемещается на следующую), p (paste) — вставляет текст из регистра под текущей строкой.

Вместо удаления строку можно просто скопировать с помощью yy (y — yank), а затем вставить с помощью все той же команды p. Объединим эту возможность с повторением команд и получим быстрый способ вставки множества одинаковых строк: yy10p.

Продолжение статьи доступно только подписчикам

Cтатьи из последних выпусков журнала можно покупать отдельно только через два месяца после публикации. Чтобы читать эту статью, необходимо купить подписку.

Подпишись на журнал «Хакер» по выгодной цене!

Подписка позволит тебе в течение указанного срока читать ВСЕ платные материалы сайта, включая эту статью. Мы принимаем оплату банковскими картами, электронными деньгами и переводами со счетов мобильных операторов. Подробнее о подписке

1 год

4590 р.

Экономия 1400 рублей!

1 месяц

490 р.

25-30 статей в месяц

Уже подписан?

Источник

Последние новости