Как выйти из vi
Перейти к содержимому

Как выйти из vi

  • автор:

Как выйти из редактора Vi или Vim?

Но команда пишется прямо в текстовый файл и не выполняется.

Что делать, как выйти?

Nick Volynkin's user avatar

Добро пожаловать в Vim!

Прежде чем ввести команду, нажмите Esc . Чтобы потом подтвердить команду, нажмите Enter .

Клавиша Esc переключает Vim в нормальный режим. Если в этом режиме нажать : (проверьте, что установлена английская раскладка и снят CapsLock, затем одновременно нажмите Shift и ; ), то символ : появится в нижней части экрана, и редактор перейдёт в режим командной строки. Это гарантирует, что вы сейчас именно вводите команду, а не редактируете файл. Помните, что регистр вводимых команд важен.

У большинства команд есть укороченные версии. Необязательная часть дается в квадратных скобках: к[оманда] .

Команды, данные курсивом , подходят только для Vim (не реализованы в Vi).

Выйти безопасно (не срабатывает, если есть не сохраненные изменения)

  • :q[uit] Выйти из текущего окна Vim. Если это окно — последнее, то выйти из Vim. Если в текущем буфере есть не сохраненные изменения, команда не сработает.
  • :qa[ll] Закрыть все окна и выйти из Vim. Не сработает, если хотя бы в одном буфере есть не сохраненные изменения.

Выйти с подтверждением (запрашивает подтверждение, если есть не сохраненные изменения)

  • :conf[irm] q[uit] Закрыть все окна и выйти из Vim. Запрашивает подтверждение, если есть буферы с не сохраненными изменениями.
  • :conf[irm] xa[ll] Сохранить все изменения, закрыть все окна и выйти из Vim. Запрашивает подтверждение, если какие–либо буферы не могут быть сохранены.

Записать (сохранить) изменения и выйти

  • :wq Записать текущий буфер в соответствующий ему файл (даже если изменений не было) и закрыть окно. :wqa[ll] для всех окон.
  • :wq! То же самое, но записывает даже файлы, отмеченные только для чтения (read-only). :wqa[ll]! для всех окон.
  • :x[it] , ZZ (но с некоторыми особенностями). Сохранить файл только если в нем есть изменения и выйти, :xa[ll] для всех окон.

Отменить (и потерять) изменения и выйти

  • :q[uit]! ZQ Выйти без сохранения, в том числе когда есть изменения в видимых буферах. Не сработает, если изменения есть также и в скрытых буферах.
  • :qa[ll]! , :quita[ll][!] Выйти без сохранения, отменяя все изменения как в видимых, так и в скрытых буферах.

Нажмите Enter чтобы выполнить введенную команду.

Этот ответ все-таки не охватывает все возможные способы выйти из Vim. Полный список можно найти в документации Vim.

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

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

Как сохранить файл и выйти из редактора VIM и VI

Если вы только начинаете пользоваться текстовыми редакторами командной строки VI или VIM, то вам нужно научиться выполнять базовые задачи. К примеру, сохранять файлы или сохранять файлы и сразу же закрывать редактор одним действием.

terminal-icon-mac

Как сохранить файл и сразу выйти из VIM или VI

Самый простой способ сохранить файл и сразу выйти из редактора VI или VIM – это с помощью сочетания клавиш ZZ. Заметьте, что буквы заглавные. Чтобы сохранить файлы и выйти, нажмите клавишу «Escape», затем «Shift», а затем дважды нажмите клавишу «Z».

  • Нажмите клавишу ESC, затем зажмите клавишу Shift и дважды нажмите Z

Вы сохраните текущий файл и выйдете из текстового редактора.

Чтобы закрыть редактор без сохранения файла, можете использовать сочетание «ZQ».

Как сохранить файл, не закрывая редактор VI или VIM

  • Нажмите клавишу ESC
  • Введите :w и нажмите Enter

Команда сохранения файла и выхода

  • Нажмите клавишу ESC
  • Введите :wq и нажмите Enter

Двоеточие активирует командный режим, а команда wq (write and quit) сохраняет файл и закрывает текстовый редактор.

Если вы только начинаете пользоваться редактором VIM/VI, то многое может казаться вам непонятным. Как только вы запомните базовые действия, работать вам будет легче.

VIM – продвинутый редактор текста, но его можно использовать и для других задач. Например, для создания защищённых паролем текстов.

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

Unix / Linux – Руководство по редактору vi

В этой главе мы поймем, как работает редактор vi в Unix. Есть много способов редактировать файлы в Unix. Редактирование файлов с помощью экранно-ориентированного текстового редактора vi является одним из лучших способов. Этот редактор позволяет редактировать строки в контексте с другими строками в файле.

Улучшенная версия редактора vi, которая называется VIM , также стала доступной. Здесь VIM расшифровывается как Vi IM доказано.

vi обычно считается стандартом де-факто в редакторах Unix, потому что –

Обычно он доступен во всех вариантах Unix-системы.

Его реализации очень похожи по всем направлениям.

Это требует очень мало ресурсов.

Он более удобен для пользователя, чем другие редакторы, такие как ed или ex .

Обычно он доступен во всех вариантах Unix-системы.

Его реализации очень похожи по всем направлениям.

Это требует очень мало ресурсов.

Он более удобен для пользователя, чем другие редакторы, такие как ed или ex .

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

Запуск редактора vi

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

vi имя файла

Создает новый файл, если он уже не существует, в противном случае открывает существующий файл.

vi -R имя файла

Открывает существующий файл в режиме только для чтения.

просмотреть имя файла

Открывает существующий файл в режиме только для чтения.

vi имя файла

Создает новый файл, если он уже не существует, в противном случае открывает существующий файл.

vi -R имя файла

Открывает существующий файл в режиме только для чтения.

просмотреть имя файла

Открывает существующий файл в режиме только для чтения.

Ниже приведен пример создания нового файла тестового файла, если он уже не существует в текущем рабочем каталоге.

Приведенная выше команда сгенерирует следующий вывод:

Вы заметите тильду (

) в каждой строке, следующей за курсором. Тильда представляет собой неиспользованную линию. Если строка не начинается с тильды и кажется пустой, имеется пробел, табуляция, новая строка или какой-либо другой невидимый символ.

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

Режимы работы

Работая с редактором vi, мы обычно сталкиваемся со следующими двумя режимами:

Командный режим – этот режим позволяет выполнять административные задачи, такие как сохранение файлов, выполнение команд, перемещение курсора, вырезание (рывок) и вставка строк или слов, а также поиск и замена. В этом режиме все, что вы вводите, интерпретируется как команда.

Режим вставки – этот режим позволяет вставлять текст в файл. Все, что набрано в этом режиме, интерпретируется как ввод и помещается в файл.

Командный режим – этот режим позволяет выполнять административные задачи, такие как сохранение файлов, выполнение команд, перемещение курсора, вырезание (рывок) и вставка строк или слов, а также поиск и замена. В этом режиме все, что вы вводите, интерпретируется как команда.

Режим вставки – этот режим позволяет вставлять текст в файл. Все, что набрано в этом режиме, интерпретируется как ввод и помещается в файл.

vi всегда запускается в командном режиме . Чтобы ввести текст, вы должны быть в режиме вставки, для которого просто введите I. Чтобы выйти из режима вставки, нажмите клавишу Esc , и вы вернетесь в командный режим.

Подсказка – если вы не уверены, в каком режиме находитесь, дважды нажмите клавишу Esc; это приведет вас в командный режим. Вы открываете файл, используя редактор vi. Начните с ввода некоторых символов, а затем перейдите в командный режим, чтобы понять разницу.

Выход из vi

Команда выйти из vi : q . Находясь в командном режиме, введите двоеточие и ‘q’, а затем возврат. Если ваш файл был каким-либо образом изменен, редактор предупредит вас об этом и не даст вам выйти. Чтобы игнорировать это сообщение, команда выхода из vi без сохранения : q! , Это позволяет выйти из vi без сохранения каких-либо изменений.

Команда для сохранения содержимого редактора : w . Вы можете объединить вышеуказанную команду с командой quit или использовать : wq и return.

Самый простой способ сохранить ваши изменения и выйти из vi с помощью команды ZZ. Когда вы находитесь в командном режиме, введите ZZ . Команда ZZ работает так же, как команда : wq .

Если вы хотите указать / указать какое-либо конкретное имя для файла, вы можете сделать это, указав его после : w . Например, если вы хотите сохранить файл, над которым вы работали, под другим именем с именем filename2 , введите : w filename2 и вернитесь.

Перемещение внутри файла

Чтобы перемещаться по файлу, не затрагивая текст, вы должны находиться в командном режиме (дважды нажмите клавишу Esc). В следующей таблице перечислены несколько команд, которые вы можете использовать для перемещения по одному символу за раз –

Перемещает курсор на одну строку вверх

Перемещает курсор вниз на одну строку

Перемещает курсор влево на одну позицию символа

Перемещает курсор на одну позицию вправо

Перемещает курсор на одну строку вверх

Перемещает курсор вниз на одну строку

Перемещает курсор влево на одну позицию символа

Перемещает курсор на одну позицию вправо

Следующие пункты необходимо учитывать для перемещения в файле –

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

Большинству команд в vi может предшествовать количество раз, когда вы хотите, чтобы действие произошло. Например, 2j перемещает курсор на две строки вниз по положению курсора.

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

Большинству команд в vi может предшествовать количество раз, когда вы хотите, чтобы действие произошло. Например, 2j перемещает курсор на две строки вниз по положению курсора.

Существует много других способов перемещения внутри файла в vi. Помните, что вы должны быть в командном режиме ( нажмите Esc дважды ). В следующей таблице перечислены несколько команд для перемещения по файлу.

Ниже приведен список команд для перемещения по файлу.

Позиционирует курсор в начале строки

Позиционирует курсор в конце строки

Позиционирует курсор на следующее слово

Позиционирует курсор к предыдущему слову

Помещает курсор в начало текущего предложения

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

Перемещается в конец пустого слова с разделителями

Перемещает абзац назад

Перемещает абзац вперед

Перемещает раздел назад

Перемещает раздел вперед

Перемещается в столбец n в текущей строке

Перемещается на первую строку файла

Перемещается на последнюю строку файла

Перемещается на n- ю строку файла

Перемещается на n- ю строку файла

Движется вперед к

Перемещается обратно в c

Перемещается в верхнюю часть экрана

Перемещается на n- ю строку сверху экрана

Перемещается в середину экрана

Перейти к нижней части экрана

Перемещается на n- ю строку снизу экрана

Двоеточие, сопровождаемое числом, поместило бы курсор на номер строки, представленный x

Позиционирует курсор в начале строки

Позиционирует курсор в конце строки

Позиционирует курсор на следующее слово

Позиционирует курсор к предыдущему слову

Помещает курсор в начало текущего предложения

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

Перемещается в конец пустого слова с разделителями

Перемещает абзац назад

Перемещает абзац вперед

Перемещает раздел назад

Перемещает раздел вперед

Перемещается в столбец n в текущей строке

Перемещается на первую строку файла

Перемещается на последнюю строку файла

Перемещается на n- ю строку файла

Перемещается на n- ю строку файла

Движется вперед к

Перемещается обратно в c

Перемещается в верхнюю часть экрана

Перемещается на n- ю строку сверху экрана

Перемещается в середину экрана

Перейти к нижней части экрана

Перемещается на n- ю строку снизу экрана

Двоеточие, сопровождаемое числом, поместило бы курсор на номер строки, представленный x

Команды управления

Следующие команды могут использоваться с управляющей клавишей для выполнения функций, указанных в таблице ниже:

Ниже приведен список команд управления.

CTRL & плюс; д

Перемещается вперед на 1/2 экрана

CTRL & плюс; е

Перемещение вперед на один полный экран

CTRL и плюс, у

Перемещение назад на 1/2 экрана

CTRL & плюс; б

Перемещается назад на один полный экран

CTRL и плюс; е

Перемещает экран на одну строку вверх

CTRL и плюс, у

Перемещает экран на одну строку вниз

CTRL и плюс, у

Перемещает экран на 1/2 страницы

CTRL & плюс; д

Перемещает экран вниз на 1/2 страницы

CTRL & плюс; б

Перемещает экран на одну страницу вверх

CTRL & плюс; е

Перемещает экран на одну страницу вниз

CTRL и плюс, я

CTRL & плюс; д

Перемещается вперед на 1/2 экрана

CTRL & плюс; е

Перемещение вперед на один полный экран

CTRL и плюс, у

Перемещение назад на 1/2 экрана

CTRL & плюс; б

Перемещается назад на один полный экран

CTRL и плюс; е

Перемещает экран на одну строку вверх

CTRL и плюс, у

Перемещает экран на одну строку вниз

CTRL и плюс, у

Перемещает экран на 1/2 страницы

CTRL & плюс; д

Перемещает экран вниз на 1/2 страницы

CTRL & плюс; б

Перемещает экран на одну страницу вверх

CTRL & плюс; е

Перемещает экран на одну страницу вниз

CTRL и плюс, я

Редактирование файлов

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

Вставляет текст перед текущим положением курсора

Вставляет текст в начале текущей строки

Вставляет текст после текущей позиции курсора

Вставляет текст в конец текущей строки

Создает новую строку для ввода текста под курсором

Создает новую строку для ввода текста над курсором

Вставляет текст перед текущим положением курсора

Вставляет текст в начале текущей строки

Вставляет текст после текущей позиции курсора

Вставляет текст в конец текущей строки

Создает новую строку для ввода текста под курсором

Создает новую строку для ввода текста над курсором

Удаление персонажей

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

Удаляет символ под курсором

Удаляет символ перед положением курсора

Удаляет от текущего местоположения курсора до следующего слова

Удаляет из текущей позиции курсора в начало строки

Удаляет от текущей позиции курсора до конца строки

Удаляет от позиции курсора до конца текущей строки

Удаляет строку, на которой находится курсор

Удаляет символ под курсором

Удаляет символ перед положением курсора

Удаляет от текущего местоположения курсора до следующего слова

Удаляет из текущей позиции курсора в начало строки

Удаляет от текущей позиции курсора до конца строки

Удаляет от позиции курсора до конца текущей строки

Удаляет строку, на которой находится курсор

Как упомянуто выше, большинству команд в vi может предшествовать количество раз, когда вы хотите, чтобы действие произошло. Например, 2x удаляет два символа под курсором, а 2dd удаляет две строки, на которых находится курсор.

Перед тем, как мы продолжим, рекомендуется отработать команды.

Изменить команды

У вас также есть возможность изменять символы, слова или строки в vi без их удаления. Вот соответствующие команды –

Удаляет содержимое строки, оставляя вас в режиме вставки.

Изменяет слово, на котором находится курсор, с курсора на строчный конец слова.

Заменяет символ под курсором. vi возвращается в командный режим после ввода замены.

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

Заменяет текущий символ на введенный вами символ. После этого вы остаетесь в режиме вставки.

Удаляет строку, на которой находится курсор, и заменяет ее новым текстом. После ввода нового текста vi остается в режиме вставки.

Удаляет содержимое строки, оставляя вас в режиме вставки.

Изменяет слово, на котором находится курсор, с курсора на строчный конец слова.

Заменяет символ под курсором. vi возвращается в командный режим после ввода замены.

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

Заменяет текущий символ на введенный вами символ. После этого вы остаетесь в режиме вставки.

Удаляет строку, на которой находится курсор, и заменяет ее новым текстом. После ввода нового текста vi остается в режиме вставки.

Команды копирования и вставки

Вы можете скопировать строки или слова из одного места, а затем вставить их в другое место, используя следующие команды:

Копирует текущую строку.

Копирует текущее слово из символа, в котором находится курсор в нижнем регистре, до конца слова.

Помещает скопированный текст после курсора.

Помещает вытянутый текст перед курсором.

Копирует текущую строку.

Копирует текущее слово из символа, в котором находится курсор в нижнем регистре, до конца слова.

Помещает скопированный текст после курсора.

Помещает вытянутый текст перед курсором.

Расширенные команды

Есть несколько расширенных команд, которые упрощают ежедневное редактирование и позволяют более эффективно использовать vi –

Ниже приведен список расширенных команд.

Объединяет текущую строку со следующей. Количество j команд объединяет множество строк.

Смещает текущую строку влево на одну ширину смещения.

Смещает текущую строку вправо на одну ширину смещения.

Переключает регистр символа под курсором.

Нажмите одновременно клавиши Ctrl и G, чтобы отобразить текущее имя файла и статус.

Восстанавливает текущую строку в состояние, в котором она находилась до того, как курсор вошел в строку.

Это помогает отменить последнее изменение, которое было сделано в файле. Повторное нажатие кнопки «u» приведет к изменению.

Объединяет текущую строку со следующей. Граф соединяет столько строк.

Отображает текущую позицию в файле в% и имя файла, общее количество файлов.

: f имя файла

Переименовывает текущий файл в имя файла.

: w имя файла

Пишет в файл имя файла.

: e имя файла

Открывает другой файл с именем файла.

: cd dirname

Изменяет текущий рабочий каталог на dirname.

Переключение между двумя открытыми файлами.

Если вы открываете несколько файлов с помощью vi, используйте : n, чтобы перейти к следующему файлу в серии.

Если вы открываете несколько файлов с помощью vi, используйте : p, чтобы перейти к предыдущему файлу в серии.

Если вы открываете несколько файлов с помощью vi, используйте : N, чтобы перейти к предыдущему файлу в серии.

Читает файл и вставляет его после текущей строки.

Читает файл и вставляет его после строки n .

Объединяет текущую строку со следующей. Количество j команд объединяет множество строк.

Смещает текущую строку влево на одну ширину смещения.

Смещает текущую строку вправо на одну ширину смещения.

Переключает регистр символа под курсором.

Нажмите одновременно клавиши Ctrl и G, чтобы отобразить текущее имя файла и статус.

Восстанавливает текущую строку в состояние, в котором она находилась до того, как курсор вошел в строку.

Это помогает отменить последнее изменение, которое было сделано в файле. Повторное нажатие кнопки «u» приведет к изменению.

Объединяет текущую строку со следующей. Граф соединяет столько строк.

Отображает текущую позицию в файле в% и имя файла, общее количество файлов.

: f имя файла

Переименовывает текущий файл в имя файла.

: w имя файла

Пишет в файл имя файла.

: e имя файла

Открывает другой файл с именем файла.

: cd dirname

Изменяет текущий рабочий каталог на dirname.

Переключение между двумя открытыми файлами.

Если вы открываете несколько файлов с помощью vi, используйте : n, чтобы перейти к следующему файлу в серии.

Если вы открываете несколько файлов с помощью vi, используйте : p, чтобы перейти к предыдущему файлу в серии.

Если вы открываете несколько файлов с помощью vi, используйте : N, чтобы перейти к предыдущему файлу в серии.

Читает файл и вставляет его после текущей строки.

Читает файл и вставляет его после строки n .

Поиск слов и символов

Редактор vi имеет два вида поиска: строковый и символьный . Для поиска строки, / и ? команды используются. Когда вы запустите эти команды, только что набранная команда будет показана в последней строке экрана, где вы вводите конкретную строку для поиска.

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

Команда / выполняет поиск вперед (вниз) в файле.

? Команда ищет в файле назад (вверх).

Команда / выполняет поиск вперед (вниз) в файле.

? Команда ищет в файле назад (вверх).

Команды n и N повторяют предыдущую команду поиска в том же или противоположном направлении, соответственно. Некоторые персонажи имеют особые значения. Этим символам должен предшествовать обратный слеш ( \ ), чтобы они были включены в поисковое выражение.

Поиск в начале строки (используйте в начале выражения поиска).

Соответствует одному символу.

Соответствует нулю или более предыдущего символа.

Конец строки (используйте в конце поискового выражения).

Запускает набор совпадающих или несоответствующих выражений.

Это помещается в выражение, экранированное обратной косой чертой, чтобы найти конец или начало слова.

Это помогает увидеть описание символа « < » выше.

Поиск в начале строки (используйте в начале выражения поиска).

Соответствует одному символу.

Соответствует нулю или более предыдущего символа.

Конец строки (используйте в конце поискового выражения).

Запускает набор совпадающих или несоответствующих выражений.

Это помещается в выражение, экранированное обратной косой чертой, чтобы найти конец или начало слова.

Это помогает увидеть описание символа « < » выше.

Поиск символов выполняется в пределах одной строки, чтобы найти символ, введенный после команды. Команды f и F ищут символ только в текущей строке. f ищет вперед, F ищет назад, и курсор перемещается в положение найденного символа.

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

Установить команды

Вы можете изменить внешний вид вашего экрана vi, используя следующие : команды set . Когда вы находитесь в командном режиме, введите : set, а затем любую из следующих команд.

: установить IC

Игнорирует случай при поиске

: установить ню

Отображает строки с номерами строк на левой стороне

: установить sw

Устанавливает ширину программной вкладки. Например, вы должны установить ширину смещения 4 с помощью этой команды – : set sw = 4

: установить ws

Если WrapScan установлен, и слово не найдено в нижней части файла, он попытается найти его в начале

: установить wm

Если эта опция имеет значение больше нуля, редактор автоматически “переносит слова”. Например, чтобы установить поле для переноса в два символа, вы должны набрать следующее :: set wm = 2

: установить ро

Изменяет тип файла на «только для чтения»

: установить срок

Печатает тип терминала

: установить BF

Сбрасывает управляющие символы с ввода

: установить IC

Игнорирует случай при поиске

: установить ню

Отображает строки с номерами строк на левой стороне

: установить sw

Устанавливает ширину программной вкладки. Например, вы должны установить ширину смещения 4 с помощью этой команды – : set sw = 4

: установить ws

Если WrapScan установлен, и слово не найдено в нижней части файла, он попытается найти его в начале

: установить wm

Если эта опция имеет значение больше нуля, редактор автоматически “переносит слова”. Например, чтобы установить поле для переноса в два символа, вы должны набрать следующее :: set wm = 2

: установить ро

Изменяет тип файла на «только для чтения»

: установить срок

Печатает тип терминала

: установить BF

Сбрасывает управляющие символы с ввода

Запуск команд

В vi есть возможность запускать команды из редактора. Чтобы запустить команду, вам нужно только перейти в командный режим и набрать :! команда.

Например, если вы хотите проверить, существует ли файл, прежде чем пытаться сохранить файл с таким именем, вы можете ввести :! ls и вы увидите вывод ls на экране.

Вы можете нажать любую клавишу (или управляющую последовательность команды), чтобы вернуться к сеансу vi.

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

Команда подстановки ( : s / ) позволяет быстро заменить слова или группы слов в ваших файлах. Ниже приводится синтаксис для замены текста:

Г означает глобально. Результатом этой команды является то, что все вхождения в строке курсора изменены.

Важные моменты для заметки

Следующие пункты добавят к вашему успеху с vi –

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

Как выйти из vi

Бен Йошинори Йошино работает в Гавайском университете. Его домашняя страница : http://www.eng.hawaii.edu/

  • Сокращения
  • Предисловие
  • Начало работы
  • Выход из VI
  • Режимы работы VI
  • Работа в командном режиме
  • Простые команды редактора VI
  • Текстовые буферы в редакторе VI
  • Вырезание и копирование
  • Вставка
  • Оформление и контроль
  • Поиск текста
  • Настройка VI и EX
  • Макросы
  • Переменная EXINIT и файл .exrc
  • Восстановление данных
  • Предупреждения для использования VI на рабочих станциях
  • Обзор команд редактора VI
  • Ссылки

Использование редактора VI

Это руководство написано Беном Й. Йошино. Оригинал находится на www.eng.hawaii.edu/Tutor/vi.html. Другие руководства этого автора на: www.eng.hawaii.edu/Tutor/. Мы обнаружили этот материал на www.rootprompt.org и опубликовали с разрешения автора.

Редактор vi используют многие пользователи Unix. VI очень удобен для программистов, но для начинающих он оказывается довольно трудным. Это руководство написано для новичков, но также содержит разделы для опытных пользователей vi. Здесь представлено множество примеров, которые для лучшего понимания необходимо выполнить, а также подумать над своими собственными. Лучший путь в изучении — практика.

Сокращения

В руководстве будут использованы следующие сокращения :

^X обозначает " control " символ. Например : ^d — удерживая клавишу " control " нажать соответствующий символ. Для этого примера используется клавиша " control " в сочетании с буквой " d ".

Пользователи ОС Linux, использующие новые терминальные эмуляторы такие как xterm gnome-terminal, kvt, aterm, могут пропустить этот раздел. Переменная " $TERM " у них всегда по умолчанию имеет правильное значение.

Редактор Vi работает в полноэкранном режиме, поэтому использует информацию о типе терминала. Когда вы соединяетесь с "wiliki" ("wiliki" — имя главного инженерного сервера в Гавайском университете) он требует указания типа вашего терминала. Например :

Если у вас данный тип терминала (или эмулятор поддерживающий этот тип) просто нажмите клавишу "Enter". Если у вас термнал hp, введите hp и нажмите клавишу "Enter". Если вам не известен тип терминала — спросите совет у лаборанта.

Если вы допустили ошибку указав неверный тип терминала — ничего страшного, просто завершите сеанс работы. Следующие команды помогут исправить установки системы :

Во-первых установите переменную TERM (если вы не знаете какая оболочка используется в системе выполните команду echo $SHELL). В примерах подразумевается тип терминала vt100. Замените его при необходимости используемым вами. Для оболчки C (/bin/csh) используйте следующую команду : Для оболочек Bourne (/bin/sh) или Korn (/bin/ksh) :
Далее перезапустите ваш терминал :

Теперь, после правильной установки типа терминала, начнем изучение редактора Vi.

Редактор vi позволяет создавать новые файлы и редактировать существующие. Для запуска vi используйте команду vi сопровождаемую именем файла. Например для редактирования файла temporary наберите vi temporary и нажмите клавишу "Enter". Можно запустить vi без имени файла — в этом случае для сохранения результатов работы сообщите имя файла редактору позже.

Когда вы запускаете vi — на экране с левой стороны вы видите тильды (

). Так обозначаются пустые строки. В нижней части экрана отображается имя текущего файла и размер :
Если это новый файл сообщение будет выглядеть следующим образом :
При запуске vi без имени файла — нижняя часть экрана будет пустой. Если не отображается одно из этих сообщений — возможно у вас неверный тип терминала. Наберите :q и "Enter" для выхода из vi и установите поддерживаемый тип терминала. Если не знаете как — спросите совет у лаборанта.

Теперь, когда вы знаете как запустить vi, необходимо узнать как завершить сеанс работы с редактором. Редактор vi имеет два рабочих режима и для завершения сеанса работы необходимо перейти в командный режим. Нажмите клавишу "Escape" или "Esc" (если у вас нет такой клавиши попробуйте "^[" или "control-[") для переключения в командный режим. Если вы находясь в командном режиме нажмете клавишу "Escape" — ничего страшного. Возможно прозвучит сигнал, но редактор по-прежнему будет в командном режиме.

Команда для выхода из vi — ":q". В командном режиме наберите двоеточие и "q" и нажмите клавишу "Enter". Если вы вносили изменения в файл — редактор предупредит об этом и не позволит завершить сеанс подобным образом. Выход из редактора без сохранения изменений — ":q!".

Конечно, работая в редакторе, вы хотите сохранять результаты работы. Команда для сохранения изменений — ":w". Можно сохранить изменения и завершить сеанс работы одновременно — ":wq". Для изменения имени файла выполните — ":w filename". Например для сохранения файла с новым именем filename2 выполните : ":w filename2".

Другая возможность завершения сеанса работы с редактором — выполнение команды ":ZZ". В командном режиме выполните ":ZZ" (эквивалент команды ":wq"). Если были сделаны изменения — они будут сохранены. Это самый простой вариант.

Первое, что узнают пользователи о редакторе vi — два режима его работы : командный и вставки текста. Командный — режим ввода команд. Обычно эти команды короткие — состоят из одной или двух букв. Режим вставки текста — вставляется в файл то, что вы набираете на клавиатуре.

По умолчанию редактор запускается в командном режиме. Для переключения в режим вставки текста существует несколько команд. Наиболее часто используемые среди них — "a" и "i". Ниже мы остановимся подробнее на этих командах. Чтобы выйти из режима вставки текста нажмите клавишу "Escape". Если у вас нет такой клавиши попробуйте "^[" или "control-[" Вы можете нажать клавишу "Escape" дважды и редактор все равно будет командном режиме. Нажатие клавиши "Escape" в командном режиме не переведет его ни в какой другой. Может только прозвучать сигнал, сообщающий, что вы уже находитесь в командном режиме.

    [count] command [where]

Аргумент count — число, начинающееся с символа от 1 до 9. Например : команда "x" удаляет символ в позиции курсора, при вводе команды "23x" — будут удалены 23 символа.

Некоторые команды используют аргумент where, определяющий границы текста, к которым будет применена команда, также параметр where может быть командой перемещения курсора.

Рассмотрим некоторые команды для начала работы с vi. Позже обратим внимание на другие команды. a вставить текст за текущей позицией курсора. Если определен аргумент count — весь введенный текст будет повторен count раз. h переместить курсор на одну позицию влево. i вставить текст, начиная с позициии перед курсором. Если определен аргумент count — весь введенный текст будет повторен count раз. j переместить курсор вниз на одну строку. k переместить курсор вверх на одну строку. l переместить курсор на одну позицию вправо. r заменить символ в текущей позиции курсора. Аргумент count определяет количество заменяемых символов. u отмена последнего изменения. Повторная команда u возвратит изменение. x удалить символ в текущей позиции курсора. Аргумент count определяет количество удаляемых символов. Символы будут удалены за курсором.

Редактор vi предоставляет пользователю 36 буферов для хранения информации и также буфер общего назначения. Удаленный или скопированный текст помещается в буфер общего назначения. Многие пользователи vi редко используют другие буферы. Но можно использовать так называемые "поименованные" буферы. Для их применения используется команда ". Эта команда используется в сочетании с буквой или цифрой для определения буфера. Например : команда "mdd использует буфер m для вырезания в него текущей строки. Команды p или P используются для вставки текста. Команда "mp вставит содержимое буфера m за текущей позицией курсора. Эти буферы могут быть использованы командами, рассматриваемыми в следующих двух разделах.

Наиболее часто используемая команда для вырезания текста "d". Эта команда удаляет текст из файла. Использует аргумент count. Команда "dd" удаляет текущую строку. Рассмотрим несколько примеров : d^ удаляет символы от текущей позиции курсора до начала строки. d$ удаляет символы от текущей позиции курсора до конца строки. dw удаляет символы от текущей позиции курсора до конца слова. 3dd удаляет три строки от текущей позиции курсора вниз.

Действие команды "y" (копирование) подобно действию команды "d", но она не удаляет текст, а только копирует его в буфер.

Команды для вставки "p" и "P". Различие между ними в положении вставляемого текста. Команда "p" вставляет текст из буфера после текущей позиции курсора, "P" — вставляет текст перед текущей позицией курсора. Аргумент count определяет количество повторов вставляемого текста.

Редактор vi предоставляет программистам возможность аккуратного оформления кода. Существует переменная определения позиции для каждого уровня вложенности кода. Для ее определния обратите внимание на раздел "Настройка VI и EX". Например для определения отступа равным 4 символам используйте команду ":set sw=4".

Можно также использовать следующие команды (поддерживают аргумент count) : << Сдвиг строки влево на одну позицию. >> Сдвиг строки вправо на одну позицию.

Редактор vi предоставляет возможность контроля кода по круглым или фигурным скобкам. Команда "%" контролирует парность круглых или фигурных скобок. Установите курсор на скобку и введите команду "%" для перемещения курсора на парную. При отсутствии парной скобки прозвучит сигнал, предупреждающий об ошибке.

Редактор vi предоставляет два вида поиска : строк и символов. Команды "\" и "?" для поиска строк. При выполнении этих команд в нижней части экрана отображается строка введенная вами для поиска. Различие между командами "\" и "?" : "\" осуществляет поиск вниз по файлу, а "?" — вверх. Команды "n" и "N" повторяют поиск в том же или противоположном направлении соответственно. Некоторые символы имеют специальное значение в редакторе vi — поэтому перед ними должен быть введен символ \.

Специальные символы : ^ начало строки. . любой один символ. * любое число символов. $ конец строки. [ определяет набор символов для поиска. Например : /f[iae]t определит любую комбинацию из следующих : fit fat fet или /a[^bcd] определит любую комбинацию кроме : ab ac ad. < начало или конец слова. Например : /\<the\> определит только слово the, но не there and other. > смотри описание выше.

Символьный поиск осуществляется в текущей строке командами "f" и "F". Команда "f" осуществляет поиск вперед, "F" — назад, курсор перемещается в позицию найденного символа.

Действие команд "t" и "T" аналогично действию "f" и "F". Различие между ними в положении курсора : после выполнения команды "t" курсор перемещается в позицию перед найденным символом, после выполнения команды "T" — после найденного символа.

Повтор поиска осуществляется командами ";" и ",". Команда ";" повторяет поиск в том же направлении, команда "," — в противоположном.

Установка переменной "ic" (:set ic) позволяет осуществить поиск не учитывая регистр.

Редактор vi предоставляет возможность настройки, осуществляемой установкой параметров командой :set. Далее следует список параметров, установленных на компьтере Wiliki для редакторов vi и ex (для получения списка используется команда :set all в командном режиме).

Некоторые параметы могут быть просто включены или выключены, а некоторые принимают значение (включенное или выключенное состояние называют булевым значением и наличие "no" перед параметром означает, что он выключен). Значения некоторых параметров рассмотрены ниже. Например : для установки параметра autoindent выполните команду :set autoindent или :set ai. Для отмены установки этого параметра : выполните команду :set noautoindent или :set noai. autoindent(ai) вновь создаваемые строки выравниваются по отступу предыдущей. Для отмены отступа используйте в начале строки сочетание ^D в режиме вставки текста. Величина отступа также может быть установлена параметром shiftwidth. exrc файл .exrc загружается каждый раз при вызове vi. Это устанавливается переменной "EXINIT" или в файле .exrc в вашем домашнем каталоге. mesg команда :set nomesg отменяет разрешение появления текста на вашем терминале. number (nu) выводит номера строк вдоль левого края экрана. shiftwidth (sw) устанавливает значение отступа (используемого командами << и >>). Например : :set sw=4 устанавливает значение отступа равным 4. showmode (sm) показывает индикатор режима. Если вы находитесь в режиме вставки текста — в нижней строке экрана будет выведено сообщение "INPUT MODE". warn выводит предупреждение, если файл был изменен со времени выполнения последней команды записи. window (wi) устанавливает количество строк выводимых редактором vi на экран. Например : для использования 12 строк (из-за низкой скорости модема) используется команда :set wi=12. wrapscan (ws) когда в ходе поиска достигается конец файла, он продолжается с его начала. wrapmargin (wm) если значение параметра не равно нулю, редактор автоматически вставляет новую строку. Например : команда :set wm=2 устанавливает параметру wm значение 2.

Существует полезная команда редактора ex для редактора vi — abbreviate. Она используется для сокращения наиболее часто применяемых фраз. Синтаксис команды : :ab string thing to substitute for. Например : если вам необходимо вводить слово «Humuhumunukunukuapua`a«, но вы не хотите каждый раз набирать его полностью — используйте команду ab. Для данного случая она будет выглядеть так :
:ab 9u Humuhumunukunukuapua`a
Теперь если вы введете 9u — вы получите полное значение. При вводе 9university замены не произойдет.

Для удаления сокращения используется команда unabbreviate. Для данного случая — :una 9u. Команда :ab выдаст список всех сокращений.

Другая полезная команда редактора ex — map. Существуют две разновидности команды — для командного режима и для режима вставки текста — map и map! соответственно. Работает сходно с командой ab — последовательность символов заменяется обычно командами редактора vi.

Существуют два пути управления настройками редактора vi — создание файла .exrc в вашем домашнем каталоге или настройка переменной "EXINIT". Параметры будут установлены в ваш файл сценария. Если вы используете /bin/csh (C-Shell) выполните следующие команды :
Если вы используете /bin/sh или /bin/ksh выполните эти команды :
Не используйте . как в примерах. Используйте команды. Например : для (для C shell) :

Для выполения нескольких команд разделите их вертикальной чертой (|). Например : для использования команды :map g G совместно с предыдущей выполните

Используйте выражения в кавычках, после "EXINIT", для применения файла .exrc.

Редактор vi работает с копией файла и после завершения редактирования или по команде сохранения содержание копии перемещается в основной файл. Если возникает аварийная ситуация при редактировании, vi сохраняет результаты работы для последующего восстановления. Обратите внимание : при возникновении подобной ситуации, vi посылает e-mail сообщение с инструкциями о восстановлении данных. Параметр -r означает восстановление. Например : команда vi -r vitalinfo используется для восстановления данных после возникновения аварийной ситуации при редактировании файла vitalinfo. После использования параметра -r для восстановления файла необходимо сохранить результат в существующий файл. Параметр -r действителен только один раз после возникновения аварийной ситуации.

При использовании рабочих станций для работы с редактором vi необходимо помнить следующее : многократное одновременное редактироване одного и того же файла и изменение размера экрана.

Vi использует копию файла для редактирования и сохраняет изменения в существующий файл. Поэтому если редактируется один и тот же файл одновременно несколько раз — при сохранении результатов одна копия может переписать другую. Будьте уверены, что используется один сеанс для редактирования файла.

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

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

Вырезание и вставка/удаление текста

» Назначение буфера. Используется с буквой или цифрой. D Удалить от текущей позиции курсора до конца строки. P Вставить текст из буфера в позицию перед курсором. Если не определен буфер командой «, используется буфер общего назначения. X Удалить символ перед текущей позицией курсора. Y Копировать текущую строку в буфер. Если не определен буфер, используется буфер общего назначения. d Удалить. "dd" — удалить текущую строку. Аргумент count определяет количество удаляемых строк. Если не определен буфер командой «, используется буфер общего назначения. p Вставляет текст после текущей позиции курсора. Если не определен буфер командой «, используется буфер общего назначения. x Удаляет символ в позиции курсора. Аргумент count определяет количество удаляемых символов. Символы будут удалены после текущей позиции курсора. y Копировать. "yy" — копировать текущую строку. Аргумент count определяет количество копируемых строк. Если не определен буфер командой «, используется буфер общего назначения.

Вставка текста

A Добавляет текст в конце строки. I Добавляет текст в начале строки. O (letter oh) Переключает в режим вставки текста и вставляет пустую строку перед текущей строкой. a Переключает в режим вставки текста и добавляет текст после курсора. Аргумент count определяет количество повторений введенного текста. i Переключает в режим вставки текста и добавляет текст перед курсором. Аргумент count определяет количество повторений введенного текста. o Переключает в режим вставки текста и вставляет пустую строку после текущей строки.

Перемещение по файлу

^B Переход на один экран назад. Аргумент count определяет количество экранов. ^D Переход на половину экрана вперед. Аргумент count определяет количество строк. ^F Переход на один экран вперед. Аргумент count определяет количество экранов. ^H Переход на один символ влево. Аргумент count определяет количество символов. ^J Переход на одну строку вниз. Аргумент count определяет количество строк. ^M Переход в начало следующей строки ^N Переход на одну строку вниз. Аргумент count определяет количество строк. ^P Переход на одну строку вверх. Аргумент count определяет количество строк. ^U Переход на половину экрана назад. Аргумент count определяет количество строк. $ Переход в конец текущей строки. Аргумент count определяет строку. % Переход к парной круглой или фигурной скобке. ^ Переход к первому символу. ( Переход в начало предложения. ) Переход в начало следующего предложения. < Переход к предыдущему абзацу. >Переход к следующему абзацу. | Переход в столбец, определенный аргументом count. + Переход к первому символу в следующей строке. — Переход к первому символу в предыдущей строке. _ Переход к первому символу в текущей строке. 0 (Zero)Переход в начало текущей строки. B Переход назад на одно слово. E Переход в конец текущего слова. G Переход в конец файла. Аргумент count определяет номер строки для перехода. H Переход к первому символу вверху экрана. L Переход к первому символу внизу экрана. M Переход к первому символу в середине экрана. W Переход в начало следующего слова. b Переход назад на одно слово. Если курсор в середине слова — переход в начало текущего слова. e Переход вперед на одно слово. Если курсор в середине слова — переход в конец текущего слова. h Переход на один символ влево. j Переход вниз на одну строку. k Переход вверх на одну строку.. l Переход на один символ вправо. w Переход вперед на одно слово. Если курсор в середине слова — переход к первому символу следующего слова.

Перемещение по экрану

^E Переход на одну строку вперед. Аргумент count определяет количество строк. ^Y Переход на одну строку назад. Аргумент count определяет количество строк. z Обновить экран. «z<return>» устанавливает текущую строку вверх экрана; «z.» устанавливает текущую строку в середину экрана; and «z-» устанавливает текущую строку вниз экрана. Аргумент count определяет строку для замены текущей строки. Например : "16z." устанавливает строку 16 в центр экрана.

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

C Заменить от текущей позиции курсора до конца строки. R Заменить текст до нажатия клавиши "Escape". S Заменить всю строку. c Заменить. «cc» заменяет текущую строку. Аргумент count определяет количество строк. r Заменить символ в позиции курсора. Аргумент count определяет количество символов. s Заменить символ в позиции курсора и перейти в режим вставки текста. Аргумент count определяет количество символов. Символ ($) будет установлен на последнем символе для замены.

Поиск текста

, Повторить последнюю команду "f", "F", "t" или "T" в обратном направлении. / Искать определенную строку вперед по файлу. ; Повторить последнюю команду "f", "F", "t" или "T". ? Искать определенную строку назад по файлу F Искать определенный символ вперед в текущей строке. При успешном выполнении — курсор перемещается в позицию найденного символа. N Повторить последний поиск "/" или "?" исключая обратное направление. T Искать определенный символ вперед в текущей строке. При успешном выполнении — курсор перемещается в позицию после найденного символа. f Искать определенный символ в текущей строке. При успешном выполнении — курсор перемещается в позицию найденного символа. n Повторить последний поиск "/" или "?". t Искать определенный символ в текущей строке. При успешном выполнении — курсор перемещается в позицию перед найденным символом.

Манипулирование символьно/строковым форматированием

Изменить регистр символа в позиции курсора. < Выполнить сдвиг влево на величину shiftwidth. «&lt&lt» — сдвиг текущей строки влево (использует аргумент count). > Выполнить сдвиг вправо на величину shiftwidth. «&gt&gt» — сдвиг текущей строки вправо (использует аргумент count). J Объединить текущую строку с последующей. Аргумент count определяет количество строк.

Сохранение и выход

^\ Выход из режима "VI" в режим "EX". Редактор EX — строковый редактор, на основе которого построен редактор VI. Команда редактора EX для возврата в VI :vi. Q Выход из режима "VI" в режим "EX". Редактор EX — строковый редактор. Команда редактора EX для возврата в VI :vi. ZZ Выход из редактора с сохранением изменений.

Разное

^G Показать имя файла и статус. ^L Очистить и перерисовать экран. ^R Перерисовать экран и удалить ошибочные строки. ^[ Отменить частично набранную команду. ^^ Возвратиться к последнему редактированному файлу. ! Выполнить команду оболочки. & Повторить предыдущую команду :s. . Повторить последнюю команду. : Начало команды редактора "EX". Команда выполняется один раз после нажатия клавиши "Enter". @ Напечатать команду из определенного буфера. U Восстановить текущую строку. m Отметить текущую позицию определенным символом. u Отменить последнее изменение файла. Повторная команда восстанавливает изменения.

Команды редактора EX

Редактор vi построен на основе редактора ex. Редактор ex редактирует построчно. Из редактора vi можно вызвать команду ex — : вводится перед командой. Мы рассмотрим наиболее используемые команды. Если необходимо изменить более одной строки командами :s или :w определяется диапазон. Например : для изменения строк с 3 по 15 используется команда :3,15s/from/this/g. :ab string strings Сокращение. Если в редакторе vi появляется слово string, происходит автоматическая замена. Например : команда :ab usa United States of America определяет сокращение для слова "usa". Теперь при вводе слова "usa" произойдет замена на "United States of America". :map keys new_seq Макрос. Замена клавиши или последовательности клавиш . :q Выход из редактора VI. Если были сделаны изменения — редактор сообщит об этом. :q! Выход из редактора VI без сохранения изменений. :s/pattern/to_pattern/options Замена. Замена выражения pattern на выражение to_pattern. Без использования options производит замену первого вхождения выражения pattern. Если используется опция "g" — все вхождения выражения pattern будут заменены. Например : команда :1,$s/Dwayne/Dwight/g заменит все вхождения выражения "Dwayne" на "Dwight". :set [all] Установка некоторых параметров настройки VI и EX. Команда :set all выводит список всех возможных параметров (обратите внимание на раздел "Настройка VI и EX"). :una string Удаление ранее определенного сокращения командой :ab. :unm keys Удаление ранее определенного макроса командой ":map. :vi filename Начало редактирования нового файла. Если изменения не были сохранены — редактор выдаст предупреждение. :w Записать текущий файл. :w filename Записать файл с именем filename. :w >> filename Добавить содержимое буфера в файл filename. :wq Сохранить изменения и выйти.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *