**103.8 Текстовый редактор**  **Vi****.**

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

**Изучаем** :

- навигацию по документу с использованием vi;
- использование основных режимов работы vi;
- вставку, редактирование, удаление, копирование и поиск текста.

**Термины и утилиты:       **

- vi
- /, ?
- h,j,k,l
- i, o, a
- c, d, p, y, dd, yy
- ZZ, :w!, :q!, :e!

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

**Vi** имеет **модальный** интерфейс и одни и те же клавиши в разных режимах выполняют разные действия. По умолчанию работа начинается в **командном режиме**.

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

- **h** _или_ **←**         _(перемещение на символ влево);_
- **j** _или_ **↓**         _(перемещение на символ вниз);_
- **k** _или_ **↑**         _(перемещение на символ вверх);_
- **l** _или_ **→**         _(перемещение на символ вправо);_
- **b****                ** _(перемещение в начало слова);_
- **e****                ** _(перемещение в конец слова);_
- **(               ** _(перемещение в начало предложения);_
- **)               ** _(перемещение в конец предложения);_
- **{               ** _(перемещение в начало абзаца);_
- **}               ** _(перемещение в конец абзаца);_
- **^               ** _(перемещение в начало строки);_
- **$               ** _(перемещение в конец строки);_
- **1**** G ****               ** _(перемещение в начало файла);_
- **G****                ** _(перемещение в конец файла)._

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

- **I****        ** _(режим вставки перед текущим символом);_
- **a****         ** _(режим вставки после текущего символа);_
- **o****        ** _(вставить новую строчку);_
- **s       ** _(стереть символ и вставить)._

Для возврата в командный режим можно использовать клавишу **Esc** или сочетание **Ctrl**** + ****C**

Находясь в режиме редактирования можно использовать буфер обмена:

- **y** _        (скопировать)__;_
- **d** _        ( __вырезать__ )__;_
- **c** _        ( __изменить__ )__;_
- **p** _        (вставить)._

Также возможны комбинации с символами перемещения по тексту и обозначениями **d** (строка), **w** (слово) и **l** (символ); например

**yw** _        (скопировать слово);_

**dd** _        (вырезать строку);_

**cl** _        (изменить символ);_

**d**** $**_        (удалить с текущего места до конца строки);_

**y**** }**_        (скопировать с текущего места до конца абазца);_

Для поиска информации доступны символы:

- **/       ** _        (искать ниже по тексту набор символов, указанных после «/»);_
- **?       ** _        (искать выше по тексту набор символов, указанных после «?»);_
- **n****        ** _        (показать следующий результат поиска);_
- **N****        ** _        (показать предыдущий результат поиска)._

Для завершения работы с файлом:

- **:e!** _        (отменить все изменения, где «!» - игнорировать все предупреждения);_
- **:**** w ****!** _        (записать изменения);_
- **:q       ** _(выйти из файла);_

Как всегда, возможны комбинации, например:

**:**** wq ****! newfile.txt       ** _(сохранить под именем_ _newfile __.__ txt_ _и выйти);_

Также доступны сокращенные команды:

- **ZZ       ** _(сохранить и выйти)__;_
- **ZQ****        ** _(не сохранять и выйти);_