Vim
Материал из Викиучебника
Продвинутый редактор — кошмар для случайного пользователя. Если его удается в конце-концов закрыть, то вздыхаешь с облегчением и твердой уверенностью, что не будешь запускать эту программу больше ни в коем случае.
Действительно, такой редактор нельзя просто открыть и начать работать — требуется предварительная подготовка. Зато стоит раз испытать его в работе, и поражаешься, как мог обходиться без него раньше.
Содержание |
[править] Введение
Вот запись типичной сессии работы с vi / Vim:
#vi httpd.conf
В открывшемся редакторе:
/SSLVerif[Enter]nwr1ZZ
В обычном редакторе, это соответствует:
- Открыть файл «httpd.conf»
- Открыть диалог поиска
- Ввести в поисковую строку «SSLVerif».
- Перейти ко второму по счету найденному слову
- Перенести курсор к его параметру
- Заменить параметр на 1
- Сохранить изменения
- Закрыть файл
Объяснение команд:
- / — Перейти в режим поиска
- Kлавиша [Enter] — Искать'.
- n — Перейти к следующему вхождению искомой строки
- w — Переместить курсор к следующему слову
- r — Заменить знак под курсором
- ZZ — Сохранить изменения и выйти
Здесь я делюсь опытом работы в Vim’е. Предполагается, читатель имеет установленные vi и vim, а также знаком с основами работы с UNIX-подобной системой.
Помнится, когда товарищ установил FreeBSD на мою домашнюю ЭВМ, некоторые файлы открывались непонятным мне образом. Я быстро старался избавиться от этого несчастья. Через некоторое время я понял, что происходит: в системе по умолчанию, в переменной окружения EDITOR, установлен редактор vi. Я сразу поменял его на 'ee' (easy editor). Это действительно простой редактор, затруднений с ним возникнуть просто не может, однако и особой свободы в нем не испытать. Вскоре его стало не хватать…
Описание работы с редактором я привожу в хронологическом порядке — от простого к сложному. Так как Vim на 99 % совместим с Vi, сначала я дам краткое описание работы с vi.
Легенда сокращений и специальных символов:
Строки, начинающиеся с символа "#" - командная строка; <ESC> - нажатие клавиши Escape; <CR> - ... Enter; <SHIFT> - ... Shift ^x - ... Ctrl-x
[править] Vi
Главное отличие Vi от других редакторов в том, что у него несколько режимов работы. При этом привычный нам режим ввода текста — не основной. Вместо этого, в обычном режиме vi воспринимает каждое нажатие на клавишу, как команду. Это позволяет мгновенно перемещаться по файлу и быстро осуществлять редактирование.
Насколько Vi быстрее других редакторов? — Давайте сравним. Например, вот действия, которые необходимо выполнить ["продвинутому"] пользователю, чтобы поменять местами две буквы в обычном редакторе и в vi:
Обычный редактор:
<Shift-Стрелка вправо> <Ctrl-x> <Стрелка вправо> <Ctrl-v>
Vi:
xp
[править] Переключение режимов
- «Обычный режим» — перемещение по файлу, стирание текста и другие редактирующие функции. Переход в него из любого другого режима:
<ESC>, иногда 2 раза;
- «Режим ввода» — ввод текста. Заметьте, что стирание и ввод текста происходит в двух разных режимах. Переход в него из обычного режима:
i
- «Командный режим» — Команды (операции с файлом, поиск и замена, настройка редактора…). Переход в него из обычного режима:
:
- «Режим поиска» — ввод поискового запроса. Переход в него из обычного режима
/
[править] Открыть/создать файл
Опишем операции, которые можно производить с файлом в обычном режиме.
#vi mamapapa.txt - открыть один файл #vi mamapapa.txt ++11 -- открыть файл и перейти к строке 11. #vi mama.txt papa.txt - открыть файл mama.txt, после выхода из него открыть файл papa.txt #vi -о mama.txt papa.txt - открыть сразу все файлы.
Файл открывается в обычном режиме с помощью команды vi. Здесь мы можем просмотреть файл, переместиться по его содержимому, стереть текст, но ввести текст в этом режиме нельзя.
Создание файла происходит при помощи той же команды. Собственно создание файла происходит в момент сохранения.
Для открытия или создания нового файла в обычном режиме набираем
:e filename
Перед этим нужно сохранить предыдущий файл
:w - сохраняет файл с существующим именем :w filename - сохраняет файл с новым именем
[править] Перемещение по файлу
Самые часто используемые в vi клавиши — клавиши перемещения. Это знаменитые h j k l, соответствующие стрелкам влево, вниз, вправо и вверх. Стрелочки тоже работают (при правильном указании терминала). Также можно использовать быстрые клавиши:
- ^ или 0 — в начало текущей строки;
- $ — в конец текущей строки
- w — на слово вправо
- b — на слово влево
- W — до пробела вправо
- B — до пробела влево
- } — абзац вниз
- { — абзац вверх
- <Ctrl-f> — на страницу (экран) вниз
- <Ctrl-u> — на страницу (экран) верх
- g — перейти в начало файла
- G — перейти в конец файла
- <number>G — перейти на конкретную строку <number>
- /<text><CR> — перейти к <text>
- ?<text><CR> — то же самое, но искать назад
- n — повторить поиск
- N — повторить поиск назад
[править] Редактирование файла
Предположим в нашем файле записан следующий текст:
—Винни, тебе что намазать на хлеб, мёду или сгущённого молока? —И того, и другого, и можно без хлеба! —Ну, если вы больше ничего не хотите… — А что, что-то есть ещё?
Диалог симпатичный, но несколько несвязный. Давайте изменим его — для этого необходимо перейти в режим ввода. Самый простой способ — из обычного режима нажатие клавиши «i». После чего можно смело приступать к вводу текста. <ESC> вернет нас к обычному режиму. Другие важные команды:
- R — перейти в режим ввода с забиванием текста
- i — перейти в режим ввода с текущей позиции
- I — переместиться в начало строки и перейти в режим ввода
- a — перейти в режим ввода после курсора
- А — переместиться в конец строки и перейти в режим ввода
- o — перейти в режим ввода с новой строки под курсором
- O — перейти в режим ввода с новой строки над курсором
- x — удалить символ под курсором
- X — удалить символ влево (удалить символ перед курсором)
- dd — удалить текущую строку
- d<число>d — стирание числа строк начиная с текущей
- yy — копирование текущей строки в неименованный буфер
- y<число>y — копирование числа строк начиная с текущей в неименованный буфер
- p — вставка содержимого неименнованного буфера под курсором
- P — вставка содержимого неименнованного буфера пееред курсором
- J — слияние текущей строки со следующей
- u — отмена последней команды
- . — повтор последней команды
Конечно, все сразу запомнить их трудно, даже не надо. Уверяю вас, через некоторое время эти команды будут пользоваться спросом.
Наконец мы дошли к самому главному — командному режиму. Помним как в него перейти? «:». Шифт-ж если по-русски.
[править] Запись/выход
Если вы в режиме ввода, то необходимо предварительно нажать <ESC>, чтобы перейти в обычный режим.
ZZ - записать файл и выйти
:w<CR> - записать файл
:sav filename - "Сохранить как"
:w!<CR> - записать файл
Эта команда может помочь, если файл заблокирован другим пользователем, либо отсутствуют такие привилегии, либо еще какая беда. При попытке записи без «!» будет выдано соответствующее предупреждение.
:w new_file<CR>
Создать новый файл «new_file» и записать в него текущее содержимое. Если файл существует, будет показано предупреждение. Дальше вы продолжаете работать со старым файлом — mamapapa.txt
:q<CR> - выйти из редактора.
Если файл был изменен, у вас ничего не получится. В таких случаях необходимо добавлять после команды «!»:
:q!<CR> - выйти из файла, не сохраняя изменения :qa!<CR> - выйти из всех файлов, не сохраняя изменения
[править] Коэффициент повторения
Почти все команды vi принимают так называемый коэффициент повторения. Попросту говоря, если перед командой в обычном режиме вы указываете число, то команда повторяется соответствующее количество раз. Например, команда «j» перемещает курсор на одну строку вниз — «3j» переместит курсор на 3 строки вниз. Результатом команды «iпривет<ESC>», как вы, наверное, догадались, будет вставка слова «привет» — «2iпривет<ESC>» вставит «приветпривет».
[править] Дополнительные возможности
Есть несколько вещей, без которых редактирование похоже на пытку:
^G - показать информацию о файле :<number> - перейти на <number> строк вперед :set nu[mber] - отобразить слева нумерацию строк(:set nonu[mber] - спрятать нумерацию) :set wrap - переносить длинные строки(:set nowrap - не переносить) :sy on/off - включить/выключить подсветку синтаксиса :colorscheme <name> - задать цветовую тему (где <name> имя темы, TAB работает как авто-дополнение) :h или :help - список возможной помощи(:viusage, :exusage) привести концы строк в файле к виду dos или unix соответственно: :set fileformat=dos :set fileformat=unix Задать размер табуляции в 4 пробела: :set ts=4
[править] Vim и русская раскладка клавиатуры
В обычном режиме Vim по умолчанию ожидает, что консоль находится в режиме ввода латинских символов. Если вы, к примеру, редактируете с помощью Vim текст на русском языке, или в смешанных кодировках (к примеру, HTML-страницу на русском), то постоянная необходимость переключать системную клавиатурную раскладку очень быстро вам надоест. Существует быстрый способ решить эту проблему. Для этого в файл конфигурации Vim, который называется .vimrc (или _vimrc в Microsoft Windows) нужно добавить следующие строки:
set keymap=russian-jcukenwin set iminsert=0
После этого системную раскладку клавиатуры можно будет оставить в режиме ввода латинских символов, а переключение между языками осуществлять уже внутри самого редактора с помощью команды Ctrl+^ (Ctrl+6 в версии для Windows)
Кроме этого, в версии для Windows Vim по умолчанию не настроен на использование кодировок клавиатуры, содержащих символы кириллицы, например CP1251 и KOI8-R (в версии же для Linux настройка по умолчанию корректна). Как следствие этого, Vim при редактировании русского текста будет неправильно обрабатывать команды перемещения по тексту, основанные на поиске слова, такие как w (одно слово вперед), b (одно слово назад), * (найти в тексте слово под курсором) и т. п. Чтобы настроить Vim для корректной работы с этими командами независимо от языка, достаточно добавить в файл конфигурации _vimrc следующую строку:
set iskeyword=@,48-57,_,192-255
[править] Vim
[править] Главные отличия от vi
- Неограниченное число undo/redo. (в 7-ой версии появились деревья)
- Многооконность.
- Поддержка множества буферов. (в 7-ой версии появились закладки)
- Подсветка синтаксиса.
- Редактирование командной строкой.
- Достраивание имен файлов.
- Визуальное редактирование.
- Кроссплатформенность.
- Графический интерфейс (GUI).
- Режим совместимости с vi.
- Проверка орфографии
[править] Команды
Переход к началу файла в Vim отличается от Vi:
gg
[править] Слово под курсором
Перейти к следующему вхождению слова под курсором
*
Перейти к предыдущему вхождению слова под курсором
#
Перейти к определению слова под курсором
gd (go definition)
Перейти к редактированию файла (под курсором должен быть путь)
gf (go file)
[править] Визуальный режим
Это существенное расширение возможностей Vi, без которого не обходится ни один «нормальный» текстовой редактор. Режим предназначен для выделения блока текста и дальнейшей работы с ним и состоит из 3-х последовательных шагов:
- Пометка начала блока с помощью «v», «V» или CTRL-V. Блок помечается с того символа на котором находится курсор(по умолчанию).
- Перемещение курсора в конец необходимого блока. Последний символ так-же будет включен в выделенный блок.
- Вызов необходимой команды.
Команда «v» предназначена для выделения текста посимвольно. Символы до и после курсора в строке не будут входить в выделение. Необходима в первую очередь для копирования участков текста в строке.
«V» — для выделения текста построчно.
CTRL-V — для выделения прямоугольного участка текста. Удобна в случае редактирования структурированного текста.
С выделеным участком текста можно производить стандартные действия по редактированию(копирование — «y», удаление — «d»). Напомню, что в Vim при удалении участка текста, он автоматически помещается в специальный регистр, что равноценно «вырезанию» участка текста, который потом можно будет вставить с помощью команды «p»(вставка текста после курсора) или «P»(вставка текста перед курсором).
[править] ~/.vimrc
vimrc — это файл конфигурации Vim. При запуске Vim сначала читает этот файл и применяет записанные в нем настройки. Рекомендуемое расположение этого файла для различных платформ:
Unix $HOME/.vimrc MS-DOS and Win32 $HOME/_vimrc или $VIM/_vimrc
Файл конфигурации используется для настройки различных аспектов поведения и внешнего вида Vim.
Комментарии в этом файле начинаются с символа " (двойная кавычка) и продолжаются до конца строки.
Для примера приводится выдержка из файла _vimrc автора:
" установить keymap, чтобы по Ctrl+^ переключался на русский и обратно set keymap=russian-jcukenwin " по умолчанию - латинская раскладка set iminsert=0 " по умолчанию - латинская раскладка при поиске set imsearch=0 " игнорировать регистр при поиске set ic " подсвечивать поиск set hls " использовать инкрементальный поиск set is " ширина текста set textwidth=70 " минимальная высота окна пусть будет 0 (по умолчанию - 1) set winminheight=0 " всегда делать активное окно максимального размера set noequalalways set winheight=9999 " установить шрифт Courier New Cyr set guifont=courier_new:h10:cRUSSIAN " настраиваю для работы с русскими словами (чтобы w, b, * понимали " русские слова) set iskeyword=@,48-57,_,192-255 " задать размер табуляции в четыре пробела set ts=4
Для получения более подробной информации по файлу _vimrc можно набрать в командной строке Vim команду
:help vimrc
[править] Vim при переводах текста, или для чтения английской документации
Итак, что бы можно было успешно читать и переводить документацию на английском языке, нужно ИМХО всего 3 вещи:
- Редактор.
- Переводчик.
- проверка орфографии
Если их удобно объединить, то можно получить хорошую среду, для перевода/чтения.
[править] Что возьмем
Редактор мы естественно возьмем VIM хотя бы потому что статья так называется. Переводчик mueller консольная версия, работает так:
% mueller sex sex [seks] _n. 1> _биол. пол; the weaker sex слАбый пол, жЕнщины; the sterner (или stronger) sex сИльный пол, мужчИны; the sex _шутл. жЕнщины 2> секс 3> _at tr. половОй, сексуАльный; sex instinct половОй инстИнкт; sex intergrade гермафродИт
И арфоргафмометр: это spell в виме, словари скачаем с vim.org
[править] Как настроим
Мне интересна возможность выпадающего списка, при наведением на неизвестное мне слово мышкой. Для этого, после долгого чтения манов (или гугленья) узнаем что с помошью команды system можно выполнить какое-то действие, вывод которой куда-либо записать. короче пишем где-нибудь в ~/.vimrc
function! MyBalloonExpr()
return system("mueller ". v:beval_text)
endfunction
set bexpr=MyBalloonExpr() set ballooneval set balloondelay=100
Определили функцию MyBallonExpr которая будет формировать строку mueller [слово на которое навели] и выполнять. Результат выполнения будет выдавать в «балоне» выпадающем окошке, через 100 миллисекунд.
Естественно вместо mueller вы можите поставить любую другую программу, которая переводит текст.

