В процессе работы в системе вам необходимо будет создавать и редактировать текстовые файлы. Все эти действия можно выполнить с помощью экранного текстового редактора vi.
Для начала попробуем создать новый файл, например 'testvi':
$ vi testvi
Появится пустой экран с курсором в первой строке. Остальные строки (также пустые) будут начинаться с символа '~' (тильда). В самой последней строке будет сообщение примерно такого содержания:
testvi: new file: line 1.
В дальнейшем эта строка будет также использоваться и для ввода команд.
Немного отвлечемся от нашего файла и рассмотрим систему команд vi. Большинство команд - это одиночные клавиши или комбинации клавиш, которые выполняют простые функции редактирования. vi работает в двух основных режимах - в режиме "ввода текста" и в режиме "команд".
После запуска vi оказывается в режиме "команд". Для перехода в режим "ввода текста" необходимо нажать на клавишу 'a' или 'i' (обращайте внимание на регистр клавиш!). После этого можно набирать текст. Каждую введенную строку следует, как это принято, завершать нажатием клавиши [Enter].
Выполните следующие действия. Нажмите клавишу 'a', перейдите в режим "ввода текста" и наберите 3 строки:
Line 1 Line 2 Line 3
Для перехода в режим "команд" нажмите на клавишу Esc. Эта же клавиша используется для отмены не до конца набранной команды. Если вы неправильно ввели команду, редактор сообщит об этом одиночным звуковым сигналом.
Допустим, вам необходимо вставить в начало второй строки еще одно слово. Для этого в режиме "команд" перейдите куpсоpом на нужную строку, установите курсор в первую позицию и нажмите клавишу 'i'. После этого вставьте нужный текст, например слово 'Insert':
Line 1 Insert Line 2 Line 3
Для перехода в режим "команд" снова нажмите клавишу 'Esc', назначение которой надеемся вы уже поняли. Если вы по каким-то причинам запутались в каком режиме вы находитесь, нажмите два раза подряд Esc. Редактор выдаст звуковой сигнал, сообщая таким образом, что вы находитесь в режиме "команд".
Чтобы сделать редактор немного по разговорчивей, в режиме "команд" введите следующую команду в нижней строке:
:set verbose showmmode [Enter]
(В данном примере символ ':' означает признак ввода команды.)
После выполнения данной команды редактор будет вам сообщать о достижении конца строки и файла, переходе в режим "команд" и т.д.
Для перемещения курсора по тексту в режиме "команд" можно использовать клавиши управления курсором, а также следующие клавиши:
h или ПРОБЕЛ |
Курсор на один символ влево. |
l или BACKSPASE |
Курсор на один символ вправо. |
j | Курсор вниз на одну строку. |
k | Курсор вверх на одну строку. |
^ | Переместить курсор на начало первого слова текущей строки. |
$ | Переместить курсор в конец текущей строки. |
| | Переместить курсор в первую позицию текущей строки. |
w | Переместить курсор вперед на начало следующего cлова. |
b | Переместить курсор назад на начало текущего слова. |
e | Переместить курсор в конец слова. |
( | Переместить курсор в начало предложения (назад). |
) | Переместить курсор в конец предложения (вперед). |
{ | Переместить курсор на начало параграфа (назад). |
} | Переместить курсор в конец параграфа (вперед). (Параграфы могут быть разделены пустыми строками). |
Если перед нажатием на клавишу набрать какое-либо число, то курсор будет перемещен на соответствующее число позиций или строк.
числоПРОБЕЛ | Переместить курсор на указанное число позиций вправо. |
числоBACKSPASE | Переместить курсор на указанное число позиций влево. |
Также для пеpемещения по тексту можно использовать следующие команды:
числоG | Переместить курсор в указанную строку. |
число| | Переместить курсор в указанную позицию текущей строки. |
В данном случае число обозначает количество повторов команды, которое необходимо выполнить.
Для поиска текста можно использовать команду '/'. После нее необходимо ввести строку для поиска и нажать [Enter]. Например:
:/Line 5[Enter]
После завершения поиска курсор будет находиться на первом символе строки.
Знак вопроса '?' работает так же, только поиск в файле ведется назад (т.е. в обратном направлении)
Для перехода в режим "ввода текста" можно использовать следующие команды:
a | Вставить текст после курсора. |
i | Вставить текст перед курсором. |
o | Вставить новую строку после текущей. |
O | Вставить новую строку перед текущей. |
(Текущей будем называть строку в которой расположен курсор, а текущим символом - символ в котором находится курсор).
В режиме команд можно выполнять редактирование набранного текста с помощью следующих команд:
x | Удалить текущий символ. |
dd | Удалить текущую строку. |
числоdd | Удалить указанное число строк начиная с текущей. |
dw | Удалить текущее слово. |
числоdw | Удалить указанное число слов начиная с текущего. |
r | Заменить текущий символ на символ, набранный вслед за 'r'. |
числоs | Заменить указанное число символов на такое же 'число' набранных вслед символов. |
Вообще-то последний удаленный фрагмент текста не теряется, а сохраняется в специальном буфере и может быть оперативно (сразу после удаления) восстановлен и вставлен в любое место файла. Такую возможность можно использовать для переноса строк из одного места в другое. Например, вам необходимо поменять местами строки 3 и 2 нашего файла.
Для этого перейдите в режим "команд" (Esc), установите курсор во вторую строку, введите комбинацию 'dd. Строка 'Line 2' будет удалена (помещена в буфер), и весь текст сдвинется вверх. В текущей строке появится строка 'Line 3':
Line 1 Line 3
Далее нажмите клавишу 'p'. После текущей строки ('Line 3') из буфера будет восстановлена и станет текущей строка 'Line 2':
Line 1 Line 3 Line 2
Соответственно для вставки удаленной строки перед текущей можно использовать команду 'P'.
Если вам необходимо сохранить в буфере строку без ее удаления, используйте команду 'yy'. В дальнейшем эту строку можно скопировать в другое место файла. Для работы с буфером и для перемещения (копирования) строк можно использовать следующие команды:
yw | Сохранить слово в буфере. |
числоyw | Сохранить указанное число слов в буфере. |
yy | Сохранить текущую строку в буфере. |
числоyy | Сохранить указанное число строк в буфере. |
p | Скопировать и поместить информацию из буфера после текущей строки. |
P | Скопировать и поместить информацию из буфера перед текущей строкой. |
(После копирования информация из буфера не удаляется и ее можно использовать еще).
Существует еще одна интересная команда - '.' (точка). Она выполняет последнюю введенную команду. Например, если с помощью команды 'dd' была удалена строка, то нажатие на клавишу '.' приведет к удалению следующей строки. Если строка была помещена в окно редактирования из буфера по команде 'p', то нажатие на '.' приведет к помещению в окно редактирования еще одной копии строки.
При запуске vi можно указать следующие параметры:
vi | Редактирует временный файл, которому при сохранении текста необходимо дать имя. |
vi +45 file | Переходит на строку с номером 45. |
vi +/word file | Ищет первое вхождение слова 'word' |
$vi -c cmd | Выполняет команду cmd немедленно после начала сеанса редактирования. |
$vi -r | Восстанавливает указанные файлы, если пpоизошел аваpийный выход из pедактоpа или внезапное завеpшение системы. Если файлы не опpеделены, вывести список файлов, котоpые могут быть восстановлены. |
Для выхода из редактора и сохранения текста используете следующие команды:
:w | сохранить текст без выхода из редактора |
:w имя_файла | Сохранить текст в указанном файле. |
:wq или :x |
Сохранить текст и выйти из редактора. |
:q | Выйти из редактора. Если файл был модифицирован, вам будет предложено для выхода без сохранения использовать команду :q! |
:q! | Выйти из редактора без сохранения текста. |
На самом деле vi работает с копией вашего файла, поэтому в случае сбоя ваш исходный файл вряд ли пострадает.