В этой главе мы поймем, как работает редактор 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 дважды в любое время, чтобы убедиться, что вы находитесь в командном режиме.)
Вы должны быть осторожны с командами. Они чувствительны к регистру.
Вы должны быть в режиме вставки для ввода текста.