Ликбез по Linux

Vim. Основы

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

Vim означает Vi Improved, улучшенный vi. Vim разрабатывается с 1988-го года, так что понятно, почему это такой монстр (хотя Emacs помонструознее будет). Кроме того, есть версии для различных ОС - таких, как Linux, Win16, Win32, DOS, различных Unix, BeOS и многих других. Кроме того, Vim использует совсем непривычный многим пользователям подход к редактированию текста: есть два режима - командный (как понятно из названия, тут используются различные команды) и вставка (непосредственно ввод текста). Так что сначала нужно хотя бы чуть-чуть (а лучше много) разобраться с принципом работы и запомнить, как что делается. Не надейтесь на то, что в статье можно раскрыть хоть сколько-нибудь значительную часть возможностей vim (чересчур он мощный), но база для дальнейшего изучения будет заложена и, если вам редактор понравится, будет проще осваивать различные премудрости.

Важное примечание. При редактировании прописные и строчные буквы имеют разное значение (хотя иногда и близкое).

Для начала давайте найдём какой-нибудь файл для редактирования. Демонстрация будет производиться на тексте GPL v3 (GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007). Но если у вас будет какой-нибудь другой текст, то это не страшно.

$ cp /usr/share/common-licenses/GPL-3 ~/temp/

$ vim ~/temp/GPL-3

Теперь у нас открылся vim с содержимым файла (кстати, то, что отображено на экране, принято называть буфером), но не спешите ничего нажимать, так как все нажатия воспринимаются как команды, переход в режим вставки осуществляется по нажатию клавиши i. После того, как вы введёте что нужно, нажмите Esc для возврата в командный (он же основной, он же нормальный) режим. Теперь можно редактировать текст. Для перемещения можно использовать как стрелки, так и h (влево), j (вниз), k (вверх), l (вправо). Главное преимущество hjkl в том, что при их использовании не надо переносить руку на стрелки, в результате этого (при должной практике) скорость работы повышается. Для перехода на начало строки используйте 0 (ноль), а к концу - $. По Enter следует переход на новую строку на первый символ, не являющийся пробелом. А перемещением на следующее слово заведует w. ( и ) перемещают курсор к началу и концу предложения, соответственно. Для поиска применяется /что искать (так во многих консольных приложениях). Чтобы найти следующий подходящий элемент, нажмите n, а для поиска в обратном направлении - ?что искать.

Пример

/License - курсор на первом появлении слова License

n - на втором

?License - опять на первом.

Особо богатые возможности предоставляет так называемый коэффициент повторения, который набирается перед вызовом команды. Например, 8/License переносит курсор на 8-е попадание слова License в тексте, а 15) перемещает курсор к концу 15-го предложения, начиная от текущего. Эта возможность доступна для многих команд и может очень сильно облегчает жизнь.

Для удаления используется кнопка d (сокращение от Delete). Например, dl удаляет 1 символ вправо (аналогично dвправо), dw удаляет текущее слово, d Enter удаляет строчку и следующую за ней, d$ удаляет текст до конца строки, а dd - всю строку. d/the удаляет текст от положения курсора до первой встречи артикля the. Если же комбинировать, то можно получить что-то вроде 4d5w, что удалит 4 раза по пять слов (то есть 20 слов, начиная с текущего).

Копирование текста применяется аналогично удалению. Для того, чтобы что-то скопировать, используйте y. Вставка выполняется командами p и P. А отдельной функции "вырезать" у Vim нету. Его функцию выполняет удаление. Каждый раз, когда вы удаляете текст, он помещается в буфер обмена (точнее, в буфер по умолчанию, так как их может быть большое количество). Например, чтобы поместить 6 строчек в буфер, нужно выполнить "a6yy, а для вставки оттуда - "ap. Во время всех этих операций данные в безымянном буфере остаются без изменений. После того, как вы наигрались, можно отменить внесённые изменения нажатием u.

Кроме всего, в Vim есть так называемый режим командной строки. Для его использования необходимо нажать :. Тут как раз и раскрываются некоторые возможности этого редактора. В отличие от клавиш, в командном режиме нет ограничений на количество команд. Например, :syn включает подсветку синтаксиса, что удобно при редактировании конфигурационных файлов или исходных кодов. Кроме всего, существует очень мощная и объёмная справочная система, которую можно вызвать командной :help раздел.

Для замены текста используется команда :s

Пример

:1,35s/GPL/AAAAAAA/ - заменяет в файле текст "GPL" текстом "AAAAAAA" в строчках с первой по 35-ю. А :1,$s/License/SSSSSS/ заменяет во всём тексте License на SSSSSS.

Вот небольшой список команд:

:shell - запуск командной оболочки из Vim;

:w - записывает содержимое буфера в файл без выхода из vi;

:w! - записывает содержимое буфера в файл без выхода из vi (для Read Only файлов);

:w abc - записывает содержимое буфера в файл abc (если его нет он будет создан, иначе - перезаписан), не выходя из vi;

:1,10w abc - записывает строки с 1-й по 10-ю в файл abc;

:'a,$w abc - записывает строки от строки, помеченной как "a", до последней строки abc;

:e abc - загружает для редактирования файл abc вместо текущего файла. Выдаёт ошибку, если изменения в текущем файле не были сохранены;

:e! abc - загружает для редактирования файл abc, не обращая внимания на не сохранённые изменения в текущем файле;

:e # - загружает для редактирования предшествующий файл (команда :e# следующий);

:f abc - изменяет имя текущего буфера vi на abc;

:q - выходит из редактора, если нет не сохранённых изменений;

:q! - выходит и уничтожает при этом все не сохранённые изменения;

:r abc - считывает файл abc в текущий буфер vi и размещает его за курсором;

:!cmd - выполняет команду (who, sort, ls, etc.).

Кроме того, есть команды для непосредственной настройки параметров редактора. Они устанавливаются при помощи :set

:set опция - активизирует опцию;

:set опция=значение - назначает значение для опции;

:set no опция - деактивирует опцию;

:set - показывает опции, установленные пользователем;

:set all - показывает все опции - как установленные пользователем, так и опции "по умолчанию";

:set опцию? - показывает значение опции.

Например,

:set number - включает нумерацию строк;

:set nonumber - выключает нумерацию строк.

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

$ vim ~/.vimrc

Теперь можно и на практике проверить свои знания. Для того, чтобы Vim корректно прочитал его, можно просто записать команды без двоеточия в начале. Например, что-то вида:

set nowrap

set autoindent

syn on

colorscheme evening

set number

set spell

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

Конечно, vim поддерживает значительно больше (табы, макросы, автодополнение при программировании и т. п.), но этого материала хватит для целой книги, а не маленькой статьи. Также в Интернете масса ресурсов, посвящённых этому замечательному редактору. Изучайте!

На сим ваш покорный слуга откланивается. До будущих встреч!

Антон ЛИПАРИН,
oni-ddr.livejournal.com

Версия для печатиВерсия для печати

Номер: 

35 за 2008 год

Рубрика: 

Software
Заметили ошибку? Выделите ее мышкой и нажмите Ctrl+Enter!