VIM – Консольный редактор: знакомство

VIM – Консольный редактор: знакомство

Обновлено 23.02.2024

Приветствую!

Это первый пост из цикла по консольному редактору Vim. Рано или поздно это должно было случиться) ведь Vim невероятно популярный редактор, который часто идет “из коробки” в большинстве дистрибутивов Linux.

Присоединяйтесь к нашему каналу: t.me/r4ven_me и чату: t.me/r4ven_me_chat в Telegram .

Предисловие

Vim (ранее Vi) – это мощный текстовый редактор для командной строки, который предоставляет широкие возможности для редактирования текстовых файлов. В этой статье мы немного познакомимся с основами его использования.

Лично я долгое время игнорировал данный редактор, потому что считал его созданными для рептилоидов/прожжонных айтишников, пока сам не стал рептилоидом не познакомился с ним поближе. В итоге знакомство перешло в детальное изучение. Особенно когда я понял, что Vim и его производные такие как Neovim – это великолепно продуманный инструмент IT специалиста, часто работающего с командной строкой Linux и не только.

Команды и функции Vi/Vim существуют уже более пятидесяти лет, начиная с редактора QED, созданного в 1966 году. За это время редактор впитал в себя лучшие практики работы с текстом и оброс всем необходим для обеспечения удобства работы с клавиатуры. Если интересно, то рекомендую почитать часть статьи с Habr про историю этого редактора: История Vim и руководство по его эффективному использованию.

Выдержка из книги Уильяма Шотса - 'Командная строка Linux' про редактор Vi
Зачем в современном мире редакторов с графическим интерфейсом и простых в использовании редакторов с текстовым интерфейсом, таких как nano, осваивать vi? На то есть три веские причины: vi всегда под рукой. Он может прийти на помощь в системах, где отсутствует графический интерфейс, например на удаленном сервере или в локальной системе с нерабочей конфигурацией X. Редактор nano, хотя и чрезвычайно популярен, все же недостаточно универсален.
POSIX, стандарт программной совместимости систем Unix, требует наличия в них vi. vi легковесный и быстрый. Для многих задач гораздо проще запустить vi, чем найти в меню редактор с графическим интерфейсом и ждать, пока несколько мегабайтов загрузится в память.
Кроме того, vi специально проектировался для скоростного ввода с клавиатуры. Как будет показано ниже, опытный пользователь vi никогда не отрывает рук от клавиатуры во время редактирования. Мы не хотим, чтобы другие пользователи Linux и Unix считали нас неженками. Хорошо, пусть будет две веские причины.

В процессе изучения я “осознал”, насколько гибок этот инструмент. Чтобы понять всю суть: для конфигурации редактора Vim, разработчики создали свой собственный скриптовый язык программирования – vimscript. А если обратить внимание на более современные форки Vim’a, например Neovim, то там реализована возможность конфигурации редактора с помощью языка программирования Lua через механизм API. Думаю не нужно говорить, что при таком раскладе возможности по расширению функционала редактора улетают в космос)

Также этот редактор может быть невероятно красив, к примеру его можно настроить так:

Но об этом в других статьях) А пока начнем знакомство.

Описанные ниже действия проводились в среде дистрибутива Linux Mint 21. Вот несколько моих прошлых материалов по этому дистрибутиву:

Установка Vim в Linux Mint

Из коробки в Linux Mint уже установлен Vim, но только его облегченная версия vim.tiny.

vim.tiny – это урезанная (или минимальная) версия редактора Vim, предназначенная для систем с ограниченными ресурсами, например, для встраиваемых систем или небольших Linux-дистрибутивов. Она обеспечивает основную функциональность Vim, но может не включать некоторые расширенные функции и плагины, которые доступны в полной версии Vim.

Ниже видно, что vim.tiny в Linux Mint скрывается под символьной ссылкой vi.

Давайте установим полноценный Vim в нашу систему:

sudo apt update && sudo apt install -y vim

После установки редактор Vim можно запустить, как из консоли, так и из главного меню Linux Mint. В процессе установки Vim создается .desktop файл для запуска редактора в отдельном окне терминала, как отдельное приложение.

Для запуска редактора выполним одноименную команду в терминале:

vim

Такое окошко вы увидите:

Тут разработчики заботливо нам сообщают, как выйти из Vim) – ввести (на английской раскладке) последовательно :q

Давайте проверим

:q

Двоеточие : тут выполняет активацию командной строки редактора, а q (quit) – это команда, которая означает выход из редактора.

Также из Vim’a можно выйти нажав ZQ т.е. при зажатом Shift поочередно нажать клавиши z и q – это выполнит выход из редактора без сохранения файла. Чтобы выйти с сохранением нужно аналогичным образом нажать ZZ.

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

При передаче имени несуществующего файла, после его сохранения уже внутри редактора, такой файл появится на диске.

Для примера откроем на редактирование файл file.txt в директории Документы нашего домашнего (~) каталога:

vim ~/Документы/file.txt

Внизу окна мы увидим название редактируемого документа:

Первое с чем сталкиваются новички – это вопрос, как начать редактировать документ. Конечно же не все так просто) Тут нужно рассказать про режимы работы в Vim.

Для вызова справки нажмите F1 или поочередно нажмите клавиши :help Enter

Режимы работы Vim

При открытии Vim режимом по умолчанию является командный режим.

Командный режим (normal mode)

В данном режиме нажатие клавиш или их комбинаций воспринимаются редактором как команды.

Например, символ:– является командой, которая вызывает консоль редактора.

Ниже я приведу наиболее используемые мной команды-клавиши командного режима.

Заглавная буква подразумевает под собой нажатие совместно с клавишей Shift, например O = Shift + o.

Курсор – это мигающий белый символ-блок, который определяют текущую позицию в структуре файла.

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

Список популярных клавиш командного режима:

  • Esc – волшебная клавиша, которая отменяет текущее действие и возвращает вас в командный режим;
  • j – перемещение курсора вниз, действует также, как нажатие клавиши стрелки вниз;
  • k – перемещение курсора вверх, действует также, как нажатие клавиши стрелки вверх;
  • h – перемещение курсора влево, действует также, как нажатие клавиши стрелки влево;
  • l – перемещение курсора вправо, действует также, как нажатие клавиши стрелки вправо;
  • u (undo) – отменить последнее действие, аналог общеизвестного Ctrl + z в GUI программах;
  • Ctrl + r (redo) – отменить отмену) аналог Ctrl + y;
  • i (insert) – переход в режим вставки перед символом, на котором курсор (об этом режиме ниже);
  • s – переход в режим вставки с удалением символа перед курсором;
  • a – переход в режим вставки за символом, на котором курсор;
  • A – переход в режим вставки с переводом курсора за последний символ в строке;
  • o – переход в режим вставки с созданием новой пустой строки ниже строки с курсором;
  • O – переход в режим вставки с созданием новой пустой строки выше строки с курсором;
  • y (yank) – команда копирования, аналог Ctrl + c;
  • yy – скопировать всю строку, на которой установлен курсор в буфер обмена (регистра);
  • p (paste) – вставка содержимого из регистра в пространство после курсора;
  • P – вставка содержимого из регистра в пространство до курсора;
  • g (go) – перемещение курсора, работает в комбинации с указателями направления;
  • gg – перевести курсор в начало файла;
  • G – перевести курсор в конец файла;
  • <1-9>G – перейти на указанную строку;
  • w (word)- переместить курсор на первый символ следующего слова;
  • e (end)- переместить курсор на последний символ текущего слова;
  • b – переместить курсор перед первым символом текущего слова;
  • $ (как regexp) – переместить курсор на последний печатаемый символ строке;
  • ^ (как regexp) – переместить курсор на первый печатаемый символ в строке;
  • 0 – переместить курсор в начало строки;
  • v – переход в режим выделения;
  • V – выделить всю текущую строку;
  • d – вырезать, аналог Ctrl + x, работает в комбинации с указателями направления;
  • dd – вырезать строку, где находится курсор;
  • x – удалить символ перед курсором, то же самое делает клавиша Del;
  • ZZ – выйти из редактора с сохранением изменений;
  • ZQ – выйти без сохранения изменений;
  • : – вызов командной строки редактора;
  • :w – запись внесенных изменений в файл, т.е. сохранить, аналог Ctrl + s;
  • :wq – выйти из редактора с сохранением изменений;
  • :q – просто выйти из редактора;
  • :q! – выйти из редактора игнорируя предупреждения.

Попробуйте попрактиковаться.

Отдельно хочу отметить механизм, когда перед командой можно указать количество раз ее повторения. Например, если ввести число 15 и затем нажать клавишу V – то вы выделите 15 строк, следующих за курсором:

Аналогично работают и другие команды, например перемещение с помощью клавиши w,b или удаление с помощью d,x и пр.

Режим вставки (insert mode)

Популярные способы перехода в режим вставки указаны выше. Чаще всего это клавиша i. О переходе в режим вставки говорит сообщение “ВСТАВКА” или “INSERT” в нижней части редактора:

Это классический режим редактирования текста, где поддерживается перемещение курсора с помощью стрелок, а также некоторые сочетаний клавиш.

Список популярных клавиш режима вставки:

  • Ctrl + w – удалить слово перед курсором;
  • Ctrl + u – удалить содержимое строки до курсора;
  • Ctrl + h – удалить символ перед курсором (тоже самое, что и нажатие Backspace);
  • Ctrl + j – перейти на новую строку (тоже самое, что и нажатие Enter);
  • Ctrl + t – добавить отступ (tab) перед текущей строкой;
  • Ctrl + d – убрать один отступ у текущей строки.

Режим выделения (visual mode)

Именно из-за появления, когда-то в далекие времена, в редакторе визуального режима (visual) он и получил свое название – vi/vim.

Визуальный режим – это режим выделения текста. Переход в этот режим осуществляется клавишей v. После нажатия можно выделять текст:

  • с помощью стрелок на клавиатуре для посимвольного и построчного выделения;
  • с помощью командных клавиш перемещения (w,e,b,$,G и пр.);

После выделения текст можно, например, скопировать нажав y, удалить нажав d,Del,x и др. Затем, например вставить клавишами p или P.

Нажав клавишу v еще раз или нажав Esc выполнится выход из этого режима.

Прошу обратить внимание, что при обычном копировании текста – происходит копирование текста во внутренний буфер обмена (регистр), а не системный. Данный буфер доступен только внутри редактора. Для взаимодействия с системным буфером обмена необходима дополнительная настройка. Для работы с системным буфером обмена всегда можно использовать терминальное выделение через Shift.

Список популярных клавиш и комбинаций визуального режима:

  • v – войти в режим выделения;
  • Shift + v – выделить текущую строку целиком;
  • v$ – выделить от текущего символа и до конца строки;
  • vG – выделить от текущего положения курсора и до конца файла;
  • gg затем Sifht + vG затем d – выделить и вырезать содержимое всего файла;
  • и пр.

Довольно ёмкая и полезная картинка по навигации в Vim:

Прочие базовые вещи

Вкратце расскажу о нескольких часто используемых процедурах при работе с редактором.

Открыть новый файл в текущем окне

Для открытия нового файла в текущем окне выполните консольную команду:

:open <имя_файла>

Нюанс! В Neovim команда :open отсутствует. Вместо нее можно использовать команду :edit, которая есть в обоих редакторах.

Обратите внимание, что после выполнения команд :open/:edit ваш предыдущий файл не закрылся, он находится в буфере сессий. Чтобы посмотреть список сессий в буфере выполните консольную команду:

:buffers

Для перехода на нужную сессию выполните:

:buffer <номер_сессии>

или

:buffer <имя_файла>

Не забывайте, что консоль Vim поддерживает интерактивную подстановку, вызываемую с помощью клавиши Tab:

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

Открыть файл в новой вкладке

Для открытия файла в новой вкладке выполните:

:tabnew <имя_файла>

Для перемещения между вкладки используйте команды перемещения, такие как gt (go tab). К примеру, чтобы переместиться на вкладку №1 в командном режиме введите: 1gt, где 1 – номер вкладки.

Разделить окно

Вызовите командную строку редактора : и введите split или split <имя_файла> для горизонтального разделения окна и vsplit или vsplit <имя_файла> для вертикального. В качестве имени файла можно указать существующий файл, в противном случае Vim откроет пустое окно нового файла.

Для перемещения курсора между окнами нажмите Ctrl + w и затем нужное направление клавишами стрелок.

Поиск по содержимому

Для входа в режим поиска нужно из командного режима нажать клавишу / и затем ввести искомый ключ. Найденное значение будет подсвечено. Чтобы перевести курсор на следующее вхождение, нажмите клавишу n, чтобы искать в обратном направлении N (Shift +n).

Обратите внимание, что по умолчанию поиск чувствителен к регистру. Чтобы временно отключить регистрозависимость введите:

:set ignorecase

Поиск и замена

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

Рассмотрим только вариант с глобальной заменой во всем файле по указанному ключу. Для этого нужно:

  • перейти в командный режим нажатием :
  • ввести строку %s/foo/bar/g
  • нажать Enter

Где:

  • %s – конструкция для обработки найденных вхождений;
  • foo – ключ, который мы ищем;
  • bar – новое значение;
  • g – применить изменения ко всем вхождения в файле.

Включить нумерацию строк

Для включения отображения нумерации строк введите с клавиатуры:

:set number

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

Вставить содержимое из другого файла

Для вставки в текущее окно содержимое из другого файла вызовите консоль редактора : затем введите read <имя_файла>. При указании имени файла без пути, подразумевается использование файла из текущего каталога. Также отмечу, что имена файлов можно протабать для подстановки. Кстати вместо read можно использовать просто символ r.

Выполнение внешних shell команд

Из консоли редактора можно выполнять внешние команды нашей оболочки. Для этого в консоли редактора нужно первым символом указать символ ! и затем ввести команду. Например, ⁣!ls -l:

Вывод команды отобразится в отдельном окошке. Для возврата в редактор нажмите клавишу Enter.

И так, список возможности и фишки редактора можно перечислять бесконечно) поэтому будет еще не один пост по настройке Vim/Neovim)

Файлы конфигурации

У Vim, как и у множества софта в Linux подобных ОС есть файлы конфигурации, которые являются отдельной обширной темой) Как было сказано вначале, для конфигурирования редактора разработчики создали отдельный скриптовый язык)

Стандартный путь файлов конфигов:

  • для Vim: ~/.vimrc
  • для Neovim: ~/.config/nvim/init.vim

Про Neovim

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

  • избавиться от описанных выше недостатков;
  • предоставить более упрощенный способ создания плагинов и расширений;
  • привнести в редактор более современные и качественные нововведения, такие как асинхронная обработка, поддержка новых языков и платформ, возможность расширять функционал редактора с помощью языка Lua, благодаря встроенному API.

Поэтому мои дальнейшие материалы, чаще всего будут именно про Neovim.

Каким может быть Vim/Neovim

Ну и несколько скриншотов моего текущего конфига Neovim и несколько взятых из интернета.

Мои:

Аля VSCode)

Пользователей с Reddit:

Автор: Oreki-H
Автор: gquittet
Автор: micro-aries
Автор: неизвестен

Спасибо, что читаете! Успехов вам в покорении вселенной Vim)

Полезные источники

Мои другие статьи по темам:

Подписаться
Уведомить о
0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии