Учебники

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Sr.No. Команда и описание
1

vi имя файла

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

2

vi -R имя файла

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

3

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

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

vi имя файла

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

vi -R имя файла

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

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

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

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

$vi testfile

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

|
~
~
~
~
~
~
~
~
~
~
~
~
"testfile" [New File]    

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

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

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

Работая с редактором 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). В следующей таблице перечислены несколько команд, которые вы можете использовать для перемещения по одному символу за раз —

Sr.No. Команда и описание
1

К

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

2

J

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

3

час

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

4

L

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

К

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

J

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

час

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

L

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

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

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

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

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

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

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

Sr.No. Команда и описание
1

0 или |

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

2

$

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

3

вес

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

4

б

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

5

(

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

6

)

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

7

Е

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

8

{

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

9

}

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

10

[[

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

11

]]

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

12

п |

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

13

1G

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

14

г

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

15

НГ

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

16

: п

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

17

Ь

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

18

Fc

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

19

ЧАС

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

20

нГн

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

21

M

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

22

L

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

23

нл

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

24

:Икс

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

0 или |

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

$

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

вес

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

б

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

(

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

)

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

Е

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

{

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

}

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

[[

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

]]

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

п |

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

1G

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

г

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

НГ

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

: п

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

Ь

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

Fc

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

ЧАС

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

нГн

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

M

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

L

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

нл

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

:Икс

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

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

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

Sr.No. Команда и описание
1

CTRL & плюс; д

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

2

CTRL & плюс; е

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

3

CTRL и плюс, у

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

4

CTRL & плюс; б

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

5

CTRL и плюс; е

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

6

CTRL и плюс, у

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

7

CTRL и плюс, у

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

8

CTRL & плюс; д

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

9

CTRL & плюс; б

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

10

CTRL & плюс; е

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

11

CTRL и плюс, я

Перерисовывает экран

CTRL & плюс; д

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

CTRL & плюс; е

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

CTRL и плюс, у

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

CTRL & плюс; б

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

CTRL и плюс; е

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

CTRL и плюс, у

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

CTRL и плюс, у

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

CTRL & плюс; д

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

CTRL & плюс; б

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

CTRL & плюс; е

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

CTRL и плюс, я

Перерисовывает экран

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

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

Sr.No. Команда и описание
1

я

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

2

я

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

3

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

4

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

5

о

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

6

О

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

я

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

я

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

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

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

о

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

О

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

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

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

Sr.No. Команда и описание
1

Икс

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

2

Икс

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

3

с.в.

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

4

d ^

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

5

d $

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

6

D

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

7

дд

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

Икс

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

Икс

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

с.в.

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

d ^

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

d $

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

D

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

дд

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

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

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

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

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

Sr.No. Команда и описание
1

куб.см

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

2

ХО

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

3

р

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

4

р

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

5

s

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

6

S

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

куб.см

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

ХО

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

р

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

р

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

s

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

S

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

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

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

Sr.No. Команда и описание
1

уу

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

2

уш

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

3

п

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

4

п

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

уу

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

уш

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

п

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

п

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

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

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

Sr.No. Команда и описание
1

J

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

2

<<

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

3

>>

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

4

~

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

5

^ G

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

6

U

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

7

U

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

8

J

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

9

: е

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

10

: f имя файла

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

11

: w имя файла

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

12

: e имя файла

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

13

: cd dirname

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

14

: e #

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

15

: п

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

16

:п

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

17

: N

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

18

: r файл

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

19

: NR файл

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

J

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

<<

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

>>

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

~

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

^ G

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

U

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

U

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

J

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

: е

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

: f имя файла

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

: w имя файла

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

: e имя файла

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

: cd dirname

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

: e #

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

: п

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

:п

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

: N

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

: r файл

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

: NR файл

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

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

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

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

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

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

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

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

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

Sr.No. Характер и описание
1

^

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

2

,

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

3

*

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

4

$

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

5

[

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

6

<

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

7

>

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

^

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

,

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

*

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

$

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

[

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

<

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

>

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

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

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

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

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

Sr.No. Команда и описание
1

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

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

2

: set ai

Устанавливает автоиндентирование

3

: set noai

Отключает автоиндентирование

4

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

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

5

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

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

6

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

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

7

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

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

8

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

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

9

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

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

10

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

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

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

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

: set ai

Устанавливает автоиндентирование

: set noai

Отключает автоиндентирование

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

:s/search/replace/g

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

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

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

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

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

Вы должны быть в режиме вставки для ввода текста.