Наши партнеры

UnixForum





Библиотека сайта rus-linux.net

Немного о непонятных, но полезных командах редактора Vim

Оригинал: What are some obscure but useful Vim commands
Автор: Adrien Brochard
Дата публикации: November 7, 2014
Перевод: Н.Ромоданов
Дата перевода: декабрь 2014 г.

Если вы не читали последнюю мою статью на эту тему, то знайте, что я поклонник редактора Vim. Поэтому, прежде чем некоторые из вас начнут кидать в меня камнями, дайте мне представить вам список "непонятных команд редактора Vim". Я имею ввиду следующее: это набор команд, с которыми вы, возможно, не сталкивались раньше, но они могут оказаться вам полезными. И в качестве второй оговорки: я не знаю, какие команды вы, возможно, знаете, и какие из них вы посчитаете для себя полезными. Таким образом, в этом списке действительно представлен набор сравнительно менее известных команд редактора Vim, которые, возможно, могут оказаться полезными.

Сохранение файла и выход

Мне немного стыдно, но я только недавно узнал, что команда

:x

эквивалентна команде

:wq

которая сохраняет файл и выполняет выход.

Базовый калькулятор

Когда вы находитесь в режиме вставки, вы можете нажать Ctrl+r, а затем ввести '=' и выполнить простое вычисление. Нажмите клавишу ENTER и результат будет вставлен в документ. Например, попробуйте:

Ctrl+r '=2+2' ENTER

И в документ будет вставлено значение 4.

Поиск подряд повторяющихся слов

Когда вы что-то набираете быстро, то случается, что вы пишете слово два раза подряд. Например, "this this". Такая ошибка может быть у любого, даже если текст вычитывается. Будем надеяться, что есть простое регулярное выражение, которое избавит вас от этого. Используйте поиск ('/' по умолчанию) и наберите:

\(\<\w\+\>\)\_s*\1

Должны отображаться все повторяющиеся слова. И для достижения максимального эффекта, не забудьте указать:

set hlsearch

в файле .vimrc для того, чтобы подсветить все найденные результаты.

Сокращения

Вероятно, один из самых впечатляющих трюков это то, что вы в Vim можете определять сокращения, вместо которых вы при вводе текста будете в режиме реального времени подставлять что-то другое. Синтаксис следующий:

:ab [сокращение] [то, чем оно будет заменено]

Типичный пример

:ab asap as soon as possible

в котором "asap" (сокращение фразы "как можно скорее") будет заменяться на "as soon as possible" (развернутая фраза "как можно скорее").

Сохранение файла, который вы забыли открыть в роли пользователя root

Ситуация можете произойти, когда вы что-то ищите в форумах. Всякий раз, когда вы открываете файл, для которого у вас нет прав на запись (скажем, системный конфигурационный файл, например), и вы вносите в него некоторые изменения, Vim не сможет сохранить эти изменения с помощью обычной команды ':w'

Вместо того, чтобы заново вносить изменения после того, как вы вновь откроете файл в роли пользователя root, просто выполните следующую команду:

:w !sudo tee %

которая сохранит подобно пользователю root.

Шифруем текст "на лету"

Если вы не хотите, чтобы кто-нибудь мог читать то, что находится на экране, то в Vim есть возможность закодировать ваш текст в кодировке ROT13 с помощью следующей команды:

ggVGg?

'gg' перемещает курсор в первую строку буфера Vim, 'V' указывает использовать для ввода визуальный режим, а "G" перемещает курсор на последнюю строке буфера. Таким образом "ggVG" позволяет в визуальном режиме работать со всем буфером. Наконец команда 'g?' применяет кодирование ROT13 для всей выбранной области.

Обратите внимание на то, что для достижения максимальной эффективности нужно при отображении пользоваться ключом. Он также лучше всего работает с символами алфавита. И, чтобы отменить кодирование, лучше всего просто использовать команду отмены 'u'.

Автозавершение

Еще одна возможность, о которой, как я вижу, многие, кто окружает меня, не знают. В Vim есть используемая по умолчанию функции автозавершения. Да, это базовая возможность, которую можно усилить с помощью плагинов, но и она сама может быть вам полезна. Процедура очень проста. Vim может попытаться угадать окончание вашего слова, основываясь на тех словах, которые вы написали ранее. Если вы в том же самом файле во второй раз набираете, например слово "compiler", то просто наберите "com" и, оставаясь в режиме вставки, нажмите Ctrl+n и увидите, как Vim завершит это слово за вас. Простой и удобно.

Ищем различия в двух файлах

Наверное, многие из вас знают о команде vimdiff, которая позволяет открыть Vim в режиме разделенного экрана и сравнить два файла с помощью следующей команды:

$ vimdiff [файл1] [файл2] 

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

:diffthis

Сначала откройте в Vim исходный файл. Затем в режиме разделенного экрана откройте второй файл с помощью команды

:vsp [файл2]

Наконец, выполните команду:

:diffthis

в первом буфере, переключите буфер с помощью Ctrl+w и снова наберите:

:diffthis

Теперь в каждом из двух файлов будут подсвечены их различия.

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

:diffoff

Возвращаем предыдущее состояние документа — возврат во времени

Vim отслеживает изменения, внесенные в файл, и можно легко вернуться к предыдущему состоянию файла. Команда интуитивно понятна. Например:

:earlier 1m

возвращает документ в состояние, в котором файл находился минуту назад.

Обратите внимание, что вы можете отменить это действие с помощью команды:

:later

Удаление текста между маркерами

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

di[маркер]

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

di(

когда курсор находится на первой скобке. Для фигурных скобок или кавычек будем использовать

di{

и

di"

Удаление текста до указанного маркера

Немного похоже на удаление между маркерами, но команда

dt[маркер]

удалит все между курсором и маркером (не удалив сам маркер) в случае, если маркер находится на той же самой строке. Например:

dt.

удалит окончание предложения, оставив символ '.' нетронутым.

Превращаем редактор Vim в шестнадцатеричный редактор

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

:%!xxd

И точно так же, вы можете вернуть текст в обратное состояние:

:%!xxd -r

Помещаем текст, находящийся по вашим курсором, в центр экрана

Все сказано в названии. Если вы хотите выполнить прокрутку на экране таким образом, чтобы текст, который находится под курсором, оказался в центре экрана, то используйте в визуальном режиме следующую команду:

zz

Переход к предыдущей/следующей позиции

При редактировании очень большого файла часто нужно внести изменение в каком-нибудь месте, а затем сразу после этого перейти в другое место. Если вы хотите просто вернуться назад, то для того, чтобы вернуться туда, где вы были, используйте следующую команду:

Ctrl+o

И аналогичным образом используйте команду

Ctrl+i

для того, чтобы выполнить переход обратно.

Показываем текущий файл в виде веб-страницы

С помощью следующей команды будет сгенерирована страница HTML и в режиме разделенного экрана будет отображаться ваш текст и код веб страницы:

:%Tohtml

Очень просто, но выглядит здорово.

В заключение скажу, что этот список был составлен после чтения нескольких разных форумов и Vim Tips wiki, которые я очень вам рекомендую в случае, если вы хотите расширить свои знания о редакторе.

Если вы знаете какие-либо команды Vim, которые вы считаете полезными и думаете, что большинству они неизвестны, не стесняйтесь рассказать о них в комментариях. Как было сказано во введении, о том, что команда "непонятная, но полезная", мнение весьма субъективное, но обмен знаниями всегда полезен.