Вступление
"Вим умеет только бибикать и портить текст!", - так обычно обороняются адепты секты Емакс во время очередных священных битв между поклонниками этих двух текстовых редакторов. Попробуем же освоить Вим так, что бы избежать таких приколов.Терминология
Для начала давайте разберёмся с терминами, которые обычно используются при описании работы в Виме.- Экран
- Это окно программы Vim
- Окно
- Представление (область экрана) буфера. Экран может включать одно или несколько окон, разделённых строкой статуса. Внизу экрана размещается командная строка Вима.
+-------------------------------------+
экран | окно 1 | окно 2 |
| | |
| | |
|= строка статуса =|= строка статуса =|
| окно 3 |
| |
| |
|==== строка статуса =================|
| командная строка |
+-------------------------------------+
- Буфер
- Временное хранилище текста.
- Именованный регистр
- Именованное хранилище текста для множественных вставок.
Войти и выйти
Многие виммеры начинали своё знакомство с этим редактором с конфуза, а именно не смогли попросту выйти из программы! Давайте начнём с того, что раз и на всегда избавим пользователя от необходимости закрывать окно терминала (а так делал и ваш покорный слуга) с целью выхода из этого замечательного редактора :)Что бы начать редактировать произвольный файл и таким образом начать пользоваться Вимом достаточно набрать в консоли:
vim ~/foobar.txtОтлично, первый шаг сделан - по ошибке или целенаправленно - это другой вопрос! Что бы выйти из Вима без сохранения внесённых изменений достаточно набрать:
<Esc>:q[uit]<Enter>В квадратные скобки заключена необязательная часть команды, которая дополнится, как традиционно в UNIX, по <Tab>. <Esc> же переведёт редактор в нормальный режим , если вы ещё не в нём (о режимах в Виме чуть позже). Что бы уж совсем добить тему выхода, то есть ещё и клавиатурная комбинация (одна из "миллиона" в Виме): ZQ - выход без сохранения изменений.
Режимы
Вим, как и его прародитель Vi, имеет модальный интерфейс. Это означает, что одни и те же клавиши в разных режимах работы выполняют разные действия. В Виме представлены следующие основные режимы:Нормальный - главный режим, в котором вам придется работать. Когда вы запустили редактор, вы находитесь именно в этом режиме. Нажатие клавиш в нём воспринимается как команды. h, j, k, l - переместят курсор куда вам необходимо, x удалит символ под курсором, dd - целую строку и так далее. Вернуться в нормальный режим из любого другого можно всегда по нажатию Esc. Вообще использование Esc, ровно как и клавиш перемещения - это скорее историческое наследие.
Клавиатура терминала ADM-3A, на которой был написан Vi
Для тех же, кто всё-таки не считает Esc - самым удобным способом вернуться в нормальный режим Вима, есть целые подборки альтернатив. Я для себя выбрал комбинацию Ctrl-[.
Режим вставки - это тот самый режим, в котором вы и будете вводить текст. В этот режим можно перейти из нормального просто нажав i, что означет начать режим ввода текста перед курсором. На самом деле существует ещё наверно с дюжину клавиатурных комбинаций, которые вас переключат в этот режим.
Режим командной строки - перейти в него можно, набрав : в нормальном режиме, набрав далее необходимую команду. Это своего рода управляющий режим. С помощью его команд можно открыть файл на редактирование :edit ~/foobar.txt , сохранить правки и выйти :wq и многое другое. Так же частным его использованием является процедура поиска или замены текста.
Визуальный режим позволяет делать тоже самое, что и в нормальной, но с визуально выделенными блоками текста. Это позволяет не запоминать, сколько символов необходимо скопировать или строк удалить. Например, устанавливаем в нормальном режиме курсор на начала текстового блока, нажимаем v и выделяем необходимый кусок текста. Теперь его можно, например, скопировать y.
На самом деле в Виме есть ещё 2 режима: "Select mode" и "Ex mode", но они обычно редко используются и их описание выходит за формат данного поста.
Help: :help vim-modes
Вкладки
Начиная, кажется, с 7-ой версии в Виме появились наконец-то вкладки (или табы). С одной стороны, конечно хватало и буферов, а для удобной навигации по ним можно использовать bufexplorer.zip : Buffer Explorer / Browser. Но, с другой стороны, во "взрослых" IDE табы к тому времени стали уже стандартом и все поняли, что это удобно. В Виме вкладка по сути контейнер для окна/окон. Что бы открыть файлы для редактирования, каждый в своей вкладке, набираем в консоли:vim -p file1.txt file2.txtПеремещаться между вкладками можно как привычным сочетанием Ctrl-PageUp / PageDown, так и менее традиционными gt и gT в нормальном режиме. Иногда так действительно быстрее! :)
К сожалению, нет дефолтной комбинации для открытия новой вкладки, а привычные Ctrl-t заняты другими функциями (переход на один шаг назад в истории работы с тегами) :( Но я пришёл к тому, что можно пожертвовать этим и всё-таки переназначить эту клавиатурную комбинацию на открытие нового таба:
" C-T - new tab call SMap("<C-t>", ":tabnew<cr>")Функция SMap в этом куске конфига - это просто более удобный самописный способ назначения действий для клавиатурных комбинаций.
Как обычно много полезного можно почерпнуть из встроенной помощи: см. :help tabpage.
Поиск и замена
Что бы найти какую-либо строку в открытом файле достаточно в нормальном режиме набрать /somestring что бы искать с начала файла, либо ?somestring - с конца. n / N - переместит курсор к следующему вхождению строки. [I - недавнее открытие :) Позволяет быстро просмотреть строки, в которых содержится искомое слово. Вместо того, что бы набирать запрос поиска, можно нажать * / # и Вим переместит вас на место первого вхождения слова под курсором аналогично "старшим" командам.С заменой всё тоже достаточно просто. Следующая команда заменит все вхождения строки "foo" на "bar":
:s/foo/bar/gcРазберём этот пример по частям:
- :s - сокращённая запись команды :substitute
- "foo" - что заменяем
- "bar" - на что заменяем
- g - это флаг, указывающий на то, что заменить необходимо все вхождения для каждой строки текста
- c - это флаг, указывающий на то, что перед заменой очередного вхождения строки необходимо спросить разрешение у пользователя
Метки
В Виме, как и в других продвинутых текстовых редакторах, есть возможность устанавливать закладки (в Виме они называются метками) в произвольных местах редактируемого документа. Например, можно поставить закладку на месте определения функции, что бы при необходимости быстро его найти. Суть такая же как и с книжными закладками. Что бы установить метку в месте расположения курсора достаточно набрать в нормальном режиме:m{a-zA-Z}{a-zA-Z} - это одна буква английского алфавита в соответствующем регистре, который кстати имеет значение! Метка, обозначенная буквой в нижнем регистре, существует в рамках текущего файла, в то время как большая буква позволяет существовать метке в рамках всех загруженных в Вим файлов.
Для того, что бы перейти к выставленной ранее метке достаточно набрать ' и соответствующую ей букву. Конечно запомнить все выставленные метки сложно, да и наверное не стоит пытаться. Список меток всегда можно посмотреть набрав в командном режиме:
:marksДля более удобной навигации по выставленным метках можно использовать и одно из расширений, например Marks Browser : A graphical marks browser. Хотя и этот плагин не обновлялся аж с 2006 года, он вполне справляется с возложенной на него обязанностью!
Marks Browser - удобная навигация по меткам
Help: :help mark-motions
Аббревиатуры
Хочется немного упомянуть и функциональность аббревиатур в Виме. Они дают возможность быстро набирать часто употребляемые при написании длинные строки, используя их сокращённое написание. Например, когда набираете в тексте слово МГУ, Вим заменяет его на Московский государственный университет. Задать аббревиатуру для этого можно так::iabbrev МГУ Московский государственный университетВ аббревиатуры можно упаковывать целые конструкции, превращая их в мини-шаблоны:
iabbrev dbg echo '<pre>';<CR>var_dump(|);<CR>echo '</pre>';<CR>В тоже время есть более удобные механизмы шаблонов для Вима, но они они предоставляются уже плагинами. Например, snippetsEmu : An attempt to emulate TextMate's snippet expansion, для которого есть целые пачки готовых шаблонов для популярных языков программирования и разметки.
Help: :help abbreviations
~/.vimrc
~/.vimrc обычно наряду с ~/.bashrc и ~/.screenrc входит в состав т.н. "dotfiles", которыми пользователи любят делиться и разбирать :) ~/.vimrc - это файл настроек Вима. Сюда можно поместить, например, настройку, указывающую включать по умолчанию подсветку синтаксиса:syntax onили разрешать смену текущего буфера без необходимости сохранить файл:
set hiddenили расставить все точки над и при работе с отступами:
" Expand tab to spaces ? set expandtab " Default tab size set shiftwidth=4 set softtabstop=4 set tabstop=4или отключить то самое бибикание!
" Turn off any bells set novisualbell set t_vb=
Расширения
Пользователи Mozilla Firefox оценят богатство расширений для Вима, их уж почти 4000! Причем найти среди них можно практически всё что угодно: от игр до вполне серъёзных вещей вроде плагинов для удобного ведения проектов.Лучшая пятёрка расширений по загрузкам на vim.org:
Расширение
Описание
taglist.vim
Браузер исходного кода
The NERD tree
Навигатор по файловой системе
bufexplorer.zip
Удобная навигация по буферам
minibufexpl.vim
Ещё одно расширение, упрощающее навигацию по буферам
Color Sampler Pack
Отличная подборка цветовых схем
:help me
Вим имеет мощную встроенную систему справки, которая позволяет найти ответ на практически любой вопрос, касающийся работы в этом текстовом редакторе. Например, вы забыли как работать с именноваными регистрами. Набираем в командном строке::help registersи читаем подробное описание того, какие бывают регистры и как их можно использовать. Если же вы решили изучить всю функциональность Вима, то можно не задавать запрос в команде, а просто просмотреть содержание справочника.
Для удобства читателя в этом посте используются специальные ссылки на онлайн версию этого справочника.
Заключение
Надеюсь, что этот небольшое введение в мир Vim, поможет вам при следующем открытии этого редактора чувствовать себя в нём более уверенно. Ну и конечно Вим при этом станет для вас мощным подспорьем при редактировании не только конфигов, но вполне полноценных текстов и исходников. Без бибикания и порчи текста ;)Pento http://www.allaboutvim.ru/