Vi

Материал из Wiki Open Book.

Перейти к: навигация, поиск
Пользовательского поиска

Содержание

[править] Коротко о редакторе vi

vi — это стандартный текстовый редактор UNIX, который есть в любой UNIX–подобной операционной системе. Первая версия редактора появилась в 1976 году. Редактор построен на базе редактора командной строки ex.

Cуществует множество «клонов» vi: elvis, vim и др. Все они включают идентичный, основной набор команд. В ОС Linux наиболее распространённым является vim. В дистрибутиве Slackware Linux редактором vi по умолчанию является elvis.


В редакторе vi есть следующие основные режимы:

  • командный режим
  • режим редактирования
  • ex-режим или режим последней строки.


По умолчанию, работа начинается в командном режиме. В этом режиме можно перемещаться по файлу и выполнять некоторые «редактирующие» операции над текстом. Любое нажатие на клавиши в командном режиме воспринимается как команда. Возврат в командный режим из режима редактирования осуществляется нажатием клавиши <ESC>.

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

Для входа в режим последней строки необходимо нажать клавишу : . Редактор vi имеет встроенный не экранный редактор, именуемый ex, который используется для некоторых операций редактирования, ориентированных на строки; управления файлами (сохранить, выйти, перечитать) и т.п.


[править] Команды редактора

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

:help              # вывод справочной информации в рабочем окружении редактора
:q                 # выход из help

[править] Открытие и создание файлов

Открывать или создавать файлы можно следующим образом:

vi [параметры] файл

например:

$ vi filename        # открыть файл filename
$ vi +3 filename     # открыть файл filename с 3-ей строки
$ vi -r filename     # открыть файл filename только для чтения
$ vi newfile         # создать новый файл 

Можно открывать сразу несколько файлов. Переход между открытыми файлами осуществляется при помощи команды :n и :N.

$ vi file1 file2     # открыть file1, затем file2
:n                   # перейти из файла file1 в file2
:N                   # вернуться из файла file2 в file1

Можно открывать или создавать файлы находясь в рабочем пространстве редактора. Для этого нужно воспользоваться режимом последней строки.

:e filename-2         # открыть файл filename-2. Если файла с таким именем
                      # не существует, он будет создан и открыт в редакторе

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

Также можно загрузить новый файл в буфер, не завершая работу с текущим файлом.

:r myfile             # загрузить файл myfile в буфер
:r! lsmod             # загрузить вывод программы, например, lsmod в буфер
:e! filename          # открыть файл filename, отклонив изменения в текущем файле

Можно держать открытыми одновременно несколько буферов, используя команду sp или split. Редактор откроет файл в новом окне, «потеснив» уже открытые. Команда sp (без имени файла) откроет дополнительное окно для активного буфера. Переход между окнами осуществляется при помощи комбинации клавиш <CTRL+w>, нажатых 2 раза подряд.

:sp filename-2        # разделить рабочее окно и открыть файл
:split filename-2     #	разделить рабочее окно и открыть файл
:sp                   # открыть окно для активного буфера
<CTRL+w> (2 раза)     #	переход, переключение от одного окна к другому

В режиме последней строки работает "автоподстановка" по табуляции.

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

:е!                   # перезагрузить, перечитать файл
:e ++enc=cp1251	      # перечитать файл и сменить кодировку символов (работает в vim)

[править] Работа в командном режиме

Выполняются операции перемещения по файлу, удаления, поиска.

При осуществлении перемещения по тексту при помощи команд w, e, b, следует отметить, что, например, «слово» /dev/sda3 редактор определит как 4 различных слова. Чтобы это слово считалось как одно «большое слово», необходимо вводить команды заглавными буквами: W, E, B.

Для поиска начала и конца предложения, абзаца и перемещения по ним следует воспользоваться ( ) и { } .

Команды, используемые для перемещения по тексту:

<ESC>  	               # перейти в командный режим
h 	               # перейти влево на один символ
j 	               # перейти вниз на один символ
k 	               # перейти вверх на один символ
l 	               # перейти вправо на один символ
0 (ноль) или | 	       # перейти в начало строки
$ 	               # перейти в конец строки
w 	               # перейти в начало следующего «слова», вперёд
W 	               # перейти в начало следующего «большого слова», вперёд
e 	               # перейти в конец «слова», вперёд
E 	               # перейти в конец «большого слова», вперёд
b 	               # перейти в начало «слова» или предыдущего «слова», назад
B 	               # перейти в начало «большого слова» или предыдущего «большого слова», назад
( 	               # перейти в начало текущего или предыдущего предложения, назад
) 	               # перейти в начало следующего предложения, вперёд
{ 	               # перейти в начало текущего или предыдущего абзаца, назад
} 	               # перейти в начало следующего  абзаца, вперёд
G 	               # перейти в конец файла
<CTRL+B> 	       # перейти на страницу вверх
<CTRL+F> 	       # перейти на страницу вниз

Можно перемещаться по строкам, указав их номера в режиме командной строки:

:1 	               # перейти в начало файла
:47 	               # перейти, например, к 47-й строке

В современных версиях редактора работают клавиши управления курсором и клавиши <PageUp>, <PageDown>.

Поиск по тексту:

/<текст> 	       # искать <текст> в прямом направлении после курсора
?<текст> 	       # искать <текст> в обратном направлении до курсора
n 	               # повторить поиск в прямом направлении
N 	               # повторить поиск в обратном направлении
/ 	               # повтор последнего поиска в прямом направлении
? 	               # повтор последнего поиска в обратном направлении

Операции «простого» редактирования:

x 	               # удалить символ под курсором
X 	               # удалить предыдущий символ перед курсором
J 	               # объединить текущую строку со следующей
r<символ> 	       # заменить символ под курсором на <символ> 
dd 	               # удалить текущую строку
d<место> 	       # удалить текст от курсора до его перемещения
u 	               # отменить последнюю операцию
U                      # отменить последнюю операцию в текущей строке
. 	               # повторить операцию

[править] Работа в режиме редактирования

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

i  	               # перейти в режим редактирования перед курсором
a  	               # перейти в режим редактирования за курсором
I 	               # перейти в режим редактирования в начале текущей строки
A 	               # перейти в режим редактирования в конце текущей строки
o 	               # перейти в режим редактирования в новой строке после текущей строки
O 	               # перейти в режим редактирования в новой строке перед текущей строкой
сс 	               # заменить текущую строку
c<место> 	       # заменить текст от курсора до <места> его назначения
R 	               # перейти в режим замены символов

В современных версиях vi, таких как vim и elvis, возможно «подсвечивать» текст, для того чтобы в последующем копировать, вырезать и вставлять фрагменты текста. Это, так называемый, визуальный режим. Переход в него осуществляется при помощи клавиши v, V или комбинации клавиш <CTRL+V> Далее, двигая курсор командами перемещения, можно выделить область текста.

v	               # перейти в визуальный режим для выделения текста посимвольно
v<место>	       # перейти в визуальный режим и выделить текст от курсора до <места>
V                      # перейти в визуальный режим для выделения текста построчно
<CTRL+V>               # перейти в визуальный режим для выделения прямоугольного участка текста
d		       # вырезать выделенный фрагмент текста
y		       # скопировать выделенный фрагмент текста
p		       # вставить фрагмент текста после курсора
P		       # вставить фрагмент текста перед курсором

Поиск и замена текста осуществляется при помощи команды :s/<regexp>/<replacement>/, где <regexp> — что нужно заменить и <replacement> - на что нужно заменить.

:s/<что>/<чем>/			заменить 1-ое совпадение в текущей строке
:s/<что>/<чем>/g		заменить все совпадения в текущей строке
:%s/<что>/<чем>/g		заменить все совпадения в файле
:%s/<что>/<чем>/gc		заменить все совпадения в файле с подтверждением


[править] Примеры комбинирования команд

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

Например,

3G 	               # перейти на строку с номером 3
3l		       # перейти на 3 символа вправо
4)		       # перейти на 4 предложения вперёд
2b		       # перейти на 2 слова назад
12}		       # перейти на 12 абзацев вперёд

10x 	               # удалить 10 символов с текущей позиции курсора
5dd 	               # удалить 5 строк, начиная с текущей
d3w		       # удалить следующие 3 слова после курсора
d}		       # удалить остаток абзаца после курсора
d)		       # удалить остаток предложения после курсора

с)		       # заменить остаток предложения после курсора
c$		       # заменить остаток строки после курсора

v5l		       # перейти в экранный режим и выделить 5 символов вправо с текущего положения курсора
v$		       # перейти в экранный режим и выделить всю строку с текущего положения курсора
vG		       # перейти в экранный режим и выделить весь файл с текущего положения курсора


[править] Некоторые настройки редактора

Редактор vi поддерживает автоматический отступ при редактировании исходных текстов программ. Современные версии редактора могут самостоятельно включать автоматический абзацный отступ. Можно также включить его вручную выполнив команду :set autoindent.

:set autoindent	       # включить абзацный отступ
<CTRL+D>	       # увеличить уровень отступа
<CTRL+T>	       # уменьшить уровень отступа
:set tabstop=4	       # установить абзацный отступ в 4 символа

Полезными также могут оказаться следующие команды:

:set ic                # игнорировать регистр при поиске
:set hls	       # подсвечивать текст при поиске

:set wrap              # переносить «длинные» строки
:set nowrap            # отключить перенос «длинных» строк 

:set nu[mber]          # отобразить слева нумерацию строк
:set nonu[mber]        # скрыть нумерацию строк

:set fileformat=dos    # привести концы строк в файле к формату dos
:set fileformat=unix   # привести концы строк в файле к формату unix

:syntax on/off         # включить/выключить подсветку синтаксиса (работает в vim)

[править] Завершение работы

Завершение работы в редакторе осуществляется при помощи следующих команд, или их комбинаций:

:q		       # выход из файла (если не внесено никаких изменений)
:q!		       # выход из файла без сохранения
:wq		       # выход из файла с сохранением
:x		       # выход из файла с сохранением
:ZZ                    # выход из файла с сохранением
:w		       # сохранить файл без выхода
:w <имя файла>	       # сохранить буфер в файле <имя файла>
:5,125 w <имя файла>   # сохранить файл c 5 строки по 125 в файл <имя файла> 
Получено с http://wiki.kryukov.biz/wiki/Vi
Личные инструменты