Я давно использую Vim в качестве основного редактора. И хотя над большими проектами работаю в eclipse, для внесения незначительных правок проще использовать Vim, чем ждать загрузки eclipse. Но Vim не совсем "простой текстовый редактор" у него три режима работы и множество команд. Изучение команд и возможностей Vim занимает время, но потраченное на изучение время быстро окупается.
Основные команды Vim очень простые, но сочетание простых команд может быть довольно мощным инструментом.
Режимы
В Vim имеется три режима работы с текстом:
- Командный режим: все нажатия клавиш интерпретируются как команды
- Режим вставки: используется для ввода текста
- Визуальный режим: используется для выделения текста или блока текста, этот режим можно рассматривать как под режим командного режима
Для переключения из режима вставки или визуального режима в командный режим, нажмите клавишу
.Для переключения из командного режима в режим редактирования нажмите одну из клавиш:
- — переключает в режима вставки перед текущей позицией курсора
- — переключает в режим вставки после текущей позиции курсора
- — перескакивает к первому не пробельному символу в текущей строке и переключает в режим вставки
- — перескакивает к последнему символу в текущей строке и переключает в режим вставки
Для переключения из командного режима в визуальный режим нажмите одну из клавиш:
- — переключает в визуальный режим (выделение символов)
- — переключает в визуальный режим (выделение строк)
- + — переключает в блочный визуальный режим (выделение прямоугольных областей текста)
Все команды которые работают с диапазонами (например: замена, вставка, удаление, копирование или отступы) поддерживаются в визуальном режиме.
Перемещения
Простейшие команды перемещения:
- — курсор влево
- — курсор вправо
- — курсор вверх
- — курсор вниз
Эти команды не работают в режима вставки, но во всех трёх режимах можно использовать клавиши перемещения курсора.
Есть множество команд доступных для перемещения в Vim, я приведу основные, если вам нужно что-то специфическое, смотрите в справочной системе Vim.
- — перемещения курсора вверх страницы
- — перемещение курсора в средину страницы
- — перемещение курсора в низ страницы
Прокрутка страницы:
- + — на 1 строку вниз
- + — на 1/2 страницы вниз
- + — на 1 страницу вниз
- + — на 1 строку вверх
- + — на 1/2 страницы вверх
- + — на 1 страницу вверх
Несколько основных команд перемещений по строке текста, в данном случае имеются ввиду строки экрана, а строки файла, которые могут занимать несколько экранных строк, если включен перенос строк.
- 0 — первый символ строки
- ^ — первый не пробельный символ строки
- w — перескакивает к следующему слову
- W — перескакивает к следующему слову, игнорируя символы пунктуации
- e — перескакивает к конц слова
- E — перескакивает к концу слова, игнорируя символы пунктуации
- b — перескакивает к началу слова
- B — перескакивает к началу слова, игнорируя символы пунктуации
- ge — перескакивает к концу предыдущего слова
- gE — перескакивает к концу предыдущего слова, игнорируя символы пунктуации
- g_ — перескакивает к последнему не пробельному символу строки
- $ — перескакивает к последнему символу строки
Если запомнить хотя бы несколько из этих команд, то можно быстро перемещаться из точки А в точку Б. Так же важным фактом является то, что эти команды задают диапазон для других команд.
Редактирование
Вставка текста осуществляется в Vim довольно просто, нажал
и начал печатать. Но для редактирования Vim предлагает довольно сложные команды.- d — удалить символ от текущей позиции курсора, до позиции заданной следующей командой (например: d$ удалит все символы от текущей позиции до конца строки)
- c — изменить символ от текущей позиции до позиции заданной следующей командой
- x — удалить символ под курсором
- X — удалить символ перед курсором
- y — копировать символы от текущей позиции до позиции заданной следующей командой
- p — вставить удалённый или скопированный текст после текущей позиции курсора
- P — вставить удалённый или скопированный текст перед текущей позицией курсора
- r — заменить символ под курсором на новый, введённый
- s — заменить текст с текущей позиции курсора до позиции заданной следующей командой введённым текстом
- . — повторить последнюю команду вставки или редактирования (x,d,p...)
Двойная команда d, c или y выполнит операцию над всей строкой, например yy скопируют всю строку.
Обратите внимание, что многие команды из описанных здесь на самом деле являются более мощными. Например вы можете указать в какой регистр скопировать текст. При вводе "ayy копия строки сохраниться в регистре a, что бы вставить текст из этого регистра необходимо ввести "ap. Vim помнит несколько последних команд удаления и копирования в автоматических регистрах. Что бы посмотреть содержимое регистров наберите :registers. Вы так же можете использовать автоматические регистры для вставки старых фрагментов текста.
Визуальный режим
Используя визуальный режим можно вставлять текст в каждую строку выделенного фрагмента.
Например, мы выбрали прямоугольную область (использую
+ или + в windows), мы можем нажав (переключившись в режим вставки) вставить свой текст. Как только выйдем из режима вставки, текст будет добавлен ко всем выбранным строкам. Для ввода текста после выделенной области нужно использовать . Для выделений используются клавиши , , и курсорные клавиши в визуальном режиме не работают.Другой удобной функцией является замена всего выбранного блока новым текстом. Для этого нужно выделить блок и нажать
, Vim переключиться в режим вставки и можно вводить текст. После выхода из режима вставки Vim вставит введённый текст во все строки.Если мы хотим добавить текст в конце строк, то можно использовать $ указывает на концы строк, а + (или + ) работает со столбцами, игнорируя текст.
+ (или + в windows) и выбрать строки. Разница между предыдущими вариантами и этим заключается в том, чтоИспользуем
+ :Тестовый текстВСТАВЛЕННЫЙ ТЕКСТА Ещё строка ВСТАВЛЕННЫЙ ТЕКСТА Текст ВСТАВЛЕННЫЙ ТЕКСТА
Используем
+Тестовый текстВСТАВЛЕННЫЙ ТЕКСТА Ещё строкаВСТАВЛЕННЫЙ ТЕКСТА ТекстВСТАВЛЕННЫЙ ТЕКСТА
Текстовые объекты
Команды Vim оперируют такими текстовыми объектами как символ, слово, предложения, разделённые скобками фрагменты и т.д.
Одним из важных объектов является внутреннее слово: iw. Для выделения слова под курсором достаточно набрать yiw (v — визуальный режим, iw — внутреннее слово), аналогично для удаления: diw.
Разница между i-словом/блоком и a-словом/блоком в том, что внутренний (i) вариант выбирает символы и слово (без пробелов) или содержимое скобок, не включая внешние пробелы и скобки. a-вариант выбирает блоки с внешними пробелами и скобками.
- iw — внутреннее слово
- aw — a слово
- iW — внутреннее СЛОВО
- aW — a СЛОВО
- is — внутреннее предложение
- as — a предложение
- ip — внутренний параграф
- ap — a параграф
- i( или i) — внутренний блок
- a( или a) — a блок
- i< или i> — внутренний блок
- a< или a> — a блок
- i{ или i} — внутренний блок
- a{ или a} — a блок
- i" или i" — внутренний блок
- a" или a" — a блок
- i' или i' — внутренний блок
- a' или a' — a блок
Небольшие примеры, что бы было понятнее. Символами [ и ] выделен выделенный блок.
Команда Текстовый объект iw Это [тестовое] предложение. aw Это [тестовое ]предложение. iW Это[ тестовое ]предложение aW Это[ тестовое ]предложение. is ...предложение. [Это тестовое предложение.] Это... as ...предложение. [Это тестовое предложение. ]Это... конец предыдущего параграфа ip [Это параграф. Содержащий два предложения.] следующий параграф. конец предыдущего параграфа ap [Этот параграф. Содержит два предложения ]следующий параграф i( or i) 1 * ([2 + 3]) a( or a) 1 * [(2 + 3)] i< or i> The <[tag]> a< or i> The [<tag>] i{ or i} some {[ code block ]} a{ or a} some [{ code block }] i" The "[best]" a" The[ “best”] i` The `[best]` a` The[ `best`]
Пробуйте эти команды и запоминайте, они помогут сэкономить много времени.
Отмена и Возврат
Отменить можно почти все команды (
+ ), в командном режиме можно даже отменить отмененную команду ( + )Выполнение внешних команд
В Vim легко получить результат выполнения внешних команд или использовать часть строки в качестве аргумента внешней программы.
Для вывода результат выполнения внешней команды :!command, будет показан вывод команды.
Для фильтрации текста через внешнюю команду :!sort %.
Для вставки вывода внешней команды в текст :r!command (например :r!ping ya.ru)
Для получения подробной информации по фильтрации выполните :h filter.
Поиск и замена
Поиск в Vim организован очень просто. Нажмите
в командном режиме и вставьте термин который хотите найти. Vim выполнит поиск по файлу в прямом направлении. Для поиска в обратном направлении используйте . Используя или можно повторить поиск в том же обратном направлении.Если установлена опция 'incsearch', то Vim сразу же переходит к первому совпадению, когда вы начинаете вводить термин. Если установлена опция 'hlsearch', то будут подсвечиваться все совпадения. Что бы удалить подсвечивание, наберите :nohl.
Замена текста тоже не представляет трудности, если вы знакомы с регулярными выражениями.
Для замены с использованием регулярных выражений, наберите :%s/старый текст/новый текст/gc. Эта команда выполнит поиск во всём файле % и произведёт замену s фразы "старый текст" на "новый текст", будет искать более одного совпадения в каждой строке g и спрашивать перед заменой, действительно ли вы хотите заменить фразу c.
Для замены текста в выбранной области, выберите область и наберите :s/старый текст/новый текст/g. В командной строке это должно выглядеть как :'<,'>s/старый текст/новый текст/g. Что означает '< и '> вы поймёте после прочтения раздела Метки.
Завершения
Когда вы набираете текст, то довольно часто приходится набирать одни и те же слова. При нажатии
+ Vim будет искать продолжение слова, которое мы набираем, в набранном ранее тексте. + и + завершит набранный текст до конца строки.Если вы не уверены в правильности написания слова, можно включить проверку орфографии :set spell и при нажатии комбинации + и + Vim выполнит поиск в словаре. Механизм завершения слов существенно улучшился в 7 версии Vim.
Обратите внимание, что команды завершения работают в режиме вставки, в командном режиме у них другое назначение!
Метки
Для быстрого перехода в разные места документа или между документами, можно выставлять метки.
Некоторые метки Vim ставит автоматически:
- {0-9} — 10 последних позиций в закрытых файлах (0 последний файл, 1 предпоследний и т.д.)
- < и > — левая и правая позиции помеченного текста.
- ( и ) — начало и конец текущего предложения
- { и } — начало и конец текущего параграфа
- [ и ] — первый и последний символы скопированного или изменённого текста
- . — позиция последней замены
- ' или ` — позиция перед последним переходом
- " — позиция перед последним выходом из файла
- ^ — позиция последней стоп-вставки
Для установки ручной метки используйте m{a-zA-Z} (после m следует либо a,b..z или A, B..Z). Для перехода между метками используются ' и `.
- ' — устанавливает курсор на первый не пробельный символ в отмеченной строке
- ` — устанавливает курсор на место где была установлена метка
Существует различие между строчными и заглавными символами меток:
- {a - z} — локальный файл
- {A - Z} — сохраняется и доступно между сессиями (ассоциированы с файлами)
Можно использовать метку L для ведения рабочего журнала и T для своего расписания и быстро обновлять информацию в них.
Например можно легко перейти к позиции курсора перед закрытием файла, набрав `" (в настройках Vim легко сделать, что бы при открытии файла курсор автоматически перемещался в эту позицию)
Для получения списка всех меток можно набрать команду :marks. Для удаления меток используется :delmarks. :delmarks a b c удалит метки a, b и c, для удаления всех меток используйте :delmarks!
Вкладки, буферы и окна
С седьмой версии в Vim появились вкладки. Вкладки Vim сильно отличаются от вкладок в других редакторах, они скорее похожи на копии Vim в терминальном окне с вкладками. Например каждая вкладка может иметь свой макет. Например в первая вкладка у вас может быть разделена на два окна с html кодом и стилем css. Во второй вкладке можно держать одно окно с js скриптом и т.д. В разных вкладках можно держать одинаковые открытые файлы. В общем вкладки в Vim более мощные чем у большинства других редакторов.
Для открытия нескольких файлов во вкладках можно использовать командрую строку vim -p *.css
Для переключения между вкладками можно использовать мышь или набрать gt.
Для создания новой вкладки наберите команду :tabnew, для открытия файла в новой вкладке :tabe имя_файла
Буферы и окна в Vim немного сложнее для понимания. Окно это то, что вы виде запустив Vim, когда вы запускаете систему справки (например набрав :help buffers), вы получите два окна. Таким образом они скорее не окна, а видимые области.
Вы можете открыть окно и разделить его по горизонтали :sp или вертикали :vsp. Vim отобразит один буфер в двух разных окнах. Так же можно открывать новый файл :sp имя_файла или :vsp имя_файла. Для переключения между окна используется мышь или + { , , , } в командном режиме.
Буфер это файл (в большинстве случаев), но не обязательно видимый. Обычно используется больше буферов, чем окон. Для отображения другого буфера в текущем окне используйте :b номер_буфера. Номер буфера можно узнать из списка буферов :buffers. В стандартной конфигурации Vim сохраняет текущий буфер при переключении на другой. Для отключения сохранения буфера используйте команду :set hidden, но будьте осторожны.
Вот некоторые команды из справочной системы:
- :b N — переключает на буфер N
- :buffers — показывает список буферов. Разъяснения:
- % — текущее окно
- # — альтернативный буфер (переключается :e# или :b#)
- a — активный буфер (загружен и видим)
- h — скрытый буфер (загружен, но не видим)
- + — изменённый
- :bd — выгружает буфер и удаляет его из списка буферов (не закрывает Vim, даже если это последний буфер)
- :bun — выгружает буфер, но оставляет его в списке буферов
- :sp #N — делит текущее окно по горизонтали и открывает в нём буфер N
- :w — записывает текущий буфер на диск
- :e имя_файла — загружает файл с диска
- :q — закрывает текущее окно (и Vim, если оно было последним)
- :new — новое пустое окно
- :on — закрывает все окна, кроме активного ( + )
- + { , , , } - перемещение между окнами
Буферы автоматически сохраняются, если опция 'hidden' не установлена, а опция 'autowrite' установлена.
Макросы
Vim позволяет выполнять некоторые команды используя
(точка). Для повторения более чем одной команды можно использовать макросы.Начать запись макроса можно с помощью {0-9a-zA-Z}, например запишет макрос помеченный как "q". Нажав можно остановить запись.
и одной из метокТеперь макрос можно повторить в любой момент используя
.Заключение
Надеюсь этот материал поможет в освоении возможностей одного из самых интересных и сложных текстовых редакторов.
1 комментарий:
Отличная статья, спасибо! Хотел бы добавить что некоторые комбинации нажатий клавиш продублированы. Например для перехода в "командный режим" можно нажать не только Esc, но и например ctrl+c или даже ctrl+[. Это может быть полезным для тех у кому трудно мизинцем дотянуться не отрывая руки от клавиатуры. Или как у меня вообще Esc разломан :-)
Отправить комментарий