Редактор Vim и как с ним работать
Vim — это текстовый редактор, который можно удобно настроить под себя благодаря расширениям и большому выбору инструментов для пользователя. Он работает в терминале, что даёт возможность разработчикам значительно быстрее выполнять задачи. За счёт командных функций Vim помогает увеличить продуктивность работы. Это выбор профессионалов, которые используют консоли для быстрого и удобного написания кода.
В Linux есть и другие редакторы кода, которые тоже работают в терминале. Например, редактор Vi, на базе которого и создан Vim. У него много удобных функций — можно быстро перемещаться по тексту, пользоваться командами, плагинами. Но Vim в освоении всё же более простой.
А ещё есть редактор Nano, у которого интуитивно понятный интерфейс и есть много функций, свойственных графическим приложениям. Он позволяет вырезать и вставлять, искать и заменять слова и так далее. Его удобно использовать для решения быстрых и простых задач, однако если для программиста в приоритете максимально расширенный функционал, ему всё же стоит присмотреться именно к Vim.
В чём особенность Vim
От многих других редакторов Vim отличается тем, что здесь применяется два основных режима ввода — командный и текстовый. Режимы переключаются вручную. После запуска редактор автоматически открывается в командном режиме. Когда пользователь переключается с одного режима на другой, клавиши клавиатуры начинают работать немного по-другому. К примеру, при включённом режиме вставки при нажатии клавиши «W» эта буква будет вводиться в соответствующем поле. А если вернуться к командному режиму, то эта же клавиша будет перемещать курсор вперёд на одно слово.
Такие возможности Vim позволяют пользователям обходиться без мыши — при помощи клавиатуры можно и вводить символы, и перемещаться по тексту. Это очень удобно для программистов, так как они постоянно переключаются между редактированием и просмотром кода. При этом им не нужно тратить время на перенос руки с клавиатуры на мышь или трекпад, а затем на перемещение курсора в нужное место и возвращение руки на клавиатуру.
Пользователи могут осваивать Vim и при использовании разных версий IDE, при этом им понадобится соответствующий плагин или расширение. Об этом мы чуть подробнее расскажем дальше в статье.
Начальная практика в Vim
Важно сразу приступать к практике и пробовать выполнять все задачи именно в Vim. Предстоит просмотреть текстовый файл, поправить скрипт Python или сделать какую-то заметку — непременно следует делать это всё в Vim. И уже на этом этапе разработчику пора понемногу отучать себя от использования мыши (трекпада).
Вместо заучивания множества клавиатурных сокращений нужно учиться самостоятельно анализировать и искать путь решения при выполнении любой задачи в Vim. А именно — искать самый короткий порядок нажатия клавиш для достижения конкретной задачи. Через несколько недель пользователь автоматически запоминает нужные команды.
Чтобы как можно быстрее освоить Vim, нужно использовать вышеупомянутые клавиатурные сокращения Vim повсюду. Пользователям браузеров Firefox, Chrome, Brave, Edge стоит установить расширение Vimium. Оно как раз предназначено для того, чтобы применять в деле клавиатурные сокращения Vim. С их помощью можно быстро перемещаться и отучаться таким образом от работы с мышкой.
Тем, кто использует какую-либо версию IDE, рекомендуется найти плагин или расширение для имитации клавиатурных сокращений Vim. Пользователям разных видов IDE от JetBrains хорошо подойдёт ideavim. А любителям работать с VS Code нужно будет найти расширение VSCodeVim. Для Jupyterlab тоже есть хороший вариант — нужно установить jupyterlab-vim, чтобы включились клавиатурные сокращения Vim.
При запуске редактора можно сразу начать работать с нужным файлом и применить к нему нужную опцию, набрав:
$ vim опции имя_файла
Можно применить следующие опции:
- -R — открыть в режиме «только чтение»;
- -g — включить графический режим;
- -w — сохранить все действия в файл;
- -b — воспользоваться двоичным режимом, чтобы редактировать исполняемые файлы;
- -x — активировать шифрование файла при записи;
- -d — найти различия в файлах (потребуется указать несколько файлов для открытия);
- -C — включить режим совместимости с Vi;
- -n — отключить функцию автоматического сохранения для восстановления файла при ошибке;
- «+команда» — эта опция отвечает за выполнение команды после запуска редактора;
- +номер — перемещение курсора к определённой пользователем строке после запуска;
- +/шаблон — найти нужный участок в шаблоне и переместить курсор к его началу.
Командный режим
Все введённые символы редактор будет воспринимать как команды. При этом можно дублировать команды, используя цифры. К примеру, если перед введением буквы h нажать цифру 4, то курсор переместится влево не на 1 символ, а сразу на 4. Команды для перемещения по тексту:
- h или l — переместить курсор влево или вправо на 1 символ;
- j или k — переместить курсор на 1 строку вверх или вниз;
- w или b — переместить курсор на 1 слово влево или вправо;
- H — уйти в нижнюю часть экрана;
- G — пролистать до конца файла;
- zz/zt/zb — перемещать по экрану строку с курсором в середину/верх/низ;
- Ctrl+u или Ctrl+d — прокрутить область просмотра в верхнем или нижнем направлении на полстраницы.
Команды для вставки и копирования:
- p или P — вставить текст после курсора или перед ним;
- y — скопировать символ;
- yy или Y — скопировать целую строку.
Команды для отмены и удаления:
- u — отменить последнее действие;
- U — отменить последнее действие в указанной строке, где стоит курсор;
- d — удалить символ;
- dd — удалить строку целиком;
- D — удалить всё, что находится на участке от курсора до конца строки;
- dt — удалить часть текста, которая находится между местом курсора и следующим вхождением конкретного символа;
- ciw — удалить конкретное слово и сразу переключиться в режим ввода;
- C — удалить текст начиная от места курсора и до конца строки, затем снова автоматически происходит переход в режим ввода.
Некоторые команды не работают без указания дополнительных условий. Например, для удаления четырёх символов слева от курсора, нужно задать не просто d, а d4h, — тут мы добавили цифру (количество символов) и команду h (она перемещает курсор влево на 1 символ).
Ещё несколько полезных команд:
- v — выделить текст;
- ggvG= — выровнять текст во всём файле (переместиться в начало, переключиться на режим VISUAL, выделить весь текст документа, настроить отступ выделенных строк);
- . — повторить ещё раз последнюю команду;
- n или N — продолжить поиск вперёд или назад;
- ~ — переключить регистр у символа, который выделен или на котором находится курсор;
- /шаблон — искать вхождение;
- %s/шаблон/заменить — заменить первое слово вторым;
- ZZ — сохранить и выйти из редактора.
Ещё раз напомним — не нужно специально заучивать команды. И вообще, лучше посмотреть на них немного под другим углом, ведь они как раз хорошо показывают, что в программе работать удобно и быстро. И мышью пользоваться не обязательно.
Режим вставки (текстовый)
Чтобы перейти в этот режим из командного, нужно использовать команду i. Причём она не просто включает его, но и сразу вставляет текст в область до курсора. Любой введённый символ редактор не будет считает командой, а вставит его в текст. Чтобы обратно перейти в командный режим, нужно нажать клавишу «Esc».
В текстовый режим можно переключиться и с помощью других команд:
- I — вставить текст с начала строки;
- a — вставить текст в область после курсора;
- A — вставить текст в конец строки;
- r — заменить символ;
- R — заменить несколько символов;
- o — создать строку ниже строки с курсором;
- O — создать строку выше строки, где находится курсор.
В этом режиме тоже можно настроить программу под себя, чтобы выполнять задачи быстрее. Пользователь может задать полезные для себя сочетания клавиш. Например, сделать так, чтобы при нажатии открывающейся скобки сразу же добавлялась закрывающая скобка, а курсор помещался внутри между ними. Кстати, перечисленные команды также можно дублировать при помощи цифр.
Режим командной строки
Для включения этого режима пользователь, находясь в командном режиме, должен нажать двоеточие (:). Теперь нужно задать конкретную команду для поиска или замены — ввести её и потом нажать клавишу «Enter». Как только она выполнится, Vim автоматически вернётся в командный режим. В режиме работают следующие команды (в начале не забываем ставить двоеточие):
- e файл — создать новый файл;
- r файл — вставить содержимое этого файла в текущий файл;
- w — сохранить изменения;
- r! — задать выполнение команды оболочки и вставку полученного ответа в Vim;
- buffers — просмотреть открытые файлы;
- set переменная=значение — задать значение переменной для управления процессами редактора;
- q — выйти из Vim;
- q! — выйти из Vim, не сохранив изменения.
Визуальный режим
Этот режим похож на вышеописанный. С помощью команд, используемых вместе со стрелками и командами навигации, пользователь может выделять части текста и затем использовать для них команды командного режима. По сравнению с ним визуальный режим удобнее, потому что здесь разработчик сразу видит, к какому блоку текста применится команда.
Команды визуального режима:
- v — переход в посимвольный режим;
- V — переход в построчный режим;
- CTRL-V — переход в режим визуального блока.
Про клавишу «Caps Lock»
Обычно эта клавиша мешает, но её можно использовать для своих целей, так как она находится в удобной области клавиатуры. Речь идёт о превращении «Caps Lock» в клавишу «Esc». В редакторе Vim как раз такая клавиша нужна для того, чтобы переключать режимы.
Для разных ОС своя инструкция по превращению клавиши «Caps Lock» в «Esc»:
- Windows и WSL — понадобится программа uncap;
- MacOS — можно просто использовать системные настройки;
- Linux — здесь пользователям нужны StackOverflow и Google.
Для пользователей Линукс хорошо подходит setxkbmap — она позволяет сделать из «Caps Lock» ещё одну клавишу «Esc». Затем нужно просто включить автозапуск setxkbmap при запуске системы:
setxkbmap -option caps:escape
Немного о vimtutor
Для изучения программы в неё встроили справочную систему vimtutor. В принципе, её использовать нет необходимости, особенно если пользователь уже испытал редактор на практике. Но заглянуть туда можно.
Для запуска справки нужно включить командный режим и набрать:
Затем нужно будет нажать :q для выхода из справочника.
Примечание. Пользователям Windows стоит пользоваться специальной подсистемой для Линукса — WSL (Windows Subsystem for Linux). Она хорошо подходит не только для изучения vimtutor, но и для дальнейшей работы с редактором.
Практика в сочетании с vimtutor помогают пользователям быстро освоить этот не совсем стандартный редактор. Он может показаться несколько непростым тем, кто привык работать в оконном режиме, но благодаря ежедневному использованию Vim каждый сможет освоить его за считанные недели.
Запоминаем главное
Vim помогает работать быстрее и не использовать мышь или трекпад.
Лучше всего изучать Vim на практике, применяя команды без их заучивания.
В Vim есть 4 основных режима — командный, текстовый, режим командной строки и визуальный.
Клавишу «Caps Lock» можно преобразовать в клавишу «Esc» и использовать её для переключения режимов.
Можно использовать встроенный в редактор справочник vimtutor для более детального изучения программы.
Редактор кода Vim: чем он так хорош и пользуются ли им в 2022 году?
Поговорим о самом противоречивом редакторе текста с 50-летней историей.
Что такое Vim?
Vim – это древняя модификация текстового редактора Vi, созданного Биллом Джоем в 1976 году. Vim, в свою очередь, появился спустя 15 лет и стал одним из наиболее значимых приложений в истории компьютеров.
Vim использует довольно специфичную по нынешним временам модель управления, полностью построенную на идее модальности в угоду устаревшим клавиатурам, на которых не было стрелок и других уже привычных для нас клавиш.
Несмотря на то, что нужды в Vim сейчас нет, он все еще популярен. Его поклонники образовали чуть ли не религиозный культ, строго верующий в Vim, защищающий его от противников и всячески продвигающий в обществе как лучшее, что могло быть изобретено для редактирования текста.
99% поклонников Vim – это разработчики и гики, пытающиеся добиться максимальной эффективности от используемых инструментов, и Vim в этом всяческим им помогает за счет гибкой системы настроек, такого же гибкого управления и бесконечной модифицируемости.
Давайте же подробнее разберемся в том, чем примечателен Vim и стоит ли вообще его пробовать.
Комьюнити теперь в Телеграм
Подпишитесь и будьте в курсе последних IT-новостей
Чем хорош Vim?
Надо сразу сказать, что популярность Vim обоснована не только одной лишь верой в святость редактора и его преклонным возрастом. Да, эти факторы имеют значение, но в основе все же лежит рабочая идея и богатая функциональность.
Эффективность
Мы еще поговорим об основных концепциях Vim, когда затронем его философию, но главная причина любви к Vim – его эффективность.
Досконально изучив инструмент и натренировавшись в его использовании, вы становитесь на голову выше других спецов, потому что попросту тратите меньше времени на выполнение рутинных задач. Быстрее удаляете строки, быстрее перемещаетесь по коду, быстрее вносите изменения в разных участках файла и приложения целиком. При этом тратите не только меньше времени, но и меньше сил.
Вездедоступность
Вы учите Vim один раз и пользуетесь им везде. Независимо от выбранной ОС, у вас всегда будет доступ к Vim, и он будет таким же, как Vim в любой другой системе (если, конечно, вы не обвешаете редактор на своем ПК плагинами и темами).
А чем плох?
Возникает вопрос, почему Vim не используют все разработчики, раз он такой хороший. Ответ кроется в пороге вхождения. Он настолько высок для нового поколения пользователей ПК, что в интернете до сих пор гуляют мемы про то, как сложно закрыть Vim, если случайно его запустил.
Vim, без преувеличения, сложен в освоении. Даже заставить человека отказаться от использования стрелок и перейти на так называемый home-блок клавиш – тот еще квест.
Так выглядели клавиатуры раньше. Здесь есть только home-блок
Чтобы освоить Vim и получить от него пользу (и удовольствие, конечно же), надо этого захотеть. А захотят ли этого разработчики? Только энтузиасты, которым не сидится на месте ровно и хочется что-нибудь понастраивать и поломать. А работяги в энтерпрайзе, привыкшие ко всем благам IntelliSense и безумного рефактор-тула от JetBrains, вряд ли поверят, что тратить время на изучение архаичного редактора – хорошая идея.
Философия Vim
Как я уже писал выше, Vim – не просто программа, а целое движение в мире IT. Поэтому на начальных этапах знакомства с редактором вы наверняка будете испытывать неловкость и закономерное недоумение. Вероятно, так себя чувствуют люди, которые вот-вот вступят в какую-то секту.
Но когда вы перешагнете грань, вы устремитесь в дивный мир модальности и архаичного управления, заставляющего иначе взглянуть на работу с компьютерами в целом, а не только на редактирование кода.
Никаких мышей
Первая часть глобальной концепции Vim – полный отказ от мыши как от органа управления компьютером. Во времена, когда Vi только зародился, подобных манипуляторов в ходу не было. Клавиатура была единственным способом взаимодействия с компьютером (и на ней даже стрелок не было).
Управление осуществлялось с помощью специальных текстовых команд и сочетаний клавиш.
Современный Vim полностью наследует эту особенность и возвращает нынешних программистов в прошлое, позволяя отказаться и от мыши, и от необходимости покидать home-блок клавиатуры (ряд клавиш, до которых дотягиваются пальцы при их размещении на специальных бугорках-навигаторах для слепой печати).
Модальность
Одна из вещей, которая с ходу ставит в ступор большинство новичков, решивших начать изучение Vim – это перемещение по тексту с помощью клавиш H,J,K,L. То есть нельзя сразу открыть редактор и начать менять в нем текст. Для этого нужно зайти в специальный режим.
В Vim есть несколько режимов. Два основных:
- COMMAND – в нем нельзя менять текст (только удалять отдельные знаки), потому что он создан для управления программой и ее интерфейсом – для перемещения по коду, деления экрана на несколько частей, открытия новых документов и прочих утилитарных задач.
- INSERT – этот режим позволяет редактировать текст, как в любом другом редакторе. То есть вы пишите что-то, а контент тут же отображается.
Между этими режимами нужно постоянно переключаться, чтобы управлять программой и при этом вводить в текст. Для этого в Vim есть сразу несколько клавиш.
Также есть отдельный режим для копирования текста и его вставки.
Изначально явление модальности в Vim обосновано ограниченностью клавиатур 50-летней давности, а сейчас нежеланием некоторых разработчиков выламывать себе кисти в попытках добраться до стрелок или трекпада. И это, пожалуй, главное преимущество Vim.
Vim и священные войны
Vim, почти как и любой продукт с большой аудиторией, формирует вокруг себя что-то в духе идолопоклонничества. Появляется масса пользователей, устраивающих конфликты на ровном месте.
Поэтому в сети найдется по меньшей мере пара сотен форумных веток, в которых фанаты Vim ругаются с адептами Emacs или Nano. Уровень адекватности там на минимуме.
Vim – действительно отличное приложение с целой философией, но все же не божество какое-то. Это редактор, такой же, как все остальные, и строить вокруг него культ нелепо. Так что, освоив Vim, не начинайте развязывать холивары на просторах сети.
Как установить Vim и начать им пользоваться?
Впоминаем, что Vim по умолчанию установлен во всех популярных операционных системах, и сразу же отметаем пункт с установкой. Не нужно ничего скачивать или устанавливать. Достаточно запустить Vi и выбрать файл, который нужно с помощью него открыть.
Запускаем терминал в Linux и macOS или программу PowerShell в Windows. Вводим команду:
cd \[путь/до/папки/с/файлом]
Затем запускаем редактор с помощью команды:
vi \[путь/до/файла/название-файла.js]
Перед вами появится текст выбранного файла. По умолчанию в нем не будет ни подсветки синтаксиса, ни автодополнения, ни других привычных вещей. Вас ждет голый текст и непривычное управление.
На этом моменте и начинается знакомство с Vim.
Базовые клавиши для управления
Для начала нужно освоиться в управлении и понять, что можно делать в Vim, а чего нельзя. Чтобы перемещаться по тексту, используем клавиши H (влево), J (вниз), K (наверх), и L (вправо).
Никто не запрещает использовать для перемещения курсора клавиши-стрелки, но такой подход рушит концепцию Vim. Лучше сразу привыкать к более каноничному способу перемещения по тексту.
Чтобы удалить текст, мы используем клавишу X. Для выделения текста нужно перейти в визуальный режим при помощи клавиши V.
А чтобы ввести текст, переходим в режим INSERT. Это можно сделать несколькими способами, но вот два основных:
- Нажатие на клавишу I, чтобы начать ввод текста прямо на месте курсора.
- Нажатие на клавишу O, чтобы начать ввод на новой линии.
Для выхода из режима INSERT, нажимаем на кнопку Esc или комбинацию клавиш Ctrl +
Продвинутые пользователи переназначают Esc на другие комбинации клавиш, потому что на современных клавиатурах Esc находится слишком далеко и к ней приходится тянуться, а это противоречит концепции Vim.
Чтобы скопировать текст, используем клавишу Y, а чтобы вставить – P.
Модификаторы команд
Большая часть опций в Vim реализуется через комбинации клавиш. Попытавшись набрать какой-то текст в режиме Command, вы увидите, что в командной строке внизу окна появляются символы, но ничего не происходит, если вы не попадете в какую-либо команду.
Например, если ввести в это поле dd, то Vim удалит строку, на которой расположен курсор. Если ввести gg, то курсор перескочит в начало файла и т.п. К командам можно добавлять цифры, тогда она будет применяться несколько раз. 5dd – удалить не одну линию, а сразу 5.
Чтобы закрыть Vim, нужно ввести команду :wq. Она запишет внесенные изменения и вернет вас в терминал. Чтобы изменения не сохранялись, надо ввести :q!.
Краткий референсный список команд
- 7j – сместит курсор на 7 строк вниз.
- w – сместит курсор на одно слово вперед.
- G – сместит курсор в конец документа.
- dw – удалит одно слово.
- dt – удалит текст вплоть до символа
- cc – удалит весь контент со строки и переведет редактор в режим INSERT.
- . – повторно активирует последнюю выполненную команду.
- /function – найдет в тексте слово function (все его повторения).
С полным списком можно ознакомиться во встроенном обучающем приложении или в документации к Vim.
Управление интерфейсом
Помимо команд для работы с текстом, в Vim есть отдельный список команд для взаимодействия с внешними файлами и интерфейсом. Здесь я опишу только две из них, чтобы вы поняли идею.
- :split – поделить редактор на два окна. Такой режим можно использовать как для просмотра одного документа в двух разных местах, так и для параллельного редактирования нескольких документов.
- :edit – позволяет выбрать файл, который мы будем редактировать.
Базовая конфигурация
Универсального конфигурационного файла для Vim, который подошел бы всем, не существует. Все равно придется самостоятельно подбирать для себя удобный набор параметров и расширений.
Но есть пара опций, которые нужно изменить сразу, чтобы Vim ощущался более канонично и работал так, как это подразумевалось 50 лет назад.
- Открываем конфигурационный файл при помощи команды:
vi ~/vim/.vimrc
- Внутри прописываем текст inoremap jj . Эта директива заменит нажатие ESC на команду jj. Это более естественный и удобный способ выхода из INSERT-режима.
- Так как мы часто используем клавишу Ctrl внутри Vim, надо переназначить ее на что-то близкое к home-блоку клавиатуры, например на Caps Lock.
- Затем меняем базовый список директив для отображения количества линий, включения отображения подсветки синтаксиса и т.п.
syntax on # highlight syntax set number # show line numbers set noswapfile # disable the swapfile set hlsearch # highlight all results set ignorecase # ignore case in search set incsearch # show search results as you type
Может ли Vim заменить современные редакторы?
Да, причем может обойти их в плане функциональности. Последнии версии Vim можно сильно модифицировать, добавив туда поддержку современных языков программирования и дополнительных утилит, упрощающих разработку.
Фактически его можно превратить в полноценную IDE. Для этого нужно только найти подходящие плагины. С авдополнением кода и подсветкой синтаксиса проблем не будет. Установить ESLint и Prettier тоже можно. Даже поддержка TypeScript не станет проблемой. Свежие языки в духе Rust будут работать.
Более того, у Vim есть модификация под названием Neovim, которая весь этот набор опций предоставляет по умолчанию, с удобнейшим менеджером плагинов для расширения функциональности редактора, сохраняя его уникальную концепцию.
Vim актуален в 2022 году. Для него создают плагины, его поддерживают и обновляют.
Neovim
Neovim – это попытка сохранить все лучшее, что есть в Vim, и при этом убрать все недочеты, коих не так мало в связи с возрастом редактора.
Создатели Neovim добавили в редактор удобный пакетный менеджер, позволяющий устанавливать более продвинутые версии плагинов на базе языка LUA. Также в нем есть поддержка LSP, что гарантирует подсветку синтаксиса и автодополнение кода для любых существующих языков программирования.
В Neovim можно добавить функцию Fuzzy Search, боковую панель для быстрого поиска файлов в проекте, вкладки, интеграцию с GitHub и даже дебаггер.
Это значит, что решившись на переход с VSCode в Neovim, при грамотной настройке и толике терпения, вы не потеряете вообще ничего. С функциональной точки зрения у вас будет идентичная среда разработки. При этом вы получите все прелести Neovim в виде очень высокой производительности, независимости и удобной системы управления текстом.
Если есть желание опробовать Vim, но нет желания лишаться благ современных приложений для разработки, то Neovim – то, что нужно.
Другие редакторы, поддерживающие идею Vim
Концепция Vim близка не только создателям самого редактора в его современной итерации. Подобную модель управления можно встретить в других редакторах и добавить в другие приложения (даже не связанные с разработкой ПО).
Редакторы с управлением, как в Vim
- OniVim 2 – это комбинация сразу трех редакторов: Sublime Text, Vim и VSCode. Красивый редактор с высокой производительностью, поддержкой плагинов для VSCode и управлением, как в Vim.
- LunarVim – еще одна полноценная IDE на базе Neovim.
Другие Vim-подобные расширения и приложения
- Vimium – это дополнение для Google Chrome, позволяющее перенести управление браузером с мыши на клавиатуру. Полностью.
- Vimac – то же, что и Vimium, только в масштабах операционной системы (утилита для macOS).
- VSCodeVim – расширение для VSCode, заменяющее стандартную модель управления на ту, что принята в Vim.
Конкуренты Vim
Фанатам Vim ведь нужно с кем-то ругаться на форумах. Для этого нужны редакторы с иной идеологией, и таких хватает. Причем речь идет не о современных решениях вроде WebStorm. Речь о таких же консольных редакторах, но с иным управлением.
- nano – очень популярный редактор. Известен почти так же, как и Vim, потому что доступен почти на всех операционных системах, включая macOS.
- Emacs – в ранних итерациях запускался в консоли и был одним из первых с ныне привычной системой управления.
- slap – что-то среднее между nano и vim. С полноценной поддержкой мыши для тех, кто все же не может отказаться от нее и не готов учиться работать только с клавиатурой.
Как выучить Vim?
Если вы собрались с мыслями и все-таки решили, что концепция Vim вам по душе, то нужно с умом подойти к его изучению. Эта статья не тянет на гайд, поэтому посоветую почитать другие.
Статья Дэниеля Мислера – пожалуй, лучший ликбез по Vim. Расписано все – от базовой конфигурации до самых труднообъяснимых концепций. Достаточно прочитать этот материал, и вы будете отлично ладить с Vim и сможете настроить его под свои нужды.
Официальная документация Neovim – отлично скомпонованная вики-подобная коллекция статей про Vim, помогающая быстро понять, что к чему. Материалы удобно категоризованы, поэтому к ним легко возвращаться по мере необходимости, чтобы подтянуть конкретные знания.
Вместе с Vim в комплекте идет утилита под названием Vimtutor. Это интерактивная школа по обучению азам Vi. Можно начать свое знакомство с редактором именно с Vimtutor, но я бы все же советовал два вышепредложенных варианта.
Вместо заключения
На этом все. Vim – это отличный редактор, который заставит вас полностью переосмыслить то, как вы обычно работаете с кодом. Да, изучать его сложно, но если вы потратите на это время и силы, то будете вознаграждены.
Текстовый редактор VIM — краткое руководство
VIM (сокр. от Vi Improved, произносится «Вим») — текстовый редактор, созданный на основе более старого Vi. Ныне это один из мощнейших текстовых редакторов с полной свободой настройки и автоматизации. На выделенных серверах установлен VIM, также создан alias, который при вызове команды VI вызывает VIM. Если на сервере нет текстового редактора vim — его можно установить. Debian/Ubuntu:
# apt install vim
CentOS/AlmaLinux:
# yum install vim
- 1. Режимы работы
- 2. Основные команды перемещения по тексту
- 3. Работа с буфером
- 4. Замена текста
- 5. Как выйти из редактора VIM
Режимы работы
Существует три основных режима работы: режим команд, режим редактирования и режим последней строки.
Выход из режима редактирования осуществляется клавишей Escape (далее обозначена как esc), переход в режим редактирования клавишами i или insert.
Находясь в режиме команд, можно выполнять сложные операции редактирования текста с помощью клавиши : (двоеточие). При нажатии этой клавиши курсор устанавливается в последнюю строку экрана, поэтому данный режим называется режимом последней строки. Он считается особым типом режима команд.
Для того, чтобы открыть какой-то файл или создать новый, надо выполнить команду:
# vim путь_к_файлу/имя_файла
Например, чтобы отредактировать конфигурационный файл NGINX с помощью VIM, напишем:
# vim /etc/nginx/nginx.conf
Конечно, если вы только начинаете изучать VIM и плохо разбираетесь в работе сервисов Linux, лучше не трогать конфигурационные и системные файлы, чтобы что-нибудь не поломать. Для тренировки можно взять какой-нибудь большой текст и скопировать его в тестовый файл.
При запуске VIM по умолчанию открывается режим команд (или командный режим).
Чтобы перейти в режим редактирования, необходимо нажать клавишу i (или insert) и внести нужные изменения.
Если вместо i нажать a, текст будет вставляться за символом, на котором стоит курсор (обычно при редактировании файлов используется этот метод, но тут кому как удобнее), если нажать o — будет вставлена новая строка.
Стирать текст можно как в режиме редактирования (как в любом классическом редакторе), так и в режиме команд (клавиша esc, затем клавиша x — она работает как клавиша del, то есть стирает вперед, если нажать shift+x, то будет стирать назад по аналогии с backspace).
Чтобы перейти в режим последней строки, следует выйти в режим команд (клавиша esc), затем нажать на двоеточие (:). Далее можно либо ввести команду (рассмотрим команды далее), либо выйти обратно в режим команд (клавиша esc).
Команды в VIM можно вводить в режиме последней строки (через двоеточие) и в режиме команд (с помощью клавиши SHIFT). Отметим, что VIM воспринимает команды только в английской раскладке, поэтому перед работой не забудьте ее проверить
Основные команды перемещения по тексту
1. Перейти к строке с номером:
(esc) :номер или (esc),номер,shift+g
2. Поиск по тексту:
(esc) /слово_которое_ищем
Например, ищем слово «timeout». Переходим в режим команд (esc), вводим / (слэш) и timeout. Курсор перейдет на первое слово timeout в файле. Чтобы перейти к следующему слову timeout в тексте, нажимаем n, чтобы перейти к предыдущему — нажимаем N. Как только находим нужное нам слово в тексте — выходим из поиска клавишей esc.
3. Переместить курсор на начало следующего слова:
(esc) w (можно, например, перейти на 3 слова, нажав 3w)
4. Переместить курсор на конец следующего слова:
(esc) e
5. Переместить курсор на начало предыдущего слова:
(esc) b
6. Переместить курсор на конец предыдущего слова:
(esc) ge
7. Переместить курсор на следующий абзац:
(esc) >
8. Переместить курсор в начало строки:
(esc) 0 (ноль)
9. Переместить курсор в конец строки:
(esc) $
10. Переместить курсор на 10 строк вниз:
(esc) 10j
11. Переместить курсор на 5 символов вправо:
(esc) 5l
12. Переместить курсор в конец документа:
(esc) G или shift+g
13. Переместить слово в начало документа:
(esc) gg
14. Переместить курсор в предыдущее место:
(esc) ctrl+o
Команд для перемещения по тексту в VIM намного больше, здесь мы рассмотрели только основные, которые помогут вам освоится в VIM.
Работа с буфером
В режиме команд в VIM можно работать со строками, не используя ctrl+c, ctrl+x и ctrl+v. В Linux вместо них можно использовать сочетания клавиш ctrl+insert (копировать) и shift+insert (вставить), но мы рассмотрим примеры работы с буфером в VIM.
(esc) dd — удаляет строку в буфер (аналог ctrl+x).
(esc) 10dd — удаляет 10 строк в буфер.
(esc) yy — скопирует строку в буфер (аналог ctrl+c).
(esc) 10yy — скопирует 10 строк в буфер.
(esc) p — вставит содержимое буфера под курсором.
(esc) P — вставит содержимое буфера над курсором (аналог ctrl+v).
Замена текста
Один из мощных инструментов VIM — замена слова в тексте на другое. В Linux есть инструменты для этого, однако с помощью VIM можно, например, заменить все слова в строке.
(esc):s/что_меняем/на_что_меняем/ — в данном случае меняем первое слово «что_меняем» в строке на «на_что_меняем».
(esc):s/что_меняем/на_что_меняем/g
где g обозначает замену до конца строки, в таком случае меняются все слова «что_меняем» в строке.
Если надо менять информацию по всему файлу, то тогда пишем символ % в начале команды:
(esc):%s/что_меняем/на_что_меняем/g
В VIM есть очень удобный функционал комментирования строк.
- Комментировать блок текста от курсора до строки номер 10
. 10s/^/#/
- Комментировать блок текста от курсора до конца
Как выйти из редактора VIM
Среди пользователей Linux много шуток о том, что можно зайти в VIM и не выйти. Однако выход всё же есть. Мы расскажем, как можно это сделать.
- Стандартный выход осуществляется последовательностью нажатий (esc):q
Данная команда обычно используется в случаях, когда вы просто открыли VIM, чтобы что-то посмотреть, ничего не меняя. Если файл редактировался, то VIM не даст вам выйти, и вы увидите ошибку: E37: No write since last change (add ! to override). Если вы не хотите сохранять изменения, используйте следующую команду.
Добавив в конце восклицательный знак, мы как-будто твердо указываем VIM-у, что делать, игнорируя ошибки. Полезно, когда вы открыли файл, что-то в нем изменили или случайно что-то удалили и хотите выйти, не сохраняя изменения.
Добавив w, мы говорим VIM-у, что файл нужно сохранить с изменениями. Для начала рекомендуем научиться использовать режим последней строки, т.е. команды q! или wq. Со временем для ускорения работы можно начать использовать shift+zq и shift+zz.
- Выход с принудительным сохранением (например, если файл read-only):
(esc):wq!
Редактор, из которого не выйти. Как перестать бояться Vim и начать его использовать
Vim — один из самых противоречивых инструментов из всех видевших свет. Это не просто редактор, это лакмусовая бумажка, четко разделяющая программистов, администраторов и юниксоидов на своих и чужих. Пока одни задаются вопросом, зачем нужна эта мертвечина в XXI веке, другие не могут представить себе жизни без 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 нужна совсем другая система мышления, переключиться на которую мало кому удается сразу.
Философия Vim
Чтобы понять, почему Vim именно такой, какой есть, и чтобы научиться использовать его эффективно, необходимо запомнить две простые истины.
Истина первая. Разделение режимов Vim имеет абсолютно логичный утилитарный характер. В одном режиме ты пишешь текст, во втором редактируешь. В современных редакторах эти границы размыты, мы привыкли писать и тут же редактировать, стирать, снова писать. В режиме ввода Vim позволяет это делать, но в очень ограниченных пределах: написал не ту букву — стер, написал другую. Все остальное — в режиме редактирования (основной режим).
Истина вторая. «Хоткеи», доступные в режиме редактирования, — это вовсе не хоткеи, а мощная система команд с аргументами, циклами и регистрами. При использовании Vim ты ни в коем случае не должен мыслить стандартным образом: сейчас я тыкну мышкой на том слове, потом нажму Backspace столько раз, сколько потребуется, чтобы его стереть, напишу другое слово, а потом перемещу курсор обратно. Вместо этого ты должен отдать редактору команду: замени вон то слово на это и верни меня обратно.
Чтобы проиллюстрировать этот принцип, взглянем на простой пример. Допустим, ты просматриваешь только что написанный текст и решаешь, что в абзаце, на котором в данный момент расположен курсор, последнее предложение лишнее и его следует удалить.
Первая идея, которая придет тебе в голову, — взять мышку, выделить последнее предложение, выбрать в меню «Вырезать» или нажать Del. Звучит просто и логично, но что ты скажешь про это?
Нажатие этих трех кнопок сделает то же самое. Я очень удивлюсь, если на это у тебя уйдет больше пары секунд.
Что они значат? Давай разберемся:
- > — команда перемещения, перебрасывает курсор в конец абзаца;
- d — команда изменения, а именно удаления (d — delete);
- ( — команда перемещения, перебрасывает курсор в начало предыдущего предложения.
Так как команды перемещения могут быть аргументами команд изменения, вся команда на человеческом языке звучит так: > — переместить курсор в конец абзаца, а затем d( — удалить все символы до начала предыдущего предложения. А если совсем просто: удалить последнее предложение текущего абзаца.
Команды можно повторять, например: 3> — переместить курсор на три абзаца вперед, >d2( — удалить два последних предложения в абзаце, 3J — объединить следующие три строки в абзац (J — Join), 3w — перейти на три слова вперед (w — word), 50G — перейти к пятидесятой строке (G — Go).
Другой пример: ты опять же просматриваешь готовый текст и замечаешь слово Windows, которое лучше заменить на Linux. Решение в лоб — поставить курсор перед ним, нажать клавишу Del нужное количество раз, затем написать другое. Решение в затылок — переместить курсор на слово, нажать извращенную трехпальцевую комбинацию замены слова и написать другое. Правильное решение:
/WincwLinux
- /Win — команда перемещения с помощью поиска (в данном случае ищем Win);
- cw — команда замены (c — change) с аргументом «слово» (w — word);
- Linux — новое слово.
Чтобы просто удалить слово, можно использовать такую команду: /Windw (dw — delete word). Обрати внимание: в отличие от «поиска и замены» тебе не обязательно писать слово целиком. Более того, ты можешь сделать то же самое другими методами. Например, если слово Windows второе в третьем предложении, заменить его можно так: <3)wcwLinux.
Теперь о том, как редактировать код. Представь, что ты пишешь или просматриваешь свой код и замечаешь, что метод текущего класса, вызов которого находится под курсором, используется только здесь и поэтому его лучше сделать приватным. То есть тебе надо перейти к декларации метода и вставить перед ним слово-модификатор private .
Нуб в этой ситуации будет действовать прямолинейно: промотает код, найдет в нем нужный метод, тыкнет мышкой, вставит private перед именем метода, а потом промотает обратно. Более продвинутый разработчик использует хоткей для быстрого перехода к декларации метода, он может даже использовать другой хоткей, чтобы быстро сделать метод приватным, а самый продвинутый еще и воспользуется хоткеем для возврата.
Пользователь Vim сделает так:
gdiprivate ``
- 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.
Нарисовать линию ———- можно так: вводим символ — , затем переключаемся в обычный режим с помощью Esc и вводим команду x10p (x вырезает символ под курсором, 10p вставляет его десять раз).
Команда . выполнит предыдущую команду. И да, ее тоже можно зациклить: 3. — повторить предыдущую команду три раза. Команда qa начнет запись макроса с именем «a», остановить запись можно нажатием q. Выполнить макрос: @a.
Vim поддерживает огромное количество других команд, и первое время ты будешь теряться в том, как и что здесь работает. Однако большая часть функций тебе не понадобится. Ты должен заучить базовые команды модификации текста (удаление, вставка и так далее) и базовые команды перемещения (прыжки по словам, строкам, абзацам, блокам кода, меткам и прочему). Просто объединяй их, и ты сможешь сделать практически все в несколько нажатий кнопок.
Командный и визуальный режимы
Называя приведенные в предыдущем разделе комбинации клавиш командами, я нарочно отошел от стандартной терминологии Vim, чтобы как можно более четко объяснить, как это все работает. На самом деле в Vim есть отдельный командный режим, больше похожий на классическую командную строку, и он позволяет делать еще более продвинутые вещи.
Присоединяйся к сообществу «Xakep.ru»!
Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее
Евгений Зобнин
Редактор рубрики X-Mobile. По совместительству сисадмин. Большой фанат Linux, Plan 9, гаджетов и древних видеоигр.
Илья Русанен
Главный редактор ][, занимаюсь разработкой и безопасностью