Основные команды Vim, которые помогут вам начать работу

Познакомьтесь с Майки:

Когда мы в последний раз видели Майки, он был всего лишь честолюбивым бизнесменом, который использовал программирование, чтобы следить за ежедневными цифрами продаж своего киоска с лимонадом. Подробнее о прошлых приключениях Майки можно прочитать здесь.

Оказывается, Майки так понравился его первый проект, что теперь он использует все свое свободное время для написания кода, который управляет практически всеми задачами его бизнеса. Сегодня в школе Майки слышал, как крутые семиклассники говорили о чем-то под названием Vim, но он ничего об этом не знает. Майки идет в Google и пытается узнать больше информации.

Что такое Vim?

Майки удивлен тем, что он находит. Получается, что Vim — это, по большей части, не более чем текстовый редактор, пусть и чрезвычайно мощный. К сожалению, для Майки использование Vim сопряжено с некоторой кривой обучения, но Майки нашел в Google несколько основных команд, которые он хочет попробовать. Давайте напишем код вместе с Майки и посмотрим, что представляет из себя этот Vim.

Вход в Vim

Войти в Vim довольно просто. Просто перейдите в каталог через терминал и введите vim insert_file_name_here в командную строку. Это откроет ваш файл в Vim.

Вставка/командный режим

Когда Vim открывается, он находится в командном режиме. Находясь в командном режиме, вы сможете перемещаться по тексту и редактировать его с помощью команд Vim. Он не всегда работает так, как вы ожидаете, если вы пытаетесь использовать его как стандартный текстовый редактор. В этом посте есть несколько моментов, где будет текст, который вы можете скопировать/вставить в свой файл. Когда вы будете вставлять скопированный текст, не забудьте войти в режим вставки, нажав клавишу i. Давайте insert добавим текст в наш файл:

Three words.
Two WORDs…!

Вы можете копировать и вставлять, как обычно, в режиме вставки. Чтобы вернуться в командный режим, просто нажмите клавишу esc.

Команды h/j/k/l

Vim не реагирует на мышь так, как мы привыкли, ни внутри, ни вне командного режима. В результате навигация, как правило, осуществляется с помощью клавиатуры. Хотя Vim будет реагировать на стрелки направления на клавиатуре, лучше всего привыкнуть к командам h/j/k/l:

h — moves the cursor one space left
j — moves the cursor one space down
k — moves the cursor one space up
l — moves the cursor one space right

Попробуйте использовать любую из команд h/j/k/l в просматриваемом файле. Возможность перемещать курсор — хорошее начало, но перемещение на одну позицию за раз не очень эффективно. Давайте рассмотрим несколько способов перемещения курсора более чем на одно место за раз.

"СЛОВО" и "слово"

Прежде чем двигаться дальше, важно отметить, что некоторые из следующих команд предназначены для навигации между «словами» и «СЛОВАМИ». Найдите минутку с Майки, чтобы попытаться отличить слова от СЛОВ, как это определено VIM Adventures:

  • Слово состоит из последовательности букв, цифр и знаков подчеркивания или последовательности других непустых символов, разделенных пробелами (пробелы, табуляции, EOL). Пустая строка также считается словом.

Three words.

  • WORD состоит из последовательности непустых символов, разделенных пробелами (пробелы, табуляции, EOL). Пустая строка также считается СЛОВОМ

Two WORDS…!

‘w’ vs ‘W’

Команды w и W будут перемещаться по словам и СЛОВАМ соответственно.

Команда w переместит курсор вперед к началу следующего слова. Давайте посмотрим на наш пример слова из предыдущего:

- three w commands will navigate over each of the words below
Three words.

Теперь давайте посмотрим на наш предыдущий пример WORD:

- two W commands will navigate over each of the WORDs below
Two WORDs…!

Протестируйте новые команды w/W вместе с Майки.

‘e’ vs ‘E’

Команды e и E работают так же, как и w/W, за исключением того, что e/E переместит курсор вперед к концу следующего слова, а не к его началу. Майки добавляет следующее в свой текстовый файл, чтобы опробовать команды e/E. Сделаем с ним:

sugar-free gum

‘b’ vs ‘B’

Помните, как команды w/W переводят вас в начало следующего слова/СЛОВА? Команды b/B переместят вас в начало предыдущего слова/WORD. Майки собирается добавить следующий пример в свой текстовый файл и попробовать использовать каждую из команд w/W, e/E и b/B. Ты сделаешь это с ним?

Tuesday’s doctor appt.

‘0’ vs ‘$’

Переход от слова к слову определенно пригодится, но что, если мы хотим перевести курсор с начала строки в конец строки? В качестве альтернативы, что, если мы хотим вернуться к началу строки, пока наш курсор находится в конце строки? Переход слово за словом может занять несколько нажатий клавиш. К счастью, у нас есть команды с цифрами 0 и $. Сделайте то, что делает Майки, и скопируйте/вставьте следующее в свой текстовый файл, затем попробуйте перемещаться по файлу с помощью команд 0/$ вместе с любой из предыдущих команд:

Fourscore and seven years ago our fathers brought forth on this continent, a new nation, conceived in Liberty, and dedicated to the proposition that all men are created equal.

‘x’ vs ‘X’

Команда x позволяет нам удалить пробел после позиции курсора. Команда X удаляет пробел перед позицией курсора. Майки копирует следующее в свой текстовый файл, чтобы поэкспериментировать с командами x/X. То, что произойдет дальше, повергнет вас в шок…

You’ll never get away with this!!!

‘dd’

То же самое можно сказать и о командах x/X, поскольку пословная навигация может потребовать значительных усилий. Удаление одного символа — это определенно то, к чему мы хотим иметь доступ, но сама по себе команда не очень эффективна при удалении. Выполнение команды dd позволяет нам удалить всю строку всего двумя нажатиями клавиш (первое d вызывает команду удаления, второе применяет ее к текущей строке). Майки копирует и вставляет следующее в свой текстовый файл, а затем пытается поэкспериментировать с командой dd (не волнуйтесь, если ваш текст пропадет. Мы позаботимся об этом через секунду):

All work and no play makes Jack a dull boy.
All work and no play makes Jack a dull boy.
All work and no play makes Jack a dull boy.
All work and no play makes Jack a dull boy.
All work and no play makes Jack a dull boy.
All work and no play makes Jack a dull boy.
All work and no play makes Jack a dull boy.

Команда «dd» удалит всю строку независимо от местоположения курсора.

отменить/повторить

Майки так обрадовался, что удалил весь свой текст. Ничего страшного. Давайте отменим наши действия по удалению строки. Майки просто вводит u (находясь в командном режиме) для каждого действия, которое он хочет отменить. Команду повтора можно использовать с CTRL + r. Давайте отменим наши изменения, чтобы мы могли вернуть наш текст.

Объединение команд Vim в цепочку

Майки довольно хорошо чувствует свои навыки работы с Vim. Он решает показать их своему другу Томми, когда они играют днем, но Томми не впечатлен. Он говорит Майки, что, хотя концепция крутая, ничто из того, что он делает, не оказалось более эффективным, чем использование текстового редактора, такого как Atom или Sublime. Майки понимает, что Томми был прав, и чувствует, что вся его практика Vim была напрасной. Бедный Майки.

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

2W

Курсор Майки переместится вперед к началу слова на 2 СЛОВА вперед. Майки пробует другую команду:

5x

Теперь Майки удалил 5 пробелов после курсора. Майки пытается сделать что-то сумасшедшее:

5dw

Теперь Майки удалил 5 слов, следующих за его курсором. Он продолжает дурачиться и обращает внимание на некоторые из методов Vim, которые он связал вместе:

  • [count], w/W : e/E : b/B : h/j/k/l — выполняет команду [count] количество раз
  • d [count] w/W : e/E : b/B : h/j/k/l — удаляет по команде action [count] количество раз
  • d 0/$- удаляет все между курсором и началом/концом строки

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

Майки выходит из Vim и может быть уверен, что со временем выучит достаточно команд, чтобы эффективно использовать Vim. Чтобы выйти из Vim без сохранения каких-либо изменений, просто введите команду quit с :q для выхода из командного режима (вам может потребоваться ввести :q!, если файл был изменен с момента его открытия). Чтобы сохранить изменения, введите команду записи перед выходом, например: :wq.

Оставайтесь с нами во второй части, где Майки собирается реализовать ряд различных методов, которые заставят Томми пересмотреть свою оценку возможностей редактирования текста Vim. Давай, Майки!