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-х последовательных шагов:

  1. Пометка начала блока с помощью «v», «V» или CTRL-V. Блок помечается с того символа на котором находится курсор(по умолчанию).
  2. Перемещение курсора в конец необходимого блока. Последний символ так-же будет включен в выделенный блок.
  3. Вызов необходимой команды.

Команда «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 вы можите поставить любую другую программу, которая переводит текст.

[править] Ссылки

  • Vim.org — официальный сайт vim — документация, файлы, плагины
  • Vim-howto — руководство по использованию vim
Источник — «http://ru.wikibooks.org/wiki/Vim»
На других языках