Текст книги "Командная строка Linux"
Автор книги: Уильям Шоттс
Жанр:
ОС и Сети
сообщить о нарушении
Текущая страница: 10 (всего у книги 30 страниц)
12. Плавное введение в vi
Существует старая шутка о человеке, впервые приехавшем в Нью-Йорк и спрашивающем у прохожего дорогу к известному концертному залу:
Приезжий: Простите, как попасть в Карнеги-холл?
Прохожий: Репетировать, репетировать и репетировать!
Освоение командной строки Linux, как становление пианиста-виртуоза, невозможно за один день. Для этого требуются годы практики. В этой главе вы познакомитесь с текстовым редактором vi (произносится как «ви ай»), одной из традиционных программ Unix. Редактор vi известен своим сложным пользовательским интерфейсом, но когда вы увидите, как мастер садится за клавиатуру и начинает «играть», вы станете свидетелем высокого искусства. Вы не станете мастерами, прочитав эту главу, но закончив ее, вы будет знать, как сыграть «Собачий вальс» на vi.
Зачем осваивать vi
Зачем в современном мире редакторов с графическим интерфейсом и простых в использовании редакторов с текстовым интерфейсом, таких как nano, осваивать vi? На то есть три веские причины:
• vi всегда под рукой. Он может прийти на помощь в системах, где отсутствует графический интерфейс, например на удаленном сервере или в локальной системе с нерабочей конфигурацией X. Редактор nano, хотя и чрезвычайно популярен, все же недостаточно универсален. POSIX, стандарт программной совместимости систем Unix, требует наличия в них vi.
• vi легковесный и быстрый. Для многих задач гораздо проще запустить vi, чем найти в меню редактор с графическим интерфейсом и ждать, пока несколько мегабайтов загрузится в память. Кроме того, vi специально проектировался для скоростного ввода с клавиатуры. Как будет показано ниже, опытный пользователь vi никогда не отрывает рук от клавиатуры во время редактирования.
• Мы не хотим, чтобы другие пользователи Linux и Unix считали нас неженками.
Хорошо, пусть будет две веские причины.
Немного предыстории
Первая версия vi была написана Билли Джоем, студентом Калифорнийского университета в городе Беркли, который позднее стал сооснователем Sun Microsystems в 1976 году. Название vi произошло от слова visual (экранный), потому что редактор предназначался для редактирования на экране видеотерминала с возможностью перемещения курсора по всей его поверхности. До экранных редакторов существовали строчные редакторы, позволяющие редактировать текст только по одной строке. Чтобы внести изменения в строчном редакторе, нужно было сначала перейти к требуемой строке а затем описать требуемое изменение: добавление или удаление текста. С появлением видеотерминалов (взамен терминалов с печатающим устройством, таких как телетайпы) стало возможным визуальное редактирование на экране. В действительности vi включает в себя мощный строчный редактор ex, и его можно использовать для ввода команд во время работы в vi.
Большинство дистрибутивов Linux содержат не настоящий редактор vi, а его улучшенную замену с именем vim (сокращенно от Vi IMproved – Vi улучшенный), созданную Брамом Моленаром (Bram Moolenaar). vim существенно совершеннее традиционного редактора vi и в системах Linux обычно используется под символической ссылкой (или псевдонимом) vi. В обсуждении ниже будет предполагаться, что у вас есть программа с именем vi, которая в действительности является редактором vim.
Запуск и завершение vi
Чтобы запустить vi, введите следующую команду:
[me@linuxbox ~]$ vi
На экране должно появиться:
~
~
~ VIM – Vi IMproved
~
~ version 7.1.138
~ by Bram Moolenaar et al.
~ Vim is open source and freely distributable
~
~
~ Sponsor Vim development!
~ type :help sponsor
~
~ type :q
~ type :help
~ type :help version7
~
~ Running in Vi compatible mode
~ type :set nocp
~ type :help cp-default
~
~
~
Так же как при знакомстве с nano, которое произошло в предыдущей главе, сначала научимся выходить из редактора. Для этого введите следующую команду (обратите внимание: двоеточие – это часть команды):
:q
В окне терминала должно появиться приглашение к вводу командной оболочки. Если по какой-то причине выход из vi не получился (скорее всего, потому что вы внесли какие-то изменения и еще не сохранили их), сообщите vi, что вы действительно хотите выйти, добавив в команду восклицательный знак:
:q!
ПРИМЕЧАНИЕ
Если вы «заблудились» в vi, попробуйте дважды нажать ESC, чтобы вернуться на верный путь.
Режимы редактирования
Давайте снова запустим vi, но на этот раз укажем имя несуществующего файла. Именно так можно с помощью vi создать новый файл:
[me@linuxbox ~]$ rm -f foo.txt
[me@linuxbox ~]$ vi foo.txt
В случае успеха на экране должно появиться следующее:
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
"foo.txt" [New File]
Начальные символы тильды (~) сообщают об отсутствии текста в соответствующих строках. Таким способом vi сообщает нам, что файл пуст. Не вводите пока ничего!
Вторая важная вещь, которую нужно усвоить (после того, как вы научились выходить), – vi является режимным редактором. Сразу после запуска vi оказывается в командном режиме. В этом режиме практически каждая клавиша является командой, поэтому если вы начнете ввод, vi может запутаться сам и запутать вас.
Переход в режим вставки
Чтобы добавить какой-то текст в файл, необходимо сначала перейти в режим вставки. Для этого нажмите клавишу I (i). Вслед за этим, если vim работает в обычном расширенном режиме, в нижней части экрана появится надпись (она не появится, если редактор работает в режиме совместимости с vi):
– INSERT –
Теперь можно ввести какой-нибудь текст. Попробуйте, например:
Съешь же ещё этих мягких французских булок, да выпей чаю.
Чтобы выйти из режима вставки и вернуться в командный режим, нажмите ESC.
Сохранение изменений
Чтобы сохранить изменения в файл, введите ex-команду, находясь в командном режиме. Для этого нажмите клавишу :. После этого в нижней части должен появиться символ двоеточия:
:
Чтобы выполнить запись изменений в файл, вслед за двоеточием введите w и нажмите ENTER:
:w
Файл будет записан на жесткий диск, и в нижней части появится подтверждение:
"foo.txt" [New] 1L, 46C written
ПРИМЕЧАНИЕ
Если заглянуть в документацию к vim, можно заметить, что (по непонятной причине) командный режим в ней называется нормальным режимом, а ex-команды называются командным режимом. Имейте эту неточность в виду.
режим совместимости
В начале этого раздела, где показан экран, который выводится сразу после запуска vim (взят из Ubuntu 8.04), можно заметить текст: «Running in Vi compatible mode» (запущен в режиме совместимости с vi). Это означает, что vim был запущен в режиме, близко повторяющем обычное поведение vi, а не в расширенном режиме vim. Чтобы беспрепятственно следовать за дальнейшим обсуждением в этой главе, запустите vim в расширенном режиме. Для этого в вашем распоряжении имеется пара возможностей:
• запустить редактор командой vim вместо vi (если этот прием сработает, подумайте о том, чтобы добавить псевдоним vi='vim' в свой файл .bashrc file);
• выполнить следующую команду, чтобы добавить строку в конфигурационный файл vim:
echo "set nocp" >> ~/.vimrc
В разных дистрибутивах Linux vim упакован по-разному. В некоторых дистрибутивах по умолчанию устанавливается минимальная версия vim, поддерживающая лишь ограниченный набор возможностей vim. Поэтому, выполняя примеры из этой главы, вы можете столкнуться с отсутствием некоторых возможностей, – в этом случае просто установите полную версию vim командой: sudo apt-get install vim.
Перемещение курсора
Находясь в командном режиме, vi предлагает большое число команд управления курсором, часть из которых также используется программой less. В табл. 12.1 перечислены некоторые из этих команд.
Таблица 12.1. Клавиши управления курсором
Клавиша
Перемещает курсор
L или стрелка вправо
Вправо на один символ
H или стрелка влево
Влево на один символ
J или стрелка вниз
Вниз на одну строку
K или стрелка вверх
Вверх на одну строку
0 (ноль)
В начало текущей строки
SHIFT+6 (^)
К первому непробельному символу в текущей строке
SHIFT+4 ($)
В конец текущей строки
W (w)
В начало следующего слова или к знаку препинания
SHIFT+W (W)
В начало следующего слова, минуя знаки препинания
B (b)
В начало предыдущего слова или к знаку препинания
SHIFT+B (B)
В начало предыдущего слова, минуя знаки препинания
CTRL+F или Page Down
Вниз на одну страницу
CTRL+B или Page Up
Вверх на одну страницу
число-SHIFT+G
К строке с указанным номером (например, команда 1G выполнит переход к первой строке в файле)
SHIFT+G (G)
К последней строке в файле
Почему для перемещения курсора были выбраны клавиши H, J, K и L? Потому что, когда был написан редактор vi, не все видеотерминалы имели кнопки со стрелками на клавиатуре. Таким образом, опытные пользователи, хорошо владеющие клавиатурой, могли управлять курсором, не отрывая пальцев от клавиш.
Многие команды в vi могут начинаться с числа, как команда G в табл. 12.1. Добавляя число в команду, можно указать, сколько раз она должна быть выполнена. Например, команда 5j переместит курсор на пять строк вниз.
Основы редактирования
Редактирование в основном заключается в нескольких простых операциях, таких как вставка текста, удаление текста и перемещение фрагментов текста с применением операций вырезания и вставки. Конечно же, vi поддерживает все эти операции своим неповторимым способом. vi поддерживает ограниченную форму отмены. Если нажать клавишу U в командном режиме, vi отменит последнее выполненное изменение. Это пригодится нам, когда мы будем пробовать некоторые простые команды редактирования.
Добавление текста в конец
vi поддерживает несколько способов входа в режим вставки. Мы уже использовали команду i для вставки текста.
Давайте вернемся к нашему файлу foo.txt:
Съешь же ещё этих мягких французских булок, да выпей чаю.
Если попытаться добавить текст в конец приложения, можно обнаружить, что команда i не позволяет сделать это, не давая переместить курсор за конец строки. vi поддерживает команду добавления текста в конец, разумно названную a. Если переместить курсор в конец строки и ввести a, курсор переместится за конец строки и vi перейдет в режим вставки. Это позволит нам добавить следующий текст:
Съешь же ещё этих мягких французских булок, да выпей чаю. Это классно.
Не забудьте нажать ESC, чтобы выйти из режима вставки.
Поскольку добавлять текст в конец строки требуется довольно часто, vi предлагает сокращенную команду для перемещения в конец строки и перехода в режим добавления. Это команда A. Давайте попробуем с ее помощью добавить еще несколько строк в наш файл.
Сначала командой 0 (ноль) переместите курсор в начало строки. Затем введите A и добавьте следующие строки текста:
Съешь же ещё этих мягких французских булок, да выпей чаю. Это классно.
Строка 2
Строка 3
Строка 4
Строка 5
Снова нажмите клавишу ESC, чтобы выйти из режима вставки.
Как видите, команда A очень удобна, потому что помещает курсор в конец строки перед переходом в режим вставки.
Вставка строки
Другой способ вставки текста – вставка строк. Он позволяет вставить пустую строку между двумя имеющимися строками и перейти в режим вставки. Данный способ предлагает два варианта вставки, перечисленные в табл. 12.2.
Таблица 12.2. Команды вставки строк
Команда
Вставляет
o
Строку ниже текущей
O
Строку выше текущей
Рассмотрим действие этих команд на следующих примерах: поместите курсор в строку с текстом Строка 3 и введите o.
Съешь же ещё этих мягких французских булок, да выпей чаю. Это классно.
Строка 2
Строка 3
Строка 4
Строка 5
Под третьей строкой появилась пустая строка, и редактор перешел в режим вставки. Выйдите из режима вставки нажатием ESC. Введите u, чтобы отменить изменения. Введите O, чтобы вставить пустую строку выше курсора:
Съешь же ещё этих мягких французских булок, да выпей чаю. Это классно.
Строка 2
Строка 3
Строка 4
Строка 5
Выйдите из режима вставки нажатием ESC и введите u, чтобы отменить изменения.
Удаление текста
Как можно догадаться, vi предлагает несколько способов удаления текста, и все они требуют нажатия одной или двух клавиш. Первый способ: клавиша X удаляет символ в позиции курсора. Команде x может предшествовать число, определяющее количество удаляемых символов. Клавиша D более универсальна. Команде d также может предшествовать число, определяющее количество операций удаления. Кроме того, команда d всегда сопровождается командой перемещения курсора, управляющей размером удаляемой области. В табл. 12.3 приводится несколько примеров команды удаления.
Поместите курсор на слово Это в первой строке. Вводите x, пока текст до конца предложения не будет удален. Затем введите несколько раз команду u, чтобы отменить удаление.
ПРИМЕЧАНИЕ
Настоящий редактор vi поддерживает отмену только самой последней команды. vim поддерживает отмену множества команд.
Таблица 12.3. Команды удаления текста
Команда
Удалит
X
Текущий символ
3x
Текущий символ и следующие за ним два символа
dd
Текущую строку
5dd
Текущую строку и следующие за ней четыре строки
dW
От символа в текущей позиции курсора до начала следующего слова
d$
От символа в текущей позиции курсора до конца текущей строки
d0
От символа в текущей позиции курсора до начала строки
d^
От символа в текущей позиции курсора до первого непробельного символа в строке
dG
От текущей строки до конца файла
d20G
От текущей строки до 20-й строки файла
Теперь давайте проведем операцию удаления еще раз, но на этот раз воспользуемся командой d. Снова установите курсор на слово Это и введите dW, чтобы удалить слово:
Съешь же ещё этих мягких французских булок, да выпей чаю. классно.
Строка 2
Строка 3
Строка 4
Строка 5
Введите d$, чтобы удалить все от текущей позиции курсора до конца строки:
Съешь же ещё этих мягких французских булок, да выпей чаю.
Строка 2
Строка 3
Строка 4
Строка 5
Введите dG, чтобы удалить все от текущей строки до конца файла:
~
~
~
~
~
Введите u три раза, чтобы отменить операции удаления.
Вырезание, копирование и вставка текста
Команда d не просто удаляет текст, она «вырезает» его. Каждый раз, когда выполняется команда d, удаленный текст копируется в буфер вставки (своего рода буфер обмена – clipboard), откуда позднее его можно извлечь командой p и вставить правее позиции курсора или левее – командой P.
Команда y выполняет копирование (yank) текста в буфер вставки почти так же, как команда d. В табл. 12.4 перечислены некоторые примеры комбинирования команды y с разными командами перемещения курсора.
Таблица 12.4. Команды копирования текста
Команда
Скопирует
yy
Текущую строку
5yy
Текущую и следующие четыре строки
yW
От текущей позиции курсора до начала следующего слова
y$
От текущей позиции курсора до конца текущей строки
y0
От текущей позиции курсора до начала строки
y^
От текущей позиции курсора до первого непробельного символа в строке
yG
От текущей строки до конца файла
y20G
От текущей строки до 20-й строки файла
Давайте попробуем что-нибудь скопировать и вставить. Поместите курсор на первую строку и введите yy, чтобы скопировать текущую строку. Далее, переместите курсор в последнюю строку (G) и введите p, чтобы вставить скопированную строку ниже текущей:
Съешь же ещё этих мягких французских булок, да выпей чаю. Это классно.
Строка 2
Строка 3
Строка 4
Строка 5
Съешь же ещё этих мягких французских булок, да выпей чаю. Это классно.
Введите команду u, чтобы отменить изменение. Оставив курсор в последней строке, введите P, чтобы вставить текст выше текущей строки:
Съешь же ещё этих мягких французских булок, да выпей чаю. Это классно.
Строка 2
Строка 3
Строка 4
Съешь же ещё этих мягких французских булок, да выпей чаю. Это классно.
Строка 5
Попробуйте другие команды y из табл. 12.4 и посмотрите, как действуют команды p и P. Закончив эксперименты, верните файл в исходное состояние.
Объединение строк
vi очень строго относится к понятию строки. Обычно он не дает возможности переместить курсор в конец строки и удалить символ конца строки, чтобы объединить текущую строку со следующей за ней. По этой причине в vi была добавлена специальная команда J (не путайте с командой j, которая перемещает курсор на одну строку вниз) для объединения строк.
Если поместить курсор в третью строку и ввести команду J, получится следующее:
Съешь же ещё этих мягких французских булок, да выпей чаю. Это классно.
Строка 2
Строка 3 Строка 4
Строка 5
Поиск и замена
Редактор vi имеет возможность перемещать курсор, опираясь на результаты поиска. Он может это делать в пределах одной строки или всего файла. Он может также выполнять замену текста с подтверждением или без подтверждения пользователя.
Поиск в пределах строки
Команда f выполняет поиск в строке и перемещает курсор к следующему вхождению указанного символа. Например, команда fa переместит курсор к следующему вхождению символа a в текущей строке. После выполнения операции поиска символа в строке ее можно повторить, введя точку с запятой.
Поиск во всем файле
Для перемещения курсора к следующему вхождению слова или фразы используется команда /. Она действует точно так же, как в программе less, о которой рассказывалось в главе 3. После ввода команды / в нижней части экрана появится прямой слеш, вслед за которым нужно ввести искомое слово или фразу и нажать ENTER. После этого курсор переместится к следующему вхождению искомой строки. Поиск следующего вхождения той же строки можно повторить командой n. Например:
Съешь же ещё этих мягких французских булок, да выпей чаю. Это классно.
Строка 2
Строка 3
Строка 4
Строка 5
Поместите курсор в первую строку и введите
/Строка
затем нажмите ENTER. Курсор переместится в строку 2. Затем введите команду n, и курсор переместится в строку 3. С каждой следующей командой n курсор будет перемещаться вниз по файлу, пока не достигнет последнего вхождения искомого фрагмента. В примерах выше мы использовали для поиска только слова и фразы, однако vi позволяет применять регулярные выражения – очень мощное средство выражения сложных шаблонов текста. Мы подробно обсудим регулярные выражения в главе 19.
Глобальный поиск и замена
Для выполнения поиска с заменой (в vi эта операция называется подстановкой) в диапазоне строк или во всем файле vi использует ex-команды. Например, заменить слово Строка словом строка во всем файле можно следующей командой:
:%s/Строка/строка/g
Давайте разобьем эту команду на элементы и рассмотрим их по отдельности (табл. 12.5).
Таблица 12.5. Пример синтаксиса команды глобального поиска с заменой
Элемент
Значение
:
Символ двоеточия начинает ex-команду
%
Определяет диапазон строк, где будет выполняться поиск. % – сокращение, означающее «от первой строки до последней». В этом примере можно было бы указать диапазон номеров строк 1,5 (потому что в нашем файле всего пять строк) или 1,$, что означает «от строки с номером 1 до последней». Если диапазон строк не указан, операция применяется только к текущей строке
s
Определяет операцию – в данном случае подстановку (substitution) или поиск с заменой
/Line/line/
Шаблон поиска и текст замены
g
Означает global (глобально), в том смысле, что подстановка выполняется для всех вхождений искомой строки в каждой строке. Если элемент g опустить, операция выполнит замену только первого вхождения искомого фрагмента в каждой строке
После выполнения поиска с заменой наш файл будет выглядеть так:
Съешь же ещё этих мягких французских булок, да выпей чаю. Это классно.
строка 2
строка 3
строка 4
строка 5
В команде подстановки можно указать, что она должна запрашивать подтверждение у пользователя перед заменой. Для этого добавьте символ c в конец команды. Например:
:%s/строка/Строка/gc
Эта команда вернет содержимое файла в прежнее состояние, но перед каждой заменой vi будет останавливаться и спрашивать подтверждение, выдавая следующее сообщение:
заменить на Строка? (y/n/a/q/l/^E/^Y)
В круглых скобках перечислены возможные варианты ответов, описание которых приводится в табл. 12.6.
Таблица 12.6. Клавиши подтверждения замены
Клавиша
Действие
y
Выполнить замену
n
Пропустить найденное вхождение
a
Выполнить замену этого и всех последующих вхождений
q или ESC
Завершить операцию
l
Выполнить замену этого вхождения и завершить операцию. Сокращенно от last (последняя)
CTRL+E, CTRL+Y
Прокрутить вниз или вверх соответственно. Эти команды удобно использовать для просмотра контекста найденного вхождения перед заменой
Редактирование нескольких файлов
Иногда бывает необходимо редактировать сразу несколько файлов. Например, может понадобиться внести изменения в файлы или скопировать содержимое из одного файла в другой. Редактор vi позволяет открыть несколько файлов, перечислив их в командной строке:
vi файл1 файл2 файл3...
Давайте закроем текущий сеанс работы vi и создадим новый файл для редактирования. Введите :wq, чтобы выйти из vi с сохранением изменений в тексте. Далее, создайте новый файл в домашнем каталоге, который мы будем использовать в наших экспериментах. Создайте файл, захватив в него вывод команды ls:
[me@linuxbox ~]$ ls -l /usr/bin > ls-output.txt
Теперь откройте в vi старый и новый файлы:
[me@linuxbox ~]$ vi foo.txt ls-output.txt
После запуска vi вы увидите на экране первый файл:
Съешь же ещё этих мягких французских булок, да выпей чаю. Это классно.
Строка 2
Строка 3
Строка 4
Строка 5
Переключение между файлами
Чтобы переключиться с одного файла на следующий, выполните ex-команду:
:n
Чтобы вернуться обратно, в предыдущий файл, выполните:
:N
Теперь мы можем переключаться между файлами, но vi проводит политику, запрещающую переключаться между файлами, если в текущем файле имеются несохраненные изменения. Чтобы заставить vi переключиться между файлами с потерей всех несохраненных изменений, добавьте в команду восклицательный знак (!).
В дополнение к методам переключения между файлами, описанным выше, vim (и некоторые версии vi) предоставляет дополнительные ex-команды, упрощающие управление множеством файлов. Например, командой :buffers можно вывести список редактируемых файлов. В этом случае список появляется в нижней части экрана:
:buffers
1 %a "foo.txt" line 1
2 "ls-output.txt" line 0
Нажмите ENTER или введите команду для продолжения
Чтобы перейти к другому буферу (файлу), введите :buffer и номер искомого буфера. Например, переключиться с буфера 1, содержащего файл foo.txt, на буфер 2, содержащий файл ls-output.txt, можно командой:
:buffer 2
после выполнения этой команды на экране появится второй файл.
Открытие дополнительных файлов для редактирования
Также существует возможность добавлять файлы в текущий сеанс редактирования. Команда :e (сокращенно от edit – редактировать) с именем файла откроет дополнительный файл. Завершите текущий сеанс редактирования и вернитесь в командную строку.
Запустите vi снова, но на этот раз с единственным файлом:
[me@linuxbox ~]$ vi foo.txt
Чтобы добавить второй файл, введите:
:e ls-output.txt
и на экране должен появиться второй файл. Первый файл останется открытым в редакторе, в чем легко убедиться:
:buffers
1 # "foo.txt" line 1
2 %a "ls-output.txt" line 0
Нажмите ENTER или введите команду для продолжения
ПРИМЕЧАНИЕ
Файлы, открытые командой :e, недоступны для команд :n и :N. Чтобы переключиться на такие файлы, используйте команду :buffer с номером буфера.
Копирование содержимого из одного файла в другой
Часто в процессе редактирования множества файлов бывает необходимо скопировать фрагмент текста из одного файла в другой. Это легко сделать с помощью обычных команд копирования и вставки, представленных выше. Посмотрим, как можно это осуществить. Сначала, в случае с использованием двух наших файлов, переключитесь на буфер 1 (foo.txt), выполнив команду:
:buffer 1
В результате на экране должно появиться следующее:
Съешь же ещё этих мягких французских булок, да выпей чаю. Это классно.
Строка 2
Строка 3
Строка 4
Строка 5
Далее переместите курсор на первую строку и введите yy, чтобы скопировать строку.
Переключитесь на второй буфер командой:
:buffer 2
Теперь на экране должен появиться некий список файлов (здесь показана только часть):
343700
–rwxr-xr-x 1 root root 31316 2011-12-05 08:58 [
–rwxr-xr-x 1 root root 8240 2011-12-09 13:39 411toppm
–rwxr-xr-x 1 root root 111276 2012-01-31 13:36 a2p
–rwxr-xr-x 1 root root 25368 2010-10-06 20:16 a52dec
–rwxr-xr-x 1 root root 11532 2011-05-04 17:43 aafire
–rwxr-xr-x 1 root root 7292 2011-05-04 17:43 aainfo
Переместите курсор на первую строку и вставьте строку, скопированную в предыдущем файле, введя команду p:
343700
Съешь же ещё этих мягких французских булок, да выпей чаю. Это классно..
–rwxr-xr-x 1 root root 31316 2011-12-05 08:58 [
–rwxr-xr-x 1 root root 8240 2011-12-09 13:39 411toppm
–rwxr-xr-x 1 root root 111276 2012-01-31 13:36 a2p
–rwxr-xr-x 1 root root 25368 2010-10-06 20:16 a52dec
–rwxr-xr-x 1 root root 11532 2011-05-04 17:43 aafire
–rwxr-xr-x 1 root root 7292 2011-05-04 17:43 aainfo
Вставка целого файла в другой файл
Кроме того, мы можем вставить файл целиком в другой файл. Для выполнения этого приема завершите сеанс vi и запустите новый, с одним файлом:
[me@linuxbox ~]$ vi ls-output.txt
На экране снова появится список файлов:
343700
–rwxr-xr-x 1 root root 31316 2011-12-05 08:58 [
–rwxr-xr-x 1 root root 8240 2011-12-09 13:39 411toppm
–rwxr-xr-x 1 root root 111276 2012-01-31 13:36 a2p
–rwxr-xr-x 1 root root 25368 2010-10-06 20:16 a52dec
–rwxr-xr-x 1 root root 11532 2011-05-04 17:43 aafire
–rwxr-xr-x 1 root root 7292 2011-05-04 17:43 aainfo
Переместите курсор в третью строку и введите следующую ex-команду:
:r foo.txt
Команда :r (сокращенно от read – читать) вставит указанный файл перед позицией курсора. Теперь экран должен выглядеть так:
343700
–rwxr-xr-x 1 root root 31316 2011-12-05 08:58 [
–rwxr-xr-x 1 root root 8240 2011-12-09 13:39 411toppm
Съешь же ещё этих мягких французских булок, да выпей чаю. Это классно.
Строка 2
Строка 3
Строка 4
Строка 5
–rwxr-xr-x 1 root root 111276 2012-01-31 13:36 a2p
–rwxr-xr-x 1 root root 25368 2010-10-06 20:16 a52dec
–rwxr-xr-x 1 root root 11532 2011-05-04 17:43 aafire
–rwxr-xr-x 1 root root 7292 2011-05-04 17:43 aainfo
Сохранение результатов работы
И здесь vi предлагает нам несколько способов сохранения отредактированных файлов. Мы уже знакомы с ex-командой :w, но существуют и другие команды, которые могут оказаться полезными.
В командном режиме можно ввести ZZ, чтобы сохранить текущий файл и выйти из vi. Аналогично, ex-команда :wq сочетает в себе команды :w и :q, первая из которых сохраняет файл, а вторая закрывает редактор.
В команде :w можно также указать имя файла. В этом случае она будет действовать как команда Save As (Сохранить как). Например, если вы редактируете foo.txt и хотите сохранить альтернативную версию с именем foo1.txt, введите следующую команду:
:w foo1.txt
ПРИМЕЧАНИЕ
Эта команда сохранит файл с новым именем, но она не изменит имя текущего редактируемого файла. Если после этого продолжить редактирование, вы будете редактировать foo.txt, а не foo1.txt.