Текстовый редактор VIM, основы работы

25 января, 2020 Рубрики: Linux, основы Linux

команды редактора vim Доброго времени, читатели моего блога! В данной статье расскажу о своем опыте изучения редактора vim. Это вторая реинкарнация статьи 2010 года. Опишу основные команды и принципы работы данного текстового редактора. Вопрос – Как выйти из vim тоже будет затронут :)

Редактор vim – это текстовый редактор, созданный на основе более старого – vi. Ныне это один из мощнейших текстовых редакторов с полной свободой настройки и автоматизации, и созданным благодаря этому расширениям и надстройками. Основное достоинство редактора – он есть на любой системе Linux.

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

Основной источник информации по vim в Linux – это справка и, конечно же, Google. В Linux есть отличная встроенная справка, которую можно получить несколькими способами:

  1. В режиме командной строки
    1. :help – вывод полной справочной системы по vim
    2. :help value – вывод справки, касающейся value
    3. :help value <Ctrl+D> – вывод списка разделов справки, содержащих value
  2. Утилита vimtutor содержит множество обучающих уроков.

Запуск vim производится следующим способом:

[root@fw root]# vim

запускается редактор с пустым файлом.

[root@fw root]# vim textfile

Запускается с новым файлом с именем textfile, если файла не существует, либо запускается редактирование существующего файла textfile.

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

У редактора есть несколько режимов работы:

  • нормальный (или командный)
  • режим ввода текста
  • режим командной строки

Если быть более точным, то режимов работы у vim – 14. 7 основных и 7 дополнительных (расширяющих основные). Но пока предлагаю остановиться на 3х основных.

how to exit from vim modes

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

Основные особенности работы разных режимов в том, что некоторые действия можно делать как в режиме командной строки, так и в нормальном режиме. Например, отмена действия – в нормальном режиме – клавиша u, в режиме командной строки – :u, :un, :undo.

Работа в vim

Нормальный (командный) режим \ Normal mode

По умолчанию (если не настроено иное), Vim начинает свою работу в нормальном режиме, который иногда также называют командным. Нажатие клавиш в этом режиме воспринимается как команды. Команды могут быть, например, такие как скопировать, удалить или переместить текст. Перейти в нормальный режим из другого можно, дважды нажав клавишу Esc. На самом деле, способов перехода больше.

В командном режиме существуют одноклавишные комады (a, u, i), комбинации клавиш (Ctrl+R, Ctrl+w), а так же, многоклавишные (gg, zz, qq). 

Общие:

  • u – отмена предыдущего действия (undo)
  • Ctrl + R – отмена отмены (повтор) (redo)
  • ZZ – аналог :x (или :wq) – записать и выйти
  • ZQ – аналог :q! – выйти без подтверждения

Поиск текста:

  • /string – поиск значения string вниз по тексту
  • ?string – поиск значения string вверх по тексту
  • N – перейти к предыдущему найденном
  • n – перейти к следующему найденному

Смена режимов

  • a – перейти в режим вставки после символа в текущей позиции курсора
  • A – перейти в режим вставки в конце текущий строки
  • i или Ins – переход в режим ввода текста перед курсором
  • o – переход в режим ввода текста c новой строки ниже
  • O – переход в ражим вставки текста с новой строки выше

Перемещение курсора по тексту:

Если перед командой перемещения курсора ввести цифру, то действие повториться столько раз, сколько в цифре, например 10{ перейдет на 10 параграфов вперед.

  • <PgUp> – страница вверх
  • <PgDown> – страница вниз
  • :<num>⤶ – перейти на строку номер <num>
  • <num>%⤶ – перейти на строку, соответствующую <num> процента документа
  • h,← – лево на один символ
  • l,<Space>,→ – вправо на один символ
  • ^,<Home> – начало строки
  • $,<End> – конец строки
  • j,↓ – вниз на одну строку
  • k,↑ – вверх на одну строку
  • w – на слово вперед, в начало следующего слова (слова разделяются пробельными символами – пробел, таб, EOL и символами пунктуации)
  • W – на слово вперед, в начало следующего слова (только от пробела к пробелу)
  • b – аналогия w но назад, в начало следующего слова
  • B – аналогия W но назад, в начало следующего слова
  • e – аналогия w но вперед, в конец слова
  • E – аналогия W но вперед, в конец слова
  • f{char} – перейти вправо до ближайшего символа {char}
  • ( – на одно предложение вперед (разделители ‘.’, ‘!’ или ‘?’ )
  • ) – на одно предложение назад
  • { – на один параграф вперед (разделитель – пустая строка)
  • } – на один параграф назад
  • G – в конец документа
  • g(комбинации с g) – перейти куда-то, например:
  • gg – в начало документа
  • gt – переход на следующую вкладку (при открытии вкладок :tabedit)

Комбинации перемещения по экрану (без перемещения курсора):

  • Ctrl+Y – строка вверх
  • Ctrl+E – строка вниз
  • Ctrl U – пол страницы вверх
  • Ctrl D – пол страницы вниз
  • z-комбинации – перемещение страницы относительно курсора:
  • z⤶ или zt – текущую позицию курсора сделать верхом страницы
  • zz – положение курсора сделать серединой страницы
  • zb – положение курсора – низ страницы
  • z<num>⤶ – сделать экран высотой <num> строк
  • zs – позиция курсора – начало страницы (горизонтально – левый край)
  • ze – позиция курсора – конец страницы (горизонтально – правый край)

Редактирование текста:

  • d-комбинации – обеспечивают вырезание (удаление) текста в буфер:
  • [num]dd – вырезать строку (или [num] строк) в буфер обмена
  • d[комбинация_перемещения_курсора_по_тексту] – вырезать блок текста, который будет захвачен при перемещении курсора. Например: dG – удалит все до конца документа или dgg – удалить все до начала документа или d$ – до конца строки.
  • [num]p – вставить (past) [num] раз после курсора
  • P – вставка текста из буфера до курсора
  • v – режим выделения, он же визуальный
  • y – копировать  (yank) символ под курсором
  • [num]yy – копировать [num] строк

Работа с несколькими окнами:

  • разделение экрана для работы с несколькими файлами:
    • Ctrl+w,s или :vsplit filename – по горизонтали (новый файл откроется справа)
    • Ctrl+w,v или :split filename   – по вертикали
  • Ctrl+W + – увеличить количество строк в текущем окне
  • Ctrl+W – – уменьшить количество строк в текущем окне
  • Ctrl+стрелка – перемещение между окнами
  • Ctrl+f – переход на страницу вперед
  • Ctrl+b – переход на страницу назад
  • Ctrl+h – переключить сплит влево
  • Ctrl+l – переключить сплит вправо
  • Ctrl+k/j – переключение между вертикальными сплитами
  • :vertical resize num% – изменить вертикальный размер сплита на num%

Нормальный режим — это центральный режим, из этого режима осуществляется переход во все остальные режимы.

Режим ввода текста \ Insert mode

Для входа в этот режим, используется клавиша Ins. В этом режиме Vim работает так же, как и большинство «обычных» текстовых редакторов. Изменяемый текст хранится в буфере. Набранные символы не воспринимаются как команды, а вставляются в существующий текст.

В данном режиме работают следующие комбинации клавиш:

  • стрелки, PgDown/up и home, end для перемещения по тексту
  • Esc – выход из редактирования текста и переход в нормальный режим
  • Backspace или Ctrl H – удалить символ перед курсором
  • Del – удалить символ под курсором
  • Ctrl+W – удалить слово перед курсором
  • Ctrl+U – удалить строку от курсора до начал строки
  • <Tab> или CTRL-I – вставить табуляцию
  • Ins – переключиться между режимами Insert\Replace
  • Ctrl+d сдвинуть текст влево
  • Ctrl+t сдвинуть вправо
  • Ctrl+x и Ctrl+f – контекстная подсказка, когда вводишь путь к файлу
  • Ctrl+x и ctrl+n – контекстная справка при наборе слова – отображает все слова, которые начинаются на набранное слово (удобно при вводе переменных) 

Перемещение текста (блоков текста):

  • [num]<<⤶ – сместить блок текста размером [num] строк на размер отступа влево
  • [num]>>⤶ – сместить блок текста размером [num] строк на размер отступа вправо

Режим командной строки \ Command-line mode

Этот режим вызывается нажатием : (двоеточие)  в нормальном режиме. За двоеточием следует команда, например такая как поиск или замена. После ввода команда запускается нажатием   ↵ Enter . После того как команда выполнена, редактор возвращается в нормальный режим. К этому режиму также относятся команды / (поиск вперёд по тексту), ? (поиск назад по тексту) и команда-фильтр ! (запуск команды в bash).

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

  • :e file – создание нового файла file
  • :e! – Редактировать текущую копию файла на диске. Команда перезагрузит файл, отменив созданные вами изменения. Вы также можете использовать команду, если копия на диске была изменена по какой-либо причине и вам требуется последняя ее версия.
  • :w [filename] – записать изменения в файл, если указано [filename], то буфер будет записан в новый файл с именем filename
  • :w! – записать изменения в файл безусловно (даже если файл readonly).
  • :wa[ll] – записать изменения во все открытые файлы
  • :r file – вставка в текущий файл, содержимого файла file
  • :q – выход из редактора
  • :qa – выход из всех открытых фалов
  • :q! – выход из редактора без подтверждения изменений
  • :x[!] – аналог :wq, но запись в файл делается только если были изменения
  • :set paste \ :set nopaste – перейти в режим вставки\выйти из режима (вставляет текст с корректными отступами)
  • :s/src/dst/ заменить в текущей строке первое вхождение src на dst
  • :s/src/dst/g заменить в текущей строке все вхождения src на dst
  • :%s/src/dst/ заменить во всем файле первое вхождение каждой строки src на dst
  • :%s/src/dst/g заменить во всем файле все вхождения src на dst
  • :set gdefault – по умолчанию, при замене заменять все вхождения, а не только первое
  • :1-5s/string1/string2/g – поиск в строках с 1 по 5, строки string1 и замена на string2
  • :read! shell-commnd – вывод команды шелла будет добавлен в текущий открытый файл
  • :tabe или :tabedit file/path – открыть файл в новой вкладке
  • :number – переход на строку с номером – number
  • :!command – запуск команды интерпретатора command . После завершения команды, появиться приглашение вернуться в редактор

Для того чтобы vim использовал цветную подсветку синтаксиса, необходимо в файле глобальных параметров $HOME/.vimrc раскомментировать или добавить новую строку syntax on.

Дополнительные материалы

С Уважением, Mc.Sim!




Теги: , ,

7 комментариев к “Текстовый редактор VIM, основы работы”

  1. Andrew
    7 мая, 2014 at 23:22
    1

    :number – переход на строку с номером – number

    Проще в командном режиме вбить номер строки и нажать G.
    Хороший сайт :)

    • 24 июня, 2014 at 20:16
      2

      Спасибо за коммент.
      номерG – Это дело привычки )

  2. Alexey
    18 августа, 2017 at 22:03
    3

    спасибо за статью, хороший материал, ответил на мои вопросы

    • Whols
      28 ноября, 2020 at 10:38
      4

      Режим командной строки \ Command-line mode
      Этот режим вызывается нажатием : (двоеточие) из нормального режима.

      Я рекомендую тексты перед отправкой внимательней проверять на корректность. Из-за таких ляпов изучать материал совершенно невозможно!

      • 15 декабря, 2020 at 23:44
        5

        Спасибо.
        Я поправил формулировку.

  3. Alex
    28 января, 2020 at 15:29
    6

    Спасибо большое.
    Давно ждал новых статей на Вашем сайте.
    Как дополнение, ни в коем случае не критика (или нечто подобное) – про именованные регистры я для себя подчерпнул тут – https://stackoverflow.com/questions/1218390/what-is-your-most-productive-shortcut-with-vim.

    • 2 февраля, 2020 at 17:05
      7

      Спасибо за ссылку. Я пользовался данной возможность, но в статье не стал описывать. Если бесконечно углубляться в VIM, можно не остановиться. :-)

Написать комментарий