Текстовый редактор 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, можно не остановиться. :-)

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