Все о Linux. LinuxRSP.Ru

[an error occurred while processing this directive]

Cвежие новости Linux и BSD, анонсы статей и книг прямо в почтовый ящик!
Подписаться письмом


 Сегодняшние новости:

25 лет исполнилось ядру Linux

Релиз KDevelop 5.0

Oracle открывает код JDK9 для ARM

Выпущен Timewarrior 1.0.0

Релиз Android 7.0

Percona Memory Engine для MongoDB на базе WiredTiger

PowerShell открыт и доступен для Linux

Форк TrueCrypt: VeraCrypt 1.18

Релиз Snapcraft 2.14

Релиз Go 1.7

Стабильный выпуск рабочего стола Lumina

Вышла первая версия аналога OpenCV - DCV 0.1

Выпуск минималистичной программы для мониторинга jsonmon 3

В MIT разработали новый язык программирования

Первый релиз Qt5Gtk2

Godot 2.1 - новая версия открытого игрового движка

Свободная цифровая станция звукозаписи: Ardour 5.0

Обновление SkypeWeb Plugin for Pidgin

Вышла версия 3.0 Android File Transfer для Linux (и для OS X)

Программный аналог MIDI-контроллера для создания музыки: Launchpadd v1.3

Mozilla спонсирует поддержку Python 3.5 в PyPy

Ef 0.08 - программа для моделирования динамики заряженных частиц

Обновление текстового редактора TEA до версии 42.0.0

Релиз OpenOrienteering Mapper 0.6.4

Вышли Guix и GuixSD 0.11

Релиз Opera 39

Выпуск LibreOffice 5.2

В OpenSSH обнаружены и устранены некоторые уязвимости

Эмулятор FCEUX 2.2.3

Компания Билайн переходит на российскую СУБД с открытым исходным кодом Tarantool

Google

 Новые статьи :

Утилиты для восстановления потерянных данных в Linux

Лучшие файловые менеджеры для Android

20 лучших бесплатных книг о Linux

Как сгенерировать открытый/закрытый SSH-ключ в Linux

Grive - клиент Google Drive для Linux с открытым исходным кодом

Протокол IPv6: варианты подключения

Сервер из образа: DHCP + TFTP + Initrd + OpenVZ

Обзор веб-панелей управления хостингом

Приёмы работы с Vim

Nginx как Reverse Proxy для сайта, использующего SSL

Разработка модулей ядра Linux

Мониторинг нагрузки http-сервера Apache 2

Перевод комментариев к файлу конфигурации Squid

Решение проблем при использовании "1c предприятие" 8.2 в Linux

Advanced Bash-Scripting Guide Искусство программирования на языке сценариев командной оболочки







Rambler's Top100





 
 

vi. Курс молодого бойца

Автор: Владимир Царьков

статья была впервые опубликована в журнале Компьютер Price (#31 2004 г.)
статья была доработана со времени предыдущей публикации

Каждый пользователь GNU/Linux в свое время сталкивается с необходимостью отредактировать какой-нибудь файл конфигурации. Для этих задач гораздо удобнее использовать быстрый текстовый редактор, нежели чем, допустим, тяжелый и неповоротливый oowriter. В этой статье я постараюсь рассмотреть основные приемы работы с консольным текстовым редактором vi.

Для начала надо выяснить, как правильно произносить это короткое, но значимое в мире свободных операционных систем название. vi надо произносить как "vee eye", так гласит официальная документация. Разобравшись с именем нашего текстового редактора, давайте перейдем непосредственно к изучению его возможностей.

vi обладает мощным набором функций для работы с текстом, но для пользователя по-началу трудность заключается в том, что все команды надо вводить с клавиатуры. Не стоит паниковать по этому поводу, ведь для того, чтобы выполнять основные операции в vi, нужно знать не более двадцати команд. Полный же их список составляет около 150 наименований. Запомнить их все вы сможете, только если будете регулярно работать с vi.

Начнем. Запускаем консоль и говорим:

vi myfile

У vi также есть возможность загружать документ с курсором, установленным на определенной вами строке. Например:

vi +7 myfile

Если бы в myfile был текст, то после загрузки файла курсор был бы помещен в начало седьмой строки.

Итак, появился черный экран с синими значками по левому краю.

В vi редактирование текста и его сохранение проходят в разных режимах. Переключение между режимами осуществляется клавишами Insert, i, a для работы с текстом и Esc для выхода в командный режим, откуда можно сохранять и закрывать файл. В зависимости от того как вам удобнее, нажимаем либо на Insert, либо на i, либо на a, и переходим в режим ввода информации. Курсор в оригинальном vi управляется только с помощью клавиш h, j, k, l.

h на позицию влево
j на позицию вниз
k на позицию вверх
l на позицию вправо

Впрочем, в случае GNU/Linux, кнопки "вверх", "вниз", "вправо", "влево" будут работать не хуже.

Введя пару строк из серии "Hello, World!", поэкспериментируйте с курсором. Вдоволь наигравшись, перейдите в командный режим, нажав на Esc. Самое время сохранить наш myfile. Все команды для vi должны следовать после двоеточия. В появившейся внизу экрана командной строке введите :w, что означает "сохранить". Готово, файл записан на диск и мы можем спокойно выйти из vi. Для этого говорим :q. Если, внеся изменения в документ, вы передумали их сохранять, скажите :qa!. Это заставит vi завершить работу без сохранения изменений, внесенных в файл. В том случае, если вам надо отменить все правки, внесенные в документ с последнего сохранения, то скажите :e!. Ну а если просто отменить последнюю команду, то :u.

Представьте себе ситуацию: у вас не работает какое-то устройство, проконсультировавшись на одном из форумов у знающих предмет товарищей, вы решаете изменить, допустим, /etc/X11/XF86Config предложенным вам куском текста, но вводить все ручками как-то не хочется, а метод Ctrl-C/Ctrl-V (копировать/вставить) в vi не работает. Что делать? В рассматриваемом нами текстовом редакторе существует свой способ копирования и вставки информации. Заранее отмечу, что нижеописанные действия должны производиться в командном режиме. В vi существуют именованный и неименованный буфер. Ниже представлены команды, которые позволяют копировать текст в неименованный буфер.

yy копировать строку в неименованный буфер
Y копировать строку в неименованный буфер

Особенностью vi является то, что в большинстве случаев заглавная буква в команде может заменить пару строчных.

nyy копировать следующие n строк в неименованный буфер
nY копировать следующие n строк в неименованный буфер

yw копировать слово в неименованный буфер
ynw копировать n слов в неименованный буфер
nyw копировать n слов в неименованный буфер

Посмотрев на строки с командами ynw и nyw, вы можете заметить то, что vi также позволяет не придерживаться строгого порядка букв в некоторых командах.

Минус неименованного буфера в том, что его содержимое может быть повреждено другими командами. Одним словом, если вам нужно сохранить кусок текста на длительный промежуток времени - используйте именованный буфер. vi имеет 26 именованных буферов для хранения информации. Чтобы сохранить строку в именованный буфер, нужно подвести курсор к началу строки и сказать что-то наподобие "ayy, эта команда позволит сохранить строку, в начале которой находится курсор в именованном буфере a. Ниже представлены команды, которые позволяют копировать текст в именованный буфер.

"ayy копировать строку в именованный буфер a
"aY копировать строку в именованный буфер a
"byw копировать слово в именованный буфер b
"Byw добавить слово к содержимому именованного буфера b
"by5w копировать следующие пять слов в именованный буфер b

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

Мы научились копировать информацию в буфер, но как ее оттуда извлечь? Сначала давайте рассмотрим процесс вставки содержимого неименованного буфера. В командном режиме нажмите p, это позволит вставить содержимое неименованного буфера справа от курсора, если же вы нажмете P, содержимое буфера окажется слева от курсора. Ниже представлены варианты команд для вставки содержимого как именованного, так и неименованного буферов.

nP вставить n копий содержимого неименованного буфера слева от курсора
np вставить n копий содержимого именованного буфера справа от курсора
"ap вставить содержимое именованного буфера a справа от курсора
"cP вставить содержимое именованного буфера c слева от курсора
"b4P вставить четыре копии содержимого именованного буфера b слева от курсора

Теперь несколько слов о том, как "вырезать" текст. Это действие можно разделить на три шага: перемещение текста в именованный или неименованный буфер, перевод курсора в нужную позицию и непосредственная вставка содержимого именованного или неименованного буфера. В принципе, это то же самое, что и копирование, только сначала мы перемещаем текст в буфер. Ниже представлены примеры соответствующих команд.

"add удалить строку и поместить ее в именованный буфер a
"b5dd удалить пять строк и поместить в именованный буфер b
dw удалить слово и поместить его в неименованный буфер

Вставка вырезанного текста происходит также как и вставка скопированного.

Немаловажно отметить и то, что при работе в командном режиме, есть возможность удалять текст не только побуквенно. Ниже указаны некоторые из возможных команд по удалению текста.

x удалить знак под курсором
dd удалить строку
D удалить часть строки, начиная с позиции курсора
ndd удалить n строк
dG удалить все с данной позиции курсора до конца файла
dlG удалить все с данной позиции до начала файла

Поиск и замена текста являются самими сложными для понимания вопросами, так как требуют от пользователя некоторого опыта работы с регулярными выражениями. Возможно, это послужит темой для отдельной статьи. Вот лишь несколько примеров:

fm найти следующий знак m (поиск перемещается вправо)
Fq найти следующий знак q (поиск перемещается влево)
/string поиск слова string1 вправо и вниз по тексту
?string поиск слова string2 влево и вверх по тексту
:%s/^..//g удаляет по два символа в начале каждой строки документа.

Надеюсь, мне удалось хоть немного приоткрыть завесу тайны, окутавшую отличный консольный текстовый редактор vi.

С вопросами обращайтесь по адресу: lipetsk-gnu-lug at bk period ru.

Copyright (c) 2006 Vladimir B. Tsarkov
Verbatim copying and distribution of this entire article are permitted worldwide, without royalty, in any medium, provided this notice, and the copyright notice, are preserved.

Опубликовано на http://www.linuxrsp.ru с разрешения автора.


      

Связь | О проекте LinuxRSP | Реклама | О Linux
© 1999-2024 LinuxRSP