Oсвоение консольного редактора vi & vim

Работа с файлами

Редактируя текст в Vim, пользователь работает не непосредственно с файлом, а с буфером. Если открывается уже существующий файл, Vim копирует его содержимое в буфер и отображает буфер на экране. Все изменения, которые делает пользователь, происходят именно в содержимом буфера — открытый файл пока остаётся неизменным. Если же Vim вызван без параметра, то создаётся пустой буфер, который пока не связан ни с каким файлом.

В действительности содержимое буфера хранится в специальном временном файле (swap file). Если сеанс работы в редакторе по какой-то причине прервался, то этот временный файл не будет удалён, и при следующей попытке продолжить незаконченную работу с файлом Vim предложит провести процедуру восстановления — на случай, если во временном файле остались несохранённые изменения.

Чтобы записать сделанные изменения в файл, используется команда «» (чтобы её отдать, нужно сначала перейти в командный режим). О том, что «» — это сокращение от англ. «write», «записать», можно узнать, нажав после «» — и Vim дополнит эту команду до «». Подобным образом можно поступить с большинством команд в командной строке Vim — в этом редакторе очень последовательно соблюдается принцип аббревиативности. Мефодий выполнил «» и получил такое информационное сообщение:

Это файл для примеров.
Пример 1.
Моя первая сторка в vi!
~
~
~
~
"textfile" 3L, 57C записано 3,24 Весь

Пример 4. Запись файла

Мефодий не указал, куда именно записать содержимое буфера, и по умолчанию оно было записано в тот файл, который он и открывал для редактирования: «». Однако команде «» можно указать любое имя файла в качестве параметра — и тогда содержимое буфера будет записано в этот файл, а если такого файла нет, то он будет создан. Параметр «» обязательно потребуется, если текст в буфере ещё не записан ни в каком файле.

Наиболее важна для новичка команда выхода из Vim — «» (сокращение от «quit»). Пользователь, запустивший редактор в первый раз, нередко сталкивается с тем, что никак не может его закрыть: не работает ни один из привычных способов завершения программы, даже «» Vim обрабатывает по-своему.

Управляющая последовательность «» приводит к аварийному завершению текущей команды vi, а не самого редактора.

И «» и «» — команды режима командной строки, в этот режим Vim переводится из командного режима с помощью «» в мх начале.

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

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

Строковый режим

Несмотря на то, что командный режим и режим вставки используются наиболее часто, работа в строковом режиме не менее эффективна, но пользователи не до конца понимают и используют его возможности. Строковый режим переводит нас в строчный редактор, позволяя применять команды к одной или нескольким строкам. Учитывая, что свое название vi получил от одной из команд линейного редактора ex, можно сказать, что строковый режим переносит вас в редактор ex.

Для перехода из командного режима в строковый просто нажмите двоеточие ().
Курсор переместится в левый нижний угол окна, при вводе с клавиатуры весь текст будет следовать за двоеточием в нижней части окна. При нажатии клавиши Enter команда обрабатывается и исполняется. Если вы передумали и не хотите, чтобы введённая в строковом режиме команда выполнялась, нажмите Esc для возврата в командный режим.

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

Например, для обработки только 23-й строки начало команды будет иметь вид
. Для изменения строк с 2319-й по 3819-ю команда начинается с . Для обработки строк с 45-й и до последней в файле, последний аргумент заменяется знаком доллара () —.

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

  • : Записать файл на диск. С дополнительным аргументом данные будут записаны в файл с именем .

    Примечание: с дополнительным аргументом, и если файл уже существует, данные в нем не будут перезаписаны.

  • : Переписать данные в файле и сохранить его на диске.
  • : Записать строки с по в файл .
  • : Выйти из редактора без сохранения.

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

  • : Выйти из редактора, не сохраняя файл на диске.
  • : При редактировании нескольких файлов перейти к следующему файлу в списке редактирования.
  • : Редактировать .
  • : Переключение между двумя редактируемыми файлами.
  • : Заменить первую встретившуюся в текущей строке последовательность символов на .
  • : Заменить последовательность символов на
    начиная с 1-й строки и до последней в файле.
  • : Загрузить файл
    в текущий сеанс редактирования.
  • : Удалить строки с
    по .
  • : Вставить строки с
    по .

Перед началом работы

Об этом руководстве

vi-редактор, по сути, текстовый редактор вUNIX и Linux. Он существует почти для всех систем и доступен для Windows, DOS, Macintosh, OS/2, SGI и многих других платформах. Если вы еще не знаете vi или вам еще неудобно его использовать, то вы должны изучить это руководство и добиться больших результатов с помощью самой популярной и мощной Linux/UNIX визуальной программы-редактора.

Цели

Главная цель — помочь вам быстро изучить vi. Трудность для быстрого изучения заключается в том, что в vi есть много команд. Чтобы эффективно использовать vi, вам необходимо запомнить довольно много команд. Это может занять много времени, и одна из целей этого руководства — сократить ваше время на их запоминание. Таким образом, с самого начала я поставил себе задачу: как я смогу помочь вам в запоминании такого количества команд за небольшой промежуток времени?

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

Предварительные требования

Нет никаких предварительных требований для этого руководства. Мы используем несколько методов для того, чтобы вам помочь. Во-первых, как вы и предполагали, я собираюсь описывать, как конкретные команды работают. Затем я попрошу вас попытаться использовать эти команды в vi (для приобретения практических навыков) и затем мы перепишем эти команды в шпаргалку

Если вы хотите изучать vi быстро, важно, чтобы вы выполнили все эти шаги. Использование команды в vi и переписывание ее в вашу шпаргалку будет способствовать запоминанию команды

Системные требования

Есть много версий vi, и я собираюсь показать вам, как использовать версию vi, которая называется vim. vim — очень популярна и имеет массу расширений, которые делают vi привлекательнее (если я демонстрирую команду, присущую vim, я это обозначаю). Чтобы установить vim, посмотрите раздел в конце этого руководства для ссылки на домашнюю страницу vim. vim — текстовый редактор, который запускается в режиме команд или терминальной сессии. Рисунок 1 показывает скриншот vim с XML-кодом данного руководства на английском языке, открытого в режиме команд.

Рисунок 1. Запуск vim

Кроме усовершенствованной командной строки vi, vim также содержит хороший GUI редактор, который называется gvim. Рисунок 2 показывает скриншот gvim с тем же XML-кодом, который вы видели ранее.

Рисунок 2. Запуск gvim

Если вы новичок в vi, попытайтесь запустить gvim на своей машине. Использование vi из GUI облегчит понимание некоторых вещей.

Освоение интерфейса Vim

Изначально не очевидно, однако в одной сессии Vim можно одновременно редактировать несколько файлов. Делается это при помощи т. н. «окон» или же при помощи относительно новой возможности Vim, добавленной в 7-й версии — вкладок.

Давайте сперва рассмотрим окна. Когда вы открываете Vim для редактирования файла, вы видите одно окно с содержимым файла. Представим, что вы редактируете ну очень большой файл и вам нужно редактировать его параллельно в двух местах. Дайте команду (не забывайте нажимать Ctrl+Esc для перехода в командный режим)

:split

и вы увидите один и тот же файл в двух разных окнах.

Хорошо, но как теперь переключиться обратно в предыдущее окно? Очень просто. Перейдите в командный режим, нажмите Ctrl+w и при помощи клавиш со стрелками или клавиш перемещения (h, j, k, l) выберите нужное окно, на которое хотите переключиться относительно текущего окна. Допустим, ваша Vim-сессия разделена горизонтально на два окна. При помощи команды

Ctrl+w k

вы переключитесь на окно, расположенное выше активного, в то время как команда

Ctrl+w j

переключит вас на окно, расположенное ниже. Двойной повтор команды Ctrl+w переключит вас на следующее окно.

Помимо переключения между окнами вы можете перемещать сами окна. Команда

Ctrl+w r

вращает окна по часовой стрелке, а команда

Ctrl+w R

вращает окна против часовой стрелки.

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

:split /etc/dhcp3/dhclient.conf

Что делать, если вам понадобилось вернуться в однооконный вариант Vim-сессии? Для это вам нужно всего лишь закрыть ненужные окна традиционным способом (при помощи команды :q, :!q или :wq) или же, находясь в окне, которое хотите закрыть, дать команду

Ctrl+w c

В случае последней команды Vim не даст вам закрыть изменённый, но не сохранённый файл, что логично.

Давайте подытожим список основных команд, используемых при работе с окнами в Vim.

  • :split или Ctrl+w s — добавляет в сессию Vim горизонтальное окно
  • :vsplit или Ctrl+w v — добавляет в сессию Vim вертикально окно
  • :split filename  — добавляет в сессию Vim горизонтальное окно и загружает в него filename
  • :vsplit filename  — добавляет в сессию Vim вертикальное окно и загружает в него filename
  • Ctrl+w h — переключает на левое окно, относительно текущего
  • Ctrl+w l — переключает на правое окно, относительно текущего
  • Ctrl+w j — переключает на нижнее окно, относительно текущего
  • Ctrl+w k — переключает на верхнее окно, относительно текущего
  • Ctrl+w Ctrl+w — переключает на следующее окно
  • Ctrl+w r — передвигает окна по часовой стрелке
  • Ctrl+w R — передвигает окна против часовой стрелки
  • Ctrl+w c — закрывает текущее окно

И сразу ответ тем, кто спросит: «не лучше ли открыть несколько однооконных сессий вместо всей этой возни с окнами?». Подумайте о том, как иной раз бывает утомительно редактировать несколько файлов, открытых в нескольких отдельных SSH-сессиях к серверу, особенно высоконагруженному. И потом, гораздо удобнее выполнять копирование/вставку между несколькими файлами в пределах одной сессии, когда у вас всё перед глазами и не нужно судорожно переключаться между несколькими терминалами в поисках того,что же вы собирались скопировать и откуда.

Дальше — больше

Приведенной выше информации вполне достаточно, чтобы открывать, редактировать и сохранять файлы в текстовом редакторе Vim, однако у него есть возможности, которые могут существенно упростить и ускорить работу. Стоит начать с пояснения: Vi был одним из первых визуальных текстовых редакторов, однако начиная с определенной версии программный продукт стал доступен только под коммерческой лицензией. Энтузиасты начали разрабатывать свои аналоги этого текстового редактора, одним из которых является Vim (сокращение от Vi Improved — Vi  усовершенствованный). Vim получил широкое распространение в *nix-дистрибутивах и при запуске команды vi в консоли вероятнее всего откроется именно он.

Прежде всего нужно понять, что Vim может работать в нескольких режимах, каждый из которых обладает своими особенностями и набором поддерживаемых функций. Сразу после запуска редактора вы окажетесь в обычном режиме (normal). Здесь можно не только перемещать курсор по тексту, но и выделять/удалять/копировать/вставлять как отдельные символы, так и целые блоки текста. Эти задачи выполняются нажатием соответствующих букв и цифр (причем регистр букв имеет значение), точка отсчета — текущее положение курсора. Рассмотрим навигацию по файлу:

  • h — смещение курсора на один символ влево;
  • j — смещение курсора на один символ вниз;
  • k – смещение курсора на один символ вверх;
  • l – смещение курсора на один символ вправо;
  • w – смещение курсора в начало следующего слова в данной строке;
  • b – смещение курсора в начало предыдущего слова в данной строке;
  • G – переместить курсор в конец файла;
  • gg – вернуться в начало файла.

Действия навигации также можно совмещать с цифрами, например, комбинация 3w сместит курсор вперед на три слова, а 5k на пять строк вверх.

Часто используемые операции c текстом:

  • x — удалить символ под курсором;
  • d — удалить символы/строки;
  • dd — удалить строку целиком;
  • D — удалить символы от текущего положения курсора до конца строки;
  • v — включить режим выделения текста;
  • y — скопировать символы/строки;
  • yy — скопировать строку целиком;
  • p — вставить символы/строки;
  • u — отменить последнее действие.

Функции удаления и копирования требуют дополнительного пояснения, ведь при нажатии d или y вроде бы ничего не происходит. Дело в том, что редактор ожидает дальнейших указаний — сколько строк символов нужно удалить/скопировать и в каком направлении от текущего положения курсора вести отсчет. Чтобы удалить пять символов вправо от курсора, нужно последовательно нажать d5l, чтобы скопировать три строки, следующие после курсора — y5j. Если имеется выделенный текст, для его копирования достаточно нажать y.

Имеется в Vim и функция поиска:

  • /шаблон — все вхождения набора символов, указанного после (слэша) будут подсвечены в тексте;
  • n — сместить курсор к следующему вхождению;
  • N — сместить курсор к предыдущему вхождению.

Другой режим работы Vim — режим редактирования. Переключиться в него можно несколькими способами:

  • i — режим вставки (INSERT), ввод начинается с позиции курсора;
  • a — режим вставки (INSERT), ввод начинается с позиции, следующей за курсором;
  • A — режим вставки (INSERT), курсор перемещается в конец текущей строки;
  • R — режим замены (REPLACE), все вводимые символы будут последовательно заменять находящиеся под курсором.

Если нужно заменить всего один символ, находящийся под курсором, достаточно нажать r и нужный символ — замена будет произведена без перехода в режим редактирования. Внизу экрана появляется соответствующий индикатор режима — INSERT или REPLACE. Вернутся в общий режим можно нажатием кнопки Esc (индикатор должен пропасть).

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

  • :q — выйти из редактора;
  • :q! — выйти из редактора без сохранения изменений в файле;
  • :w — сохранить изменения в файл;
  • :wq — сохранить изменения и закрыть редактор;
  • :r имя_файла — добавить содержимое указанного файла в редактируемый;
  • :r! команда_консоли — выполнить команду и добавить ее вывод в файл.

Визуальный рeжим, копированиe и вставка

Пользуясь тeкстовыми рeдакторами, мы часто прибeгаeм к функции копирования и вставки тeкста. Мы привыкли к горячим клавишам Ctrl + C и Ctrl + V в соврeмeнных опeрационных систeмах, поэтому работа в vi можeт показаться сложной. На самом жe дeлe нужно лишь пeрeйти в визуальный рeжим, послe чeго с помощью ужe изучeнных команд выдeлить и скопировать нужный тeкст. Копированиe в рeдакторe vi (как и вставка) работаeт только в спeциальном рeжимe visual (активируeтся клавишeй v). В визуальном рeжимe часть тeкста в докумeнтe подсвeчиваeтся. Подсвeчeнную область можно измeнить, пользуясь клавишами пeрeмeщeния и их комбинациями. Затeм, послe того как будeт выбрана нужная область, достаточно нажать y для копирования тeкста или d для eго вырeзания (удалeния из выдeлeнной области). Вставить тeкст так жe просто — пeрeмeститe курсор в нужную область и нажмитe P. Тeкст мгновeнно окажeтся в области за курсором.

Опции и Переменные

Включить нумерацию строк и сделать её относительной, можно добавив в файл .vimrc:

Сохраните это и вам больше не придется думать об этих настройках. Каждый раз при открытии файла Vim будет показывать относительную нумерацию строк. Команда set  включает одну из опций Vim. Выключить настройку можно указав ей противоположную опцию. Перед противоположной опцией ставится no, в отличии от обычной опции.

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

Не ставьте оба set’а, которые мы рассматривали в .vimrc. Это включит опцию и тут же её выключит. Скоро, я покажу вам, как делать это более программным путем.

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

Если же хочется узнать текущее значение опции, используйте ? после названия опции, например

Это вернёт нам number. Теперь, с этой информацией, вы всегда сможете узнать состоянии интересующей вас опции.

Если вы хотите изменить количество колонок, которое занимает нумерация на экране, вы можете присвоить значение опции numberwidth. Данный пример установит нумерацию в 4 колонки шириной:

Посмотрите сколько места подойдет вам для нумерации и добавьте данную опцию в ваш .vimrc.

Если вам понадобится создать переменную, используйте выражение let. К примеру:

Когда сохраните это в файле .vimrc (используйте свое имя в качестве значения переменной), можно отобразить его в режиме командной стоки с помощью :echo name

Показывает значение переменной

Поставив перед опцией префикс &, с ней можно обращаться, как с переменной. Показать значение опции можно таким образом:

Команда echo используется исключительно для переменных, но указав префикс & перед опцией, тем самым мы сообщаем Vim, что хотим взаимодействовать с данной опцией, как с переменной. Теперь, удобно производить над значением опции различные математические операции. Следовательно, чтобы увеличить ширину нумерации на одну колонку, можно воспользоваться следующим примером:

echo &numberwidth должно показать значение 5.

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

b: Область видимости буфера—Переменная будет доступна только в текущем буфере
w: Область видимости окна—Доступна только внутри текущего окна
t: Область видимости вкладки—Доступна на текущей вкладке
g: Глобальная область видимости — Доступна везде
I: Локальная область видимости—Переменная доступна локально, для функции в которой была определена
s: Область видимости скрипта—Переменная является локальной, только для текущего скрипта
a: Область видимости аргумента—Переменная будет доступна только внутри функции
v: Глобальная область видимости—Используется для переменных определённых и используемых Vim

Правильное определение переменной в глобальной области видимости, будет выглядеть так:

Советы и рекомендации

Нумерация строк

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

Переход к новой строке осуществляется посредством или . Все переходы запоминаются в лист переходов, для более подробной информации смотрите .

Проверка орфографии

Проверку орфографии в Vim можно включить с помощью:

set spell
Действие Команда
следующая ошибка
предыдущая ошибка
предложения для исправления
добавить правильное написание
добавить правильное написание (на сеанс)
добавить неправильное написание
добавить неправильное написание (на сеанс)
повторить проверку орфографии во всем файле

Совет:

  • Чтобы включить проверку сразу для двух языков (например, английского и русского), добавьте в или и перезапустите Vim.
  • Вы можете включить проверку орфографии для конкретных типов файлов (например .txt), используя плагин FileType и собственное правило для определения типа файла. Чтобы включить проверку орфографии для всех файлов, оканчивающихся на .txt, создайте файл и вставьте туда строку: . Далее, вставьте строку в файл или и перезапустите Vim. Или поместите строку в или и перезапустите Vim. Не забудьте отредактировать строчку (specifically ), чтобы включить соответствующие типы файлов для проверки орфографии.
  • Чтобы включить проверку орфографии только для документов LaTeX (или TeX), добавьте в файл или и перезапустите Vim.

Запуск Vim по команде vi

Создайте для на .

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

Возврат каретки DOS/Windows

Если вы видите последовательность в конце каждой линии, это означает, что вы редактируете текстовый файл, который был создан в MS-DOS или Windows. Дело в том, что в Linux для переноса принято использовать один символ новой строки (LR), тогда как в системах Windows/MS DOS для той же цели используется последовательность из двух символов: возврата каретки (CR) и новой строки (LR). Как раз эти символы возврата каретки и отображаются в виде .

Для удаления всех символов возврата каретки из файла, выполните:

:%s/^M//g

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

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

Примечание: Другой простой способ заключается в изменении опции . Используйте для преобразования файлов с окончанием строки DOS/Windows в файлы с окончанием строки Unix. Для того, чтобы сделать обратное, просто используйте .

Пустое пространство в нижней части окон gVim

Когда используется оконный менеджер, настроенный на игнорирование размеров окна, gVim заполняет неиспользованные области окна стандартным фоновым цветом темы GTK.

Решение заключается в регулировании количества места, которое будет резервировать в нижней части окна gVim. Поместите следующую строку в :

set guiheadroom=0

Примечание: Установив значение 0, вы не сможете видеть горизонтальную полосу прокрутки внизу окна.

И еще раз :

ESC :q! Enter — выход без сохранения
ESC :wq Enter или ESC 😡 Enter — выход с сохранением

Да и приятности с плюшками — ниже шпаргалка для работы с vim

Файл настройки: ~/.vimrc
Можно редактировать файлы через сеть, например
:e ://user@host/path/to/the/file.txt
:Ex или :e ./ - файловый менеджер

== Основы ==
hjkl                      перемещение в разные стороны
i                         режим вставки
I                         добавление в начало строки
a                         режим добавления
A                         добавление в конец строки
o                         добавить строку сразу за текущей
O                         добавить строку перед текущей
R                         писать поверх имеющегося текста
u, :u                отмена предыдущего действия (undo)
CTR-R, :red            отмена отмены предыдущего действия (redo)
dd                        вырезать (удалить) строку
cc                        удалить и начать редактирование
yy                        копировать строку
p                         вставить из буфера обмена
d                      удалить n+1 строку
y                      скопировать n+1 строку
ESC                       перейти в режим просмотра
DEL                       удалить следующий символ
:                      перейти на строку #n
%                         перейти к парной скобке
:e **/filename.c          редактировать файл (с поиском по имени)
:w                 записать изменения
:wa                       сохранить изменения во всех файлах
:q                        выйти из редактора
:q!                       выйти из редактора, не сохраняя изменения
:color              выбор цветовой схемы. цветвые схемы:
                            /usr/local/share/vim/vim72/colors/*.vim
:pwd                      текущий каталог
:cd                 перейти в другой каталог
:!команда                 выполнить команду - man, git, и так далее
                            стрелочками веерх и вниз можно автодополнять
                            команды и искать по истории
CTR+p или CTR+n           автоматическое дополнение текста
                            (в режиме редактирования)
CTR+r,=,            вставить выражение, например 5*2 - 3
                            (в режиме редактирования)
CTR+u, CTR+d              Page Up / Page Down
CTR+y, CTR+e              Перемотка вверх/вниз без движения курсора               

== Подсветка синтаксиса ==
:syntax on                включить подсветку
:syntax off               выключить подсветку (по умолчанию)

== Перенос строк ==
:set wrap                 разрешить word wrap (по умолчанию)
:set nowrap               запретить word wrap

== Печать ==
:ha                   распечатать документ
:set printoptions=duplex:off  отключить двустороннюю печать

== Сворачивание ==
zc                        свернуть блок
zo                        развернуть блок
zM                        закрыть все блоки
zR                        открыть все блоки
za                        инвертирование
zf                        см :set foldmethod=manual
:set foldenable           включить свoрачивание
:set foldmethod=syntax    сворачивание на основе синтаксиса
:set foldmethod=indent    сворачивание на основе отступов
:set foldmethod=manual    выделяем участок с помощью v и говорим zf
:set foldmethod=marker    сворачивание на основе маркеров в тексте
:set foldmarker=bigin,end задаем маркеры начала и конца блока

== Маркеры ==
ma                        установить локальный маркер a
mB                        установить глобальный маркер B
`c                        перейти к локальному маркеру c
`0                        вернуться на позицию, на которой закончили
                            работу при закрытии vim
:marks                    просмотр маркеров
set viminfo='1000,f1      маркеры пишутся в ~/.viminfo, восстанавливаясь
                            при следующем запуске vim. маркер " хранит
                            последнюю позицию курсора в файле
== Сессии ==
mksession file.session    сохранить текущую сессию
source file.session       восстановить ранее сохраненную сессию

== Макросы ==
qa                        записать макрос с именем a
q                         в режиме записи макроса: закончить запись
@a                        выполнить макрос с именем a
@@                        повторить последний макрос

== Регистры ==
"ayy                      скопировать строку в регистр a
"bdd                      вырезать строку и поместить в регистр b
"С2d                      вырезать три строки и дописать в конец
                            регистра C
:reg   просмотреть содержимое регистров

== Выделение ==
v + hjkl                  выделение текста
SHIFT + v                 выделить строку
CTR + v                   выделение прямоугольника
p                         вставить
y                         копировать
d                         удалить
gu                        к нижнему регистру
gU                        к верхнему регистру

== Отступы ==
>                      сдвинуть выделенное вправо
>                     сдвинуть строку вправо
gt                    перейти на таб #n
gt                       следующий таб
gT                       предыдущий таб
:tabm +1                 переместить таб вперед на одну позицию
:tabm -1                 переместить таб назад на одну позицию
:tabm 2                  переместить таб на заданную позицию
                           (нумерация начинается с нуля)

== Работа с окнами ==
:split                   горизонтальное разбиение
:vsplit                  вертикальное разбиение
Ctr+W, затем
  с                      закрыть окно
  +-                     изменение высоты текущего окна
                       изменение ширины текущего окна
  =                      установить равный размер окон
  hjkl или стрелочки     перемещение между окнами

== Проверка орфографии ==
    mkdir -p ~/.vim/spell
    cd ~/.vim/spell
    wget http://ftp.vim.org/vim/runtime/spell/ru.koi8-r.sug
    wget http://ftp.vim.org/vim/runtime/spell/ru.koi8-r.spl
    wget http://ftp.vim.org/vim/runtime/spell/en.ascii.sug
    wget http://ftp.vim.org/vim/runtime/spell/en.ascii.spl

:set spell spelllang=ru,en       включить проверку орфографии
:set nospell                     выключить проверку орфографии
]s                               следующее слово с ошибкой
wildmenu          При авто-дополнении в командной строке над
                             ней выводятся возможные варианты
:set list                  Отображать табуляцию и переводы строк
q:                         История команд
.                          Повторение последней команды

Данная информация была любезно предоставлена сайтом — «Записки программиста»

[править] vi в фольклоре

  • BOFH знает и любит vi. Одна из его знаменитых отмазок — «Система остановлена. vi нужно обновить до vii.».
  • vi vi vi — число дьявола.
  • Модератор эхи ru.vim перешел на Emacs[пруфлинк?].
  • Вий в восточнославянской мифологии — дух, несущий смерть, что символизирует. Алсо у Гоголя есть одноименная повесть.
  • Хотя в православном debian ви был выпилен (из состава /bin) и заменён на nano, но в составе бизибокса всё равно ви, так что учить его придётся.
  • Про vi написана песня:

Addicted To vi
(with apologies to Robert Palmer)

You press the keys with no effect,
Your mode is not correct.
The screen blurs, your fingers shake;
You forgot to press escape.
Can’t insert, can’t delete,
Cursor keys won’t repeat.
You try to quit, but can’t leave,
An extra «bang» is all you need.

You think it’s neat to type an «a» or an «i»—
Oh yeah?
You won’t look at emacs, no you’d just rather die
You know you’re gonna have to face it;
You’re addicted to vi!

You edit files one at a time;
That doesn’t seem too out of line?
You don’t think of keys to bind—
A meta key would blow your mind.
H, J, K, L? You’re not annoyed?
Expressions must be a Joy!
Just press «f», or is it «t»?
Maybe «n», or just «g»?

Oh—You think it’s neat to type an «a» or an «i»—
Oh yeah?
You won’t look at emacs, no you’d just rather die
You know you’re gonna have to face it;
You’re addicted to vi!

Might as well face it,
You’re addicted to vi!

You press the keys without effect,
Your life is now a wreck.
What a waste! Such a shame!
And all you have is vi to blame.

Oh—You think it’s neat to type an «a» or an «i»—
Oh yeah?
You won’t look at emacs, no you’d just rather die
You know you’re gonna have to face it;
You’re addicted to vi!

Might as well face it,
You’re addicted to vi!

Возможности производительности

Чем дальше, тем лучше

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

Однако vi также содержит и более мощные команды. В этом разделе я научу вас вырезать, копировать и вставлять, осуществлять поиск и замену, а также использовать методы автоматического отступа. Эти команды помогут сделать работу с vi лучше и продуктивнее.

Визуальный режим

Лучший способ вырезать и вставить — использовать визуальный режим, — специальный режим, который добавлен к последним версиям vi, таким как vim и elvis. Считайте, что визуальный режим — это режим подсветки текста. Когда текст подсвечен, его легко можно копировать и удалить, а затем вставить.

Нажав v, вы переходите в визуальный режим. Вы увидите слово viSUAL внизу слева вашего редактора, как показано на рисунке 3. Затем, переместив курсор, используя команды передвижения (в основном, клавиши стрелок), вы сможете подсветить область текста. Если ваш менеджер Window понимает нажатие на клавиши мышки, вы можете также подсветить текст, удерживая левой кнопкой мышки определенную часть текста, которую необходимо подсветить.

Рисунок 3. Использование визуального режима vi

Когда текст подсвечен, вы можете вырезать или копировать его. Если вы копируете текст, нажмите y. Если вы вырезаете текст, нажмите d. Вы перейдете обратно в режим команд. Теперь перейдите к месту, где бы вы хотели вставить вырезанный или скопированный текст, и нажмите P, чтобы вставить текст после курсора или p — до курсора. Вот и все, процесс вырезания/копирования и вставки закончен! Выполните несколько таких операций, прежде чем продолжить.

Замена текста

Чтобы заменить некоторые части текста, мы используем ex-режим. Если вы хотите заменить первое выражение, которое появляется в текущей строке, напечатайте :s/regexp/replacement/ и нажмите Enter, где regexp — это выражение, которое вы хотите подобрать, а replacement — это замена строки. Чтобы заменить все соответствующие случаи употребления в текущей строке, напечатайте :s/regexp/replacement/g и нажмите Enter. Чтобы заменить все случаи в вашем файле (как раз обычно это и требуется), напечатайте :%s/regexp/replacement/g. Если вы захотите сделать общую замену, но чтобы для каждого изменения появлялось vi-напоминание, напечатайте :%s/regexp/replacement/gc и нажмите Enter.

Отступ

vi поддерживает автоматический отступ, если вы редактируете исходный код. Большинство последних версий vi (например, vim) автоматически переходит в режим автоотступа, когда вы редактируете файл исходного кода (например, .c-файл). Когда стоит автоматический отступ, вы можете использовать ^d (Ctrl + d) для перемещения на один отступ влево и ^t (Ctrl + t) — вправо. Если автоматически вы не перешли в режим автоотступа, вы можете вручную войти в него, напечатав в ex-режиме :set autoindent. Вы можете также установить размер табуляции, использовав команду :set tabstop, часто используется команда :set tabstop=4.

Окончательный вид шпаргалки

Наконец, мы достигли конца нашего учебного пособия по vi! После добавления всех сложных команд редактирования в вашу шпаргалку, она должна выглядеть вот так:

Заключение

Храните вашу шпаргалку в удобном месте и начните использовать vi для редактирования файлов и сложных электронных писем. Смотрите в нее тогда, когда вам будет нужно, и в течение недели вы обнаружите, что вы запомнили почти все команды и ваша производительность невероятно возрастет!

Похожие темы

  • Домашняя страница поклонников vi — хороший сайт для изучения vi.
  • Домашняя страница vim содержит все, что вам необходимо знать по vim, включая разделы для загрузки и дополнительную документацию.
  • Если вы ищете хорошую классическую книгу, «Изучение vi редактора, 6-ое издание» (О Рэлли, 1998) — отличный выбор. Она полностью охватывает vi и подобные редакторы.
  • В разделе developerWorks Linuх вы
    найдете много статей для разработчиков Linux.
  • С помощью тестовых программ IBM, доступных для загурзки прямо с сайта developerWorks, постройте ваш следующий проект в Linux.

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

Подпишите меня на уведомления к комментариям

Ссылка на основную публикацию