Unix / Linux - Руководство по редактору vi
В этой главе мы поймем, как работает редактор vi в Unix. Есть много способов редактировать файлы в Unix. Редактирование файлов с помощью текстового редактора, ориентированного на экранviэто один из лучших способов. Этот редактор позволяет вам редактировать строки в контексте с другими строками в файле.
Улучшенная версия редактора vi, которая называется VIMтакже стал доступным сейчас. Здесь VIM означаетVi IMдоказано.
vi обычно считается стандартом де-факто в редакторах Unix, потому что -
Обычно он доступен во всех разновидностях системы Unix.
Его реализации во всем очень похожи.
Это требует очень мало ресурсов.
Он более удобен, чем другие редакторы, такие как ed или ex.
Вы можете использовать viредактор для редактирования существующего файла или создания нового файла с нуля. Вы также можете использовать этот редактор, чтобы просто прочитать текстовый файл.
Запуск редактора vi
В следующей таблице перечислены основные команды для использования редактора vi -
Sr.No. | Команда и описание |
---|---|
1 | vi filename Создает новый файл, если он уже не существует, в противном случае открывает существующий файл. |
2 | vi -R filename Открывает существующий файл в режиме только для чтения. |
3 | view filename Открывает существующий файл в режиме только для чтения. |
Ниже приведен пример создания нового файла. testfile если его уже нет в текущем рабочем каталоге -
$vi testfile
Приведенная выше команда сгенерирует следующий вывод -
|
~
~
~
~
~
~
~
~
~
~
~
~
"testfile" [New File]
Вы заметите tilde(~) в каждой строке после курсора. Тильда обозначает неиспользуемую строку. Если строка не начинается с тильды и кажется пустой, это означает наличие пробела, табуляции, новой строки или другого невидимого для просмотра символа.
Теперь у вас есть один открытый файл, над которым можно начать работу. Прежде чем продолжить, давайте разберемся с несколькими важными концепциями.
Режимы работы
При работе с редактором vi мы обычно сталкиваемся со следующими двумя режимами:
Command mode- Этот режим позволяет вам выполнять административные задачи, такие как сохранение файлов, выполнение команд, перемещение курсора, вырезание (восстановление) и вставка строк или слов, а также поиск и замена. В этом режиме все, что вы вводите, интерпретируется как команда.
Insert mode- Этот режим позволяет вставлять текст в файл. Все, что вводится в этом режиме, интерпретируется как ввод и помещается в файл.
vi всегда начинается в command mode. Чтобы ввести текст, вы должны быть в режиме вставки, для которого просто введитеi. Чтобы выйти из режима вставки, нажмите кнопкуEsc Клавиша, которая вернет вас в командный режим.
Hint- Если вы не уверены, в каком режиме находитесь, дважды нажмите клавишу Esc; это переведет вас в командный режим. Вы открываете файл с помощью редактора vi. Начните с ввода нескольких символов, а затем перейдите в командный режим, чтобы понять разницу.
Выход из vi
Команда для выхода из vi: :q. В командном режиме введите двоеточие и «q», а затем - return. Если ваш файл был каким-либо образом изменен, редактор предупредит вас об этом и не позволит вам выйти. Чтобы проигнорировать это сообщение, нужно выйти из vi без сохранения.:q!. Это позволяет вам выйти из vi без сохранения каких-либо изменений.
Команда для сохранения содержимого редактора: :w. Вы можете объединить указанную выше команду с командой выхода или использовать:wq и вернуться.
Самый простой способ save your changes and exit viнаходится с командой ZZ. Когда вы находитесь в командном режиме, введитеZZ. ВZZ команда работает так же, как и :wq команда.
Если вы хотите указать / указать какое-либо конкретное имя для файла, вы можете сделать это, указав его после :w. Например, если вы хотите сохранить файл, над которым работали, как другое имя файла с именемfilename2, вы должны ввести :w filename2 и вернуться.
Перемещение внутри файла
Чтобы перемещаться по файлу, не затрагивая текст, вы должны находиться в командном режиме (дважды нажмите Esc). В следующей таблице перечислены несколько команд, которые вы можете использовать для перемещения по одному персонажу за раз.
Sr.No. | Команда и описание |
---|---|
1 | k Перемещает курсор на одну строку вверх |
2 | j Перемещает курсор на одну строку вниз |
3 | h Перемещает курсор влево на одну позицию символа |
4 | l Перемещает курсор вправо на одну позицию символа |
При перемещении внутри файла необходимо учитывать следующие моменты:
vi чувствителен к регистру. При использовании команд нужно обращать внимание на использование заглавных букв.
Перед большинством команд в vi можно указать количество раз, которое вы хотите, чтобы действие выполнялось. Например,2j перемещает курсор на две строки вниз от позиции курсора.
Есть много других способов перемещения внутри файла в vi. Помните, что вы должны находиться в командном режиме (press Esc twice). В следующей таблице перечислены несколько команд для перемещения по файлу.
Sr.No. | Команда и описание |
---|---|
1 | 0 or | Помещает курсор в начало строки |
2 | $ Помещает курсор в конец строки |
3 | w Устанавливает курсор на следующее слово |
4 | b Перемещает курсор к предыдущему слову |
5 | ( Помещает курсор в начало текущего предложения |
6 | ) Помещает курсор в начало следующего предложения |
7 | E Переход к концу слова с разделителями-пробелами |
8 | { Перемещает абзац назад |
9 | } Перемещает абзац вперед |
10 | [[ Перемещает раздел назад |
11 | ]] Перемещает раздел вперед |
12 | n| Переходит в столбец n в текущей строке |
13 | 1G Переход к первой строке файла |
14 | G Переход к последней строке файла |
15 | nG Переходит в nth строка файла |
16 | :n Переходит в nth строка файла |
17 | fc Двигается вперед к c |
18 | Fc Возвращается к c |
19 | H Переход в верхнюю часть экрана |
20 | nH Переходит в nth линия сверху экрана |
21 год | M Перемещается в середину экрана |
22 | L Перейти в нижнюю часть экрана |
23 | nL Переходит в nth линия снизу экрана |
24 | :x Двоеточие, за которым следует число, поместит курсор на номер строки, представленный x |
Команды управления
Следующие команды могут использоваться с Control Key для выполнения функций, указанных в таблице ниже:
Sr.No. | Команда и описание |
---|---|
1 | CTRL+d Перемещение вперед на 1/2 экрана |
2 | CTRL+f Перемещение на один полный экран вперед |
3 | CTRL+u Перемещение на 1/2 экрана назад |
4 | CTRL+b Переход на один полный экран назад |
5 | CTRL+e Перемещает экран на одну строку вверх |
6 | CTRL+y Перемещает экран на одну строку вниз |
7 | CTRL+u Перемещает экран вверх на 1/2 страницы |
8 | CTRL+d Перемещает экран вниз на 1/2 страницы |
9 | CTRL+b Перемещает экран на одну страницу вверх |
10 | CTRL+f Перемещает экран на одну страницу вниз |
11 | CTRL+I Перерисовывает экран |
Редактирование файлов
Чтобы отредактировать файл, вам необходимо находиться в режиме вставки. Есть много способов войти в режим вставки из командного режима -
Sr.No. | Команда и описание |
---|---|
1 | i Вставляет текст перед текущим положением курсора |
2 | I Вставляет текст в начало текущей строки |
3 | a Вставляет текст после текущего местоположения курсора |
4 | A Вставляет текст в конец текущей строки |
5 | o Создает новую строку для ввода текста под курсором |
6 | O Создает новую строку для ввода текста над положением курсора |
Удаление персонажей
Вот список важных команд, которые можно использовать для удаления символов и строк в открытом файле:
Sr.No. | Команда и описание |
---|---|
1 | x Удаляет символ под курсором |
2 | X Удаляет символ перед положением курсора |
3 | dw Deletes from the current cursor location to the next word |
4 | d^ Deletes from the current cursor position to the beginning of the line |
5 | d$ Deletes from the current cursor position to the end of the line |
6 | D Deletes from the cursor position to the end of the current line |
7 | dd Deletes the line the cursor is on |
As mentioned above, most commands in vi can be prefaced by the number of times you want the action to occur. For example, 2x deletes two characters under the cursor location and 2dd deletes two lines the cursor is on.
It is recommended that the commands are practiced before we proceed further.
Change Commands
You also have the capability to change characters, words, or lines in vi without deleting them. Here are the relevant commands −
Sr.No. | Command & Description |
---|---|
1 | cc Removes the contents of the line, leaving you in insert mode. |
2 | cw Changes the word the cursor is on from the cursor to the lowercase w end of the word. |
3 | r Replaces the character under the cursor. vi returns to the command mode after the replacement is entered. |
4 | R Overwrites multiple characters beginning with the character currently under the cursor. You must use Esc to stop the overwriting. |
5 | s Replaces the current character with the character you type. Afterward, you are left in the insert mode. |
6 | S Deletes the line the cursor is on and replaces it with the new text. After the new text is entered, vi remains in the insert mode. |
Copy and Paste Commands
You can copy lines or words from one place and then you can paste them at another place using the following commands −
Sr.No. | Command & Description |
---|---|
1 | yy Copies the current line. |
2 | yw Copies the current word from the character the lowercase w cursor is on, until the end of the word. |
3 | p Puts the copied text after the cursor. |
4 | P Puts the yanked text before the cursor. |
Advanced Commands
There are some advanced commands that simplify day-to-day editing and allow for more efficient use of vi −
Sr.No. | Command & Description |
---|---|
1 | J Joins the current line with the next one. A count of j commands join many lines. |
2 | << Shifts the current line to the left by one shift width. |
3 | >> Shifts the current line to the right by one shift width. |
4 | ~ Switches the case of the character under the cursor. |
5 | ^G Press Ctrl and G keys at the same time to show the current filename and the status. |
6 | U Restores the current line to the state it was in before the cursor entered the line. |
7 | u This helps undo the last change that was done in the file. Typing 'u' again will re-do the change. |
8 | J Joins the current line with the next one. A count joins that many lines. |
9 | :f Displays the current position in the file in % and the file name, the total number of file. |
10 | :f filename Renames the current file to filename. |
11 | :w filename Writes to file filename. |
12 | :e filename Opens another file with filename. |
13 | :cd dirname Changes the current working directory to dirname. |
14 | :e # Toggles between two open files. |
15 | :n In case you open multiple files using vi, use :n to go to the next file in the series. |
16 | :p In case you open multiple files using vi, use :p to go to the previous file in the series. |
17 | :N In case you open multiple files using vi, use :N to go to the previous file in the series. |
18 | :r file Reads file and inserts it after the current line. |
19 | :nr file Reads file and inserts it after the line n. |
Word and Character Searching
The vi editor has two kinds of searches: string and character. For a string search, the / and ? commands are used. When you start these commands, the command just typed will be shown on the last line of the screen, where you type the particular string to look for.
These two commands differ only in the direction where the search takes place −
The / command searches forwards (downwards) in the file.
The ? command searches backwards (upwards) in the file.
The n and N commands repeat the previous search command in the same or the opposite direction, respectively. Some characters have special meanings. These characters must be preceded by a backslash (\) to be included as part of the search expression.
Sr.No. | Character &Description |
---|---|
1 | ^ Searches at the beginning of the line (Use at the beginning of a search expression). |
2 | . Matches a single character. |
3 | * Matches zero or more of the previous character. |
4 | $ End of the line (Use at the end of the search expression). |
5 | [ Starts a set of matching or non-matching expressions. |
6 | < This is put in an expression escaped with the backslash to find the ending or the beginning of a word. |
7 | > This helps see the '<' character description above. |
The character search searches within one line to find a character entered after the command. The f and F commands search for a character on the current line only. f searches forwards and F searches backwards and the cursor moves to the position of the found character.
The t and T commands search for a character on the current line only, but for t, the cursor moves to the position before the character, and T searches the line backwards to the position after the character.
Set Commands
You can change the look and feel of your vi screen using the following :set commands. Once you are in the command mode, type :set followed by any of the following commands.
Sr.No. | Command & Description |
---|---|
1 | :set ic Ignores the case when searching |
2 | :set ai Sets autoindent |
3 | :set noai Unsets autoindent |
4 | :set nu Displays lines with line numbers on the left side |
5 | :set sw Sets the width of a software tabstop. For example, you would set a shift width of 4 with this command — :set sw = 4 |
6 | :set ws If wrapscan is set, and the word is not found at the bottom of the file, it will try searching for it at the beginning |
7 | :set wm If this option has a value greater than zero, the editor will automatically "word wrap". For example, to set the wrap margin to two characters, you would type this: :set wm = 2 |
8 | :set ro Changes file type to "read only" |
9 | :set term Prints terminal type |
10 | :set bf Discards control characters from input |
Running Commands
The vi has the capability to run commands from within the editor. To run a command, you only need to go to the command mode and type :! command.
For example, if you want to check whether a file exists before you try to save your file with that filename, you can type :! ls and you will see the output of ls on the screen.
You can press any key (or the command's escape sequence) to return to your vi session.
Replacing Text
The substitution command (:s/) enables you to quickly replace words or groups of words within your files. Following is the syntax to replace text −
:s/search/replace/g
The g stands for globally. The result of this command is that all occurrences on the cursor's line are changed.
Important Points to Note
The following points will add to your success with vi −
You must be in command mode to use the commands. (Press Esc twice at any time to ensure that you are in command mode.)
You must be careful with the commands. These are case-sensitive.
You must be in insert mode to enter text.