Редактирование двоичных файлов 321ния. Например, цифров ые кам ер ы част о хранят изоб ражения в форматеJPEG – сжатом двоичн ом файл е для цифровых фотограф ий. Хоть онии двоичн ые, но содержат хор ош о опр ед еленн ые разделы (или блок и), гдехранитс я стандартная инф орм ация (файлы содерж ат их, если соответствую т специф икац ии). Цифр овые изображен ия в форм ат е JPEG сод ержат мета-инф орм ац ию об изображ ен ии (врем я, разр ешен ие, нас тройкикам еры, дата и проч ее) в зар езерв ир ов анн ых блоках, отд еленных отсобственно сжатых данн ых изоб раж ения. Практ ич еским примен ение мфункции редактир ования двоичн ых файлов в Vim мож ет стать исправление поля год (year) в блок е «создан о» в катал ог е снимк ов JPEG дляизменения пол я «дата созд ан ия».На рис. 15.1 пок аз ан сеа нс ред актиров ания файла JPEG. Обрат ите вниман ие, как расп ол ож ен курс ор в пол е даты. Измен ив эти пол я, можновручн ую ред актировать информацию об изображ ении.Рис. 15.1. Редактиров ан ие двои чног о файл а JPEGДля опытных польз ов ат ел ей, знак ом ых с конк ретным двоичн ым формат ом, Vim может стать чрезв ыч айн о полезным для неп осредс тв енног оисп равл ен ия, иначе придетс я обр ащаться к скучн ой повтор яющ ейс яработе в других программах.Сущ еств уе т два спос об а отред актиров ать двои чный файл. Можн о в командной строк е Vim устан овить опц ию binary: set binaryИли запустить Vim с опц ие й -b.Чтобы обл егчить двоичн ое редакт ир ован ие и защ ит ить файл от порч исо стор он ы Vim, программа делает след ующ ее:• Опц ии textwidth и wrapmargin уст ан авл ив аю тс я равным и 0. Это пре дотвращает вставку в файл побочн ых симв олов нов ой строк и.• Опц ии modeline и expandtab сбрасыв аю тс я (nomodeline и noexpandtab). Это предотвращае т разв орач ив ание таб ул яций в проб ел ы shiftwidth
322 Глава 15. Другие полезности в Vim и инт ерпретир ование команд в строк е modeline1, что потенциально мож ет установить опции, прив од ящ ие к нео жиданн ым и ненужн ым побочн ым эффектам. В двоичном реж име при пер еход е от окна к окну или от буф ера к бу феру будьт е вним ат ельны. Vim используе т события вход а и вых ода для задан ия и уст ановк и опций и мож ет ненар оком сбросить нек о тор ые из только что перечисленных защ итных устан ов ок. При ре дакт ир ован ии двои чн ых файлов мы рек ом енд уем пользоватьс я однооконн ым, одн обуферным реж им ом.Диграфы: не-ASCII символы Полаг аете, автор «Мессии» – George Frideric Händel (Гео рг Фридр их Гендель), а не George Frideric Handel? Считает е, что ваше résumé пере дае т больше, чем resume? Используйте диграф ы в Vim для ввода спец и альн ых симв олов. Даж е в текс те на английс ком язык е иног да встреч аю тся спец иа льные симв ол ы, особенно в ссылках на глоб ализ ов анн ый мир. Текстов ые фай лы на других языках треб ую т куч у спец иа льных симв олов. Vim поз вол яе т ввести специальн ый симв ол нес кольким и спос обами, два из кот ор ых интуит ивн ы и просты. Оба опираютс я на опр едел ен ие диграф а чер ез префикс (CTRL-K) или исп ольз ую т клавиш у BS (Back space) между двумя симв олами клав иат ур ы. (Друг ие методы больше подх од ят при вводе симв олов по их «сыр ым» числовым значения м, за данн ым в вид е дес ят ичн ого, шестн ад цат ер ичног о или восьмеричн ого числа. Эти мощные метод ы сам и по себе не обеспечив аю т прос той мне мон ик и диг раф ов.) Термин диграф традиц ио нн о описыв ае т двухб ук венн ое соч ет ан ие, представл яющ ее един ый фон ет ич еский звук, нап ример ph в «di graph» или «phonetic». Vim перен ял понятие «двухбуквенн ог о» со четания для опис ан ия механизм а ввод а символ ов со спец иа льн ыми характерис тикам и, как правило, ударен ие м и друг ими знак ам и, на прим ер умл яутом в ä. Эти специальные знак и прав ильно назыв ают ся диакритикой, или диа крит ическими знакам и. Друг им и слова ми, Vim использует диграф ы для созд ан ия диа кр итики. Мы рад ы, что смогли это объя сн ить. Перв ый мет од ввод а диакритик и – это трехб уквенное соч етание, содер жащ ее CTRL-K, базовый симв ол и знак препин ания, указ ывающий на 1 Особым обр азом отф орм ат ир ов анн ый комм ент ар ий, вставляем ый в ред ак тир уем ый файл, чтобы определить специф ичные для нег о настройки (вели чину отс туп а и т. п.). – Прим. науч. ред.
Диграфы: не-ASCII символы 323акцент или знак, котор ый нужн о поставить. Наприм ер, чтоб ы набрать«c» с сед илем (ç), введ ит е CTRL-K c,. Для созд ан ия «a» с грависом (à)введит е CTRL-K a!.Гречес кие бук в ы можно набрать по соотв етс тв ующ ей лат инской бук ве,после которой над о ввес ти звездочку (наприм ер, введите CTRL-K p* длястрочной ). Русс кие бук вы можн о созд ать по соответств ующей лат инской, пос ле которой следует пос тав ить знак равно1 или, в нек от орыхслучаях, знак процента. Используйт е CTRL-K ?I (убед итесь, что I прописн ая) для ввод а пер еверн утог о знака воп рос а (¿) и CTRL-K ss, чтоб ыввес ти немецкий эсц ет (ß).Чтобы использ ов ать второй мет од Vim, уст ан ов ите опцию digraph: set digraphТеперь создайте спец иа льный симв ол, введ я первый симв ол двухс имвольной комб инац ии, зат ем backspace (BS), а пос ле этого – знак препинания, задающий знак. Так, для ç введите cBS,, а для à – aBS!.Уст ан овка опции digraph не мешает вам вводить диграфы метод омCTRL-K. Пол аг атьс я только на мет од CTRL-K стои т, если ваши навыкинабор а не особо выдающ иеся. Инач е вы может е обн ар уж ить, что непреднамеренн о ввод ит е диг рафы из-за исп ользован ия Backspace при исправлении ошибок.Набер ит е ком анду :digraph, чтоб ы показать все уст ан овки по умолчанию; более подр обное описание можно пол уч ить с помощью :help digraph-table. Рисунок 15.2 пок аз ывает частичный список от командыdigraph.Рис. 15.2. Диг рафы в Vim1 Раз ум еетс я, как русс коговорящий пользоват ель, вы можете просто пере ключ ить раскладку клав иатур ы. – Прим. науч. ред.
324 Глава 15. Другие полезности в Vim В выв оде каждый диг раф digraph предс тавл ен тремя столбц ами. Дис плей нем ного «комкается», пос кольку Vim «втискив ает» стольк о трех столбцовых комб ин ац ий в каждой строке, скольк о позволит экран. Для кажд ой из групп перв ый столбец показывае т двухсимв ольн ую комб и нацию диграфа, второй – сам диграф, а третий – дес ятичн ое значение Unicode для диграф а. Для удобс тв а в табл. 15.1 прив ед ены знаки препин ан ия, использ уемые в кач еств е последнег о симв ол а в пос ледов ат ельн ости, для наиб олее употреб ит ельн ых удар ен ий и диа критичес ких знаков. Таблиц а 15.1. Как вводить акценты и другие знаки Знак Симв ол, ввод имый как часть диграф а Акут (fiancé) Апос троф (') Знак кратк ос ти (publica˘) Лев ая скобк а ( Гач ек (Dubcˇek) Знак меньш е (<) Седиль (français) Зап ят ая (,) Цирк умфлекс (portugus) Знак больш е (>) Гравис (voilà) Воск лиц ательный знак (!) Макр он (%tm%) Мин ус (-) Переч еркивание (Søren) Косая черта (/) Тильда (señor) Вопросительн ый знак (?) Умляут или диерез ис (Noël) Двоет очие (:)Редактирование файлов из других мест Благ од ар я гладкой инт еграции сетевых прот околов Vim позвол яе т ре дакт ировать файл ы на удал енных машин ах, как есл и бы они был и на локальном комп ью тер е! Есл и вы прос то укаж ете URL вместо имени файл а, Vim открое т его в окн е и зап иш ет изм енения на удаленную сис тем у (конечно, при налич ии прав доступ а). Нап ример, след ующ ая ко манд а редактирует файл .vimrc, прин адлежащий пользов ат ел ю ehannah на сист еме mozart. Удал енная маш ин а пред ост авляет безо пасный дос туп по проток олу SSH на порту 122 (это нес тандартный порт, что дае т еще больш е защит ы из-за неи звестности): $ vim scp://ehannah@mozart:122//home/ehannah/.vimrc Поскольку мы ред акт ир уем файл в дом ашн ем каталог е ehannah на уда ленной машин е, то мож ем сок ратить URL, исп ольз уя прос тое имя фай ла. Оно рассматр ивае тся как путь по отн ош ен ию к дом ашнем у кат ало гу польз ов ател я на удал енной сист еме: $ vim scp://ehannah@mozart:122/.vimrc Рассмотрим URL отд ельно и изучим запись URL для конкретн ого окр у жен ия:
Редактирование файлов из других мест 325scp: Первая часть, до двоет оч ия, представл яет трансп ортный протокол. В этом пример е им являе тся scp – прот ок ол коп иров ан ия файлов, ос нованный на протоколе SSH (Secure Shell). Последующ ее двоеточ ие (:) обязательно.// Предвар яе т инф орм ацию о хосте, котор ая в большинс тве транспорт ных проток олов имее т вид [user@]hostname[:port].ehannah@ Эта часть необязательна. Для безопасных прот ок олов, так их как scp, опр ед ел яет, каког о польз оват еля зарег ис тр ир ов ать как удал ен ног о польз ов ател я. Если ее опустить, по умолчанию буд ет исп ользо ватьс я имя пользователя на лок альн ой маш ин е. На запрос ввести пар оль след уе т ввести пароль пользоват ел я на удаленной маш ин е.mozart Это символ ичес кое имя удал енной маш ин ы, котор ое можн о зад ать и в цифр ов ом вид е, например 192.168.1.106.:122 Эта нео бяз ательн ая часть зад ает порт, на котором обслуж ив ается проток ол. Номер порт а отделяе тс я от предш ес твующ его имен и хоста двоеточ ие м. Все станд артные протокол ы использ ую т вполн е опр ед е ленные порты, так что обычно этот элемент URL можно опуст ить. В наш ем примере порт 122 не явл яе тс я станд артным для проток ола scp. Таким обр аз ом, поскольку адм ин ис тратор сист ем ы mozart раз местил серв ис на порт у 122, такое указ ан ие обяз ательно.//home/ehannah/.vimrc Это файл на удаленной маш ин е, котор ый мы хот им отр ед акт иро вать. Начин аетс я с двойн ой кос ой черты, пос кольк у мы задае м абсо лютный путь. Отн ос ит ельн ый путь или просто имя файл а треб ует тольк о одинарн ой косой черт ы, отд еляющ ей имя файла от имени хост а. Отн осит ельный путь беретс я отн ос ит ельн о домашнего ката лога пользов ателя, под кот орым был выполн ен вход в сист ему. Так, в наш ем пример е относит ельн ый путь будет братьс я отн ос ительно дом ашн ег о катал ог а ehannah, наприм ер /home/ehannah.Ниж е привед ен част ичный спис ок поддерж иваем ых проток ол ов:• ftp: и sftp: (обычн ый FTP и безопасный FTP).• scp: (безо пасн ое удал енное коп ирован ие по SSH).• http: (перед ача файл а по стандартному проток ол у браузер а).• dav: (сравнит ельно нов ый, но поп улярный открытый станд арт для перед ач и через веб).• rcp: (удал енное коп ир ование).
326 Глава 15. Другие полезности в Vim Вышесказ анн ог о дост ат очно для получен ия разрешения на удаленное ред актиров ание, однак о сам проц есс может быть менее проз рачным, чем ред актир ование локальн ого файл а. То есть из-за промеж ут очн ог о треб ов ан ия перем ещ ать данн ые с удал енног о хоста вас мог ут поп рос ить ввести пар оль во время работ ы. Это спос обн о утомить, особенно если вы прив ыкли периодич ески зап ис ыв ать файл на диск при ред актир ова нии, поскольк у каждое из так их «сохран ений» прерывае тся вводом па роля для завершен ия передач и. Все трансп ортные протоколы из выш еп риведенног о спис ка позволяю т нас траивать служб у так, чтобы доступ был беспарольным, однак о дета ли этого проц есса буд ут отл ич атьс я. За подр обн остям и и настройкам и кажд ог о конк ретног о проток ола обр ат итесь к док умент ации службы.Переход и смена каталогов Если вы долго польз ует есь Vim, то, возможно, уже обн аруж или, что он позволяет прос матр ив ать кат алог и и пер ем ещ атьс я по ним с исп ользо ванием клав иш, прим ен яемых в файл ах. Расс мотр им кат ал ог ex-050325, содержащий множество файл ов .c (это каталог с комп ил ир уемыми исходник ами для оригин альн ог о редакт о ра vi). Отредактир уйте ex-050325 с помощ ью: $ vim ex-050325 На рис. 15.3 предс тавл ен а часть снимк а экр ана, пок азывающ ая при мерн о то, что вы может е увид еть. Vim отоб раж ает информ ац ию трех тип ов: вводн ые комм ент арии (перед ним и стоят знак и равенс тва), кат ал ог и (после имен и каталога стои т ко сая черт а) и файл ы. Кажд ый каталог или файл выв од ится в своей строке. Есть мног о спос обов использ ов ать эту особ енн ость, одн ако при помощ и станд артных команд перемещения Vim (например, w для перех ода на следующ ее слов о, j или стрелк и вниз для перех од а на строку ниж е и т. д.) и клик ов мышью по элементам можн о дост ат очно быс тр о и инт уитивн о дост ичь высок ой продуктивн ости при мин им альных усил ия х. Рассмотр им некотор ые особ еннос ти реж има катал ог ов: • Ког да курс ор стоит на имени каталога, нажат ие ENTER перемещае т внутрь этог о катал ог а. • Ког да курсор стои т на имени файла, нажат ие ENTER открывает этот файл для ред актир ов ан ия. Есл и нужн о остав ить окно с кат алог ам и для дальнейш ей работы с файлами, наж ат ием o отк ройте файл под курс ор ом. При этом Vim разд ел ит окно, а файл буд ет редактиров аться в созд анном нов ом ок не (то же отн оситс я к пер ех од у в друг ой катал ог: если курс ор стоял на имен и кат алога, Vim разд ел яе т окно и «редактир уе т» кат ал ог, в который вы переш ли, в нов ом окн е).
Переход и смена каталогов 327Рис. 15.3. «Ред актир ование» каталога ex-050325 в VimРис. 15.4. Приг лаш ен ие при переименов ании в реж име«редакт ир ов ания кат алогов»• Можно удалять и пер еименовывать файлы и кат алог и. Пер еимено вание осуществ л яется наж ат ие м проп исн ой R. Возможн о, это выгля дит несколько странн о, но Vim созд ае т приглаш ен ие ком андн ой строки, где и происх од ит переимен ован ие. Это выг лядит примерно как на рис. 15.4. Для заверш ен ия процесса отр ед актир уйте второй аргум ент команд ной строки. Удал ение файла раб от ае т аналогичн о: поместит е курсор над имен ем удал яемого файла и нажмите прописную D. Vim покаж ет диалог и по прос ит подт вердить удал ен ие файл а. Как и пер еи мен ован ие, проц есс происход ит в области ком андной строк и.• Еще одн о инт ересн ое преимущес тво ред акт иров ания каталогов – быс тр ый дост уп к файл ам по функции поиск а. Пусть нам нужно от редакт иров ать файл expreserve.c из упом янутого выше кат ал ога ex-050325. Чтоб ы быс тро перейти и открыть этот файл, найд ит е его по имени файл а или его част и: /expreserve.c а пос ле установк и курс ор а на имя этог о файл а наж мите ENTER или o.
328 Глава 15. Другие полезности в Vim Если вы поч ит ает е онлайн-справку по ред акт ир ован ию кат алог ов, то увидите, что Vim описывает эту функцию как часть средств для ред акт ир ован ия файл ов чер ез сет ев ые прот окол ы, рассмотренн ые в пред ыдущ ем разд еле книги. Мы вын ес ли изменение каталогов в отдельный раздел, поскольк у это важная тема, а в большом коли честв е деталей сет евых прот ок ол ов легк о запут аться.Резервные копии в Vim Vim защ ищ ает от неп реднамер енн ой потер и данн ых, позволяя созда вать рез ервные копии ред акт ир уемых файлов. Если во время правк и все пошло не так, то они пригодятся для восс тан овлен ия предыдущей верс ии файл а. Рез ервные коп ии управл яю тс я заданием двух опц ий: backup и write backup. Место и врем я созд ания резервн ых копий опред ел яе тс я чет ырь мя опциям и: backupskip, backupcopy, backupdir и backupext. Есл и обе опции – backup и writebackup – выключ ены (установлены noback up и nowritebackup), Vim не делает рез ервн ых копий во время сеа нс а ре дактиров ания. Если backup включена, программ а удал яет старые ре зервные копии и создает коп ию для тек ущег о файла. Если backup вы ключ ена, но включ ена writebackup, Vim создает резервн ую копию на врем я сеа нс а редактир ован ия и удал яет ее после окончан ия работ ы. Backupdir – это разд еленн ый запят ыми спис ок катал ог ов, внутри кот о рых Vim создает рез ервные копии. Нап ример, если вы хотите, чтобы они всег да создавались в сист емном временном кат алог е, установит е back updir равн ым \"C:\TEMP\" для Windows или \"/tmp\" для UNIX и Linux. Есл и необходим о, чтобы резервная коп ия всегда создав алась в тек у щем катал оге, в качеств е каталог а рез ервных коп ий можно пропи сать «.» (точку). Есть вар иа нт, когда копию сначала пыт аю тс я соз дать в скрыт ом подкат ал ог е, если так ов ой сущ еств ует, а зат ем в те кущ ем каталог е. Это можн о осущес тв ить, задав значен ие backupdir равн ым чему-то врод е \"./.mybackups,.\" (пос ледн яя точк а озн ач ае т те кущий кат алог для файл а). Это очень гибкая опция, позвол яющ ая задав ать нескольк о страт егий опр едел ения местопол ож ен ий рез ерв ной копии. Если вы хот ит е созд ав ать резервные коп ии не для всех файл ов во врем я работы, исп ольз уйте опцию backupskip, в которой опред елите спис ок шабл онов, разд елив их запят ыми. Vim не буд ет создавать резервные ко пии для файлов, удовл ет воряющих этим шабл онам. Наприм ер, вам не нужно создав ать рез ервные копии файл ов, редакт ируем ых в каталогах /tmp или /var/tmp. Зап рет нак лад ыв аетс я путем установк и значен ия \"/tmp/*,/var/tmp/*\" в backupskip.
Создание HTML из текста 329 По умолч ан ию Vim создает файл резервн ой копии с имен ем оригинал а, доб авляя ~ (тильд у) в конц е. Это вполн е безопасн ый суфф икс, пос коль ку имен а файл ов с этим симв ол ом на конц е встречаю тся редко. Опц ия backupext поз вол яет изменить эту доб авк у по свое му усм отрен ию. На пример, если вы хот ит е, чтоб ы резервн ые коп ии имел и расш ирен ие .bu, устан ов ит е backupext равн ым \".bu\". Након ец, опц ия backupcopy опр едел яе т, как созд ае тс я рез ервная копия. Мы рекоменд уем уст ановить ее равн ой \"auto\", чтобы Vim сам выч ислял наил учш ий мет од созд ан ия коп ии.Создание HTML из текста У вас возник ал а потребность предс тавлять свой код или текст друг им люд ям? Вы когда-ниб удь пытал ись изуч ить код, исп ольз уя чужую кон фигурацию Vim, с кот орой не смогл и разоб ратьс я? Поп робуйт е преоб раз овать ваш текст или код в HTML и просмотр еть его в браузер е. Vim предлагае т три способ а генер ац ии HTML из имеющ егос я текс та. Все они создаю т новый буфер с именем, анал ог ичным оригин альном у файлу, но с расш ирением .html. Vim раздел яет окн о текущ его сеанс а и показывает HTML-верс ию файла в нов ом окн е. gvim «Convert to HTML» Это сам ый друж ественный метод, встроенный в графичес кий ред ак тор gvim (про кот ор ый рассказ ывал ось в глав е 13). Откройте в gvim ме ню Syntax и выберите «Convert to HTML». 2html.vim, скрипт Это скрипт, лежащий в основ е пункт а мен ю «Convert to HTML», то есть описанн ого выш е способ а. Он вызывается команд ой: :runtime!syntax/2html.vim Скрипт не поним ает диапаз онов: обраб атывае тс я весь буф ер. TOhtml, ком анда Это более гибкая ком анда по сравн ению со скриптом 2html.vim, по скольк у здесь можно задавать точный диап азон строк, которые над о прео бр азовать. Наприм ер, чтобы конверт ир ов ать строк и с 25 по 44 из буф ера, введите: :25,44TOhtml Преимущ еством использ ов ан ия gvim при прео бразов ании в HTML явля етс я то, что GUI поз вол яет точн о расп ознать цвет а и задать прав ильн ые дир ектив ы HTML. Эти метод ы работ аю т и в нег рафичес ком конт екс те, но результ ат ы не буд ут нас тольк о же точными и могут не прин ести польз ы.
330 Глава 15. Другие полезности в Vim Вы сам и решает е, что делать с новым файлом. Vim не будет сох ра нять его сам, а просто создаст буфер. Мы рек омендуем придерж и ватьс я опр еделенн ой политики для сохранен ия и синх рон из ац ии HTML-версий ваш их текстов ых файлов. Нап ример, для созд ания и сохран ен ия файл ов HTML можн о исп ольз овать авт окоманды. Сох раненн ый файл HTML можно просмотр еть в люб ом брауз ере. Неко торые из вас могут быть не знак ом ы со спос об ами открыт ия файлов в браузер е на локальн ых сист ем ах. Это довольно легк о: теорет ичес ки во всех брауз ер ах есть пункт меню Open File в мен ю File, после чег о появ ляе тся диалог, в кот ором можно перейти в кат алог с HTML-файлом. Ес ли вы планир уете вып олнять эти действ ия регул ярн о, рек ом енд уем создать наб ор зак лад ок на свои файлы.В чем разница? Различ ия в разных верс иях одн ого файл а част о трудн о обн ар уж ить, по этом у утил ита для прос мотр а всех отличий одним разом мож ет сэконо мить час ы работы. Изв естн ая команд а UNIX diff интегр ир ована в Vim посредств ом изощренного инт ерф ейса виз уал из ации, который выз ыва ется командой vimdiff. Для вызов а этой функц ии есть два экв ив ал ентн ых способ а: отд ельн ая команд а и опция для Vim: $ vimdiff old_file new_file $ vim -d old_file new_file Как прав ило, первый сравнив аем ый файл представляет стар ую вер сию, а втор ой – бол ее новую, но это тольк о соглашение. На самом деле, всегда можно пом енять пор яд ок. На рис. 15.5 показ ан пример вывод а ком анды vimdiff. Из-за огр анич ен ности места мы уменьш или ширину и выключили опц ию wrap, чтоб ы прои ллюс трир овать отл ич ия. Хот я рисун ок не пер едает всег о эффекта виз уализ ац ии содержим ог о (в частности, из-за представл ения цвет ов в отт енк ах серог о), на нем по каз ан ы ключев ые дейс тв ия: • В строке 4 слева вы может е замет ить темный блок, котор ого нет справ а. Это подс веч енное слов о, указ ывающее на отличия в строк ах. Анал ог ичн о в строке 32 справ а сод ерж ится подсвеченное слово, ко торое слева отсутс тв уе т. • На строк е 11 с обеих стор он Vim создал 15-строчную свертк у. Эти 15 строк один ак овы в обои х файл ах. Vim сверн ул их, чтобы на экра не был о как можн о больше информ ац ии о «разн иц ах».
В чем разница? 331• Строки 41–42 слев а подс вечен ы, тогда как на соо тв етств ующих по зиц иях справ а стоят мин ус ы (-), котор ые указываю т, что справ а этих строк нет. Нач ин ая с этого места нумерация строк отл ич ае тся, поскольк у правая часть на две строк и меньш е. Тем не мен ее соотв ет ств ующие друг другу строки из обои х файлов по-прежн ему выровне ны по гор изонт али.Функц ия vimdiff имеется во всех установк ах Vim в UNIX-системах, поскольку diff входит в стандарт UNIX. Устан овк и редактора не подUNIX должны поставл яться со своей верс ие й diff. Vim допускает зам ену команд ы diff на друг ие, есл и они тоже выр абат ываю т станд артныйвывод diff.Перем енная diffexpr опр едел яе т выраж ен ие, зам ен яющ ее собой стандартную команду, исп ольз уем ую vimdiff для выч исл ения разл ичий между двумя файлам и. Обычно это выр ажение реализ уется через скрипт,раб от ающ ий со след ующ им и пер еменным и:v:fname_in Перв ый сравн ив аем ый файл.v:fname_new Второй сравнив аемый файл.v:fname_out Файл для содержим ог о выв од а diff.Рис. 15.5. Рез ульт аты vimdiff
332 Глава 15. Другие полезности в VimОтмена отмен Кром е отмен ы нео гр ан ич енного кол ичеств а правок Vim имеет интерес ную особенность, называем ую ветвл ением отм ен. Чтобы использ ов ать эту возможность, нужн о снач ала реш ить, каким кол ич еством отмен вы хот ит е управлять. Опц ия undolevels опр ед ел яе т число отм еняемых изм ен ен ий, кот орые можно дел ать во время сеа нс а раб оты. По умолч ан ию знач ен ие равн о 1 000. Скорее всего, этого более чем дост ат очно для большинс тв а пользов ат ел ей. Чтоб ы обесп ечить со вместим ость с vi, устан овите undolevels равн ым 0. :set undolevels=0 По сути, в vi команд а отм ен ы u перек лючает между текущ им состоян и ем файла и его сам ой последн ей версией. Перв ая отмена перек лючае т в состоян ие пер ед последней правкой, а следующая отмена восс тан ав лив ает отм ененное сос тояние. Vim вед ет себ я сов сем иначе, и, следова тельн о, эти команд ы работ аю т по-разном у. Вместо переключения между состоян иями с пос ледн ей правк ой пов тор ный выз ов отмен ы в Vim откатыв ает сос тоян ие файл а наз ад к наиб ол ее ранним сос тоян ия м до тог о, кот ор ое задае т опция undolevels. Посколь ку ком анда отм ен ы u перемещае т только назад, нам пот ребуе тс я ком ан да для возв рат а и «повторного примен ения» изм енений. Vim выполняе т это действ ие ком андой :redo или сочетан ие м клав иш CTRL-R. Комби нац ия CTRL-R мож ет предваряться чис лов ым арг ументом, чтоб ы вос стан овить несколько изм ен ений сраз у. При пер еход е впер ед и наз ад по изменения м командами возв рата (CTRL-R) и отм ены (u) Vim подд ержив ает карту сос тояний файл а и зна ет, ког да прои зошл а последн яя возможная отмена. Когда все отм ены ис черп аны, прог рамма мен яе т сос тояние «измененный» у файл а, что по звол ит выйти без дополнит ельн ог о суфф икс а ! (восклиц ательного зна ка). Хотя польз ов ат ел ю от этого мало выг од ы, данн ый факт можн о ис пользов ать при нап исании скриптов, где модифицир ов анн ое сос тоян ие файла явл яе тся важным. Функц ий отмен ы и возв рата буд ет достаточно для работы большинства пользов ателей. Однак о рассмотр им бол ее сложную ситуац ию. Что есл и вы сдел ал и семь исп равлений в файле, а отменил и только три? Пока все хор ош о, нет нич его нео бычн ого. А теп ерь представим, что, отменив три из семи действ ий, вы прод ел али изм енен ие, отличн ое от того, что стои т след ующим в колл екц ии дейс твий Vim. Программ а опр едел яет это дей ствие как точк у изменения истор ии в виде нов ой ветк и, в кот орой про исход ят свои события. По этом у пути вы тоже мож ете пер ем ещ атьс я вперед и наз ад по хрон ол ог ии соб ытий, а на точке ветвления – пер ейт и впер ед по любом у из путей сохран енн ых измен ений.
На чем я остановился? 333 Для полн ого озн ак омления с пер емещение м по изм енен иям как по де рев у исп ользуйт е команд у справк и Vim: :help usr_32.txtНа чем я остановился? Большинство редакторов нач ин ают сеанс раб оты на строк е 1, столбец 1. То есть каждый раз при зап уске программы загружае тс я файл, и ре дактиров ан ие начинается с перв ой строк и. Есл и вы долго правит е текст, двигая сь по нему впер ед, то будет удобн ее, если нов ый сеа нс редакти ров ан ия начнется с места окончан ия пред ыдущ его сеанса. Vim поз воля ет это сдел ать. Есть два спос оба сох ранять информ ацию о сеанс е редактир ов ания для будущих цел ей: опция viminfo и ком анд а mksession.Опция viminfo Vim исп ользуе т опц ию viminfo, чтоб ы опр едел ить, что, как и где сохра нять в виде инф орм ации о сеанс е. Она представляе т собой строку с раз деленным и зап ятыми парам етрами, которые соо бщают Vim, как ую ин формацию сох ран ять и где это дел ать. Нек от орые из под опц ий viminfo определяю тся следующим образом: <n Указывае т Vim сох ран ять строк и для кажд ог о рег ис тр а, вплоть до макс имум а из n строк. Если этот параметр не задан, будут сох ранен ы все строк и. Хот я на перв ый взгляд это мож ет показатьс я естественным жел ан ием, под у майт е о последс твиях при редактир овании больш их файлов и боль шом колич ес тв е исправл ен ий. Наприм ер, есл и вы обычно ред акти рует е файл из 10 000 строк, удаляете все строк и (возможн о, чтобы восп репятс тв ов ать его быстр ому росту, выз ванн ому другой прог рам мой), а затем сохран яет е файл, то все 10 000 строк регис тр а будут со хранены в файл е viminfo. Есл и это прод ел ываетс я мног ок ратно для нескольких файлов, то размер viminfo сильно увелич ится. Если вы зам ет ите долгие задержки при зап уске даж е неб ольш их файл ов в Vim, то, возм ожно, это связан о с нео бх одим ос тью обр аботать файл viminfo при старт е редакт ора. Мы рек ом ендуем указать как ой-нибудь раз умн ый, но пригодн ый предел. Авт ор этих строк используе т 50. /n Колич ество сохраняемых пункт ов в ист ор ии пои ск а. Есл и параметр не задан, Vim используе т знач ение опц ии history.
334 Глава 15. Другие полезности в Vim :n Максим альн ое количество сох ран яем ых ком анд из истории команд ной строки. Если пар аметр не зад ан, Vim исп ользует значение опц ии history. 'n Макс им альн ое колич еств о файлов, для которых Vim сохран яе т ин формацию. Если вы задаете опц ию viminfo, этот пар ам етр является обяз ат ельн ым. В файле viminfo сохраняе тс я след ующее: • Истор ия командн ой строк и • Ист ор ия строк пои ск а • Ист ория строк ввода1 • Рег истр ы • Метк и в файл ах (то есть сохран яютс я метк и, созданн ые команд ой mx, пос ле чего при пов торном редакт иров ан ии файла на них можно будет перейт и с помощью 'x) • Пос ледний пои ск и шабл оны подс тановк и • Спис ок буферов • Глоб альн ые пер ем енн ые Эта опц ия очень удобн а для поддержания непрерывности в раб от е. На пример, при редакт ир ован ии большог о файла, в котор ом делаются из менения по шабл он у, сох раняе тся шаблон пои ск а и полож ение курсор а в файле. Чтобы продолжить ред акт ир ов ан ие в нов ом сеанс е, нужн о лишь ввести n для пер ех ода на след ующее вхождение шаблона пои ска.Команда mksession Команд ой mksession Vim сохраняет всю информ ацию, касающуюся ре дакт ирования в данн ом сеансе работы. Опция sessionoptions содерж ит строку с зап ятыми в кач ес тв е разд елит елей, в котор ой опр еделяютс я комп оненты сеанса для сох ранен ия. Этот спос об сохранен ия информа ции о сеа нсе более полн ый, но и более специф ичный, неж ел и viminfo. Он зат рагив ает файлы, буф ер ы, окна и так далее, поэ тому mksession со хранит информац ию с возм ожностью полного восс тан овления сеанс а, включ ая все ред актиров авшиеся файл ы и все уст ан овк и всех опций, даже размеры окон. В этом и состоит отл ич ие от опц ии viminfo, которая сохран яе т информ ацию по одному файлу. Чтобы сохранить сеанс так им способ ом, введите: :mksession [filename] 1 Строк и, введ енн ые в отв ет на вызов функц ии input(); подробн ости ищите в онл айн-справк е. – Прим. нау ч. ред.
На чем я остановился? 335где filename задает файл, в кот ор ый буд ет импортир ов ана информац ияо сеа нс е. Vim создает файл скрипт а, восс тан авлив ающ ий сеа нс редактиров ан ия при его последующем выполн ении командой source (есл иимя файл а не указ ан о, то по умолчанию прис ваивае тс я Session.vim). Таким образ ом, если вы сох раняете сеа нс командой: :mksession mysession.vimто впос ледс тв ии сможет е зан ов о восс озд ать его, выполн ив: :source mysession.vimНиж е мы переч ислим комп он енты, кот ор ые можно сох ран ять из сеа нс ас соответств ующ им параметром для опц ии sessionoptions:blank Пуст ые окна.buffers Скрыт ые и выг руж енные буфер ы.curdir Текущий катал ог.folds Созд анн ые вручн ую и отк рыт ые/закрыт ые свертк и, а такж е лок аль ные опц ии сверток. Нет нео бходим ос ти сохран ять друг ие свертки, кроме созданных вручную. Свертки, созданные автомат ически, буд ут автом атич ес ки воссозд ан ы!globals Глобальные перем енн ые, которые нач ин аютс я с прописн ой бук вы и сод ержат по крайней мер е одн у строчн ую.help Окн о справк и.localoptions Опц ии, опр еделенные лок ально для окн а.options Опц ии, зад анн ые с помощ ью :set.resize Размер окна Vim.sesdir Катал ог, где леж ит файл сеа нс а.slash Обратн ые кос ые черты в файле, зам ененные на прям ые кос ые черты.
336 Глава 15. Другие полезности в Vim tabpages Все страниц ы вклад ок. Если это не определ ить спец иальн о в строк е sessionoptions, то буд ет сохранен сеанс только для тек ущ ей вкладк и. В рез ульт ате можно оп редел ять сеа нс для одной вкладк и либ о глобально для всех вкладок. unix Формат конц а строк и UNIX. winpos Пол ожение окн а Vim на экране. winsize Разм ер окон буф ер ов на экр ан е. Нап ример, есл и вы хотите сох ран ить сеанс, чтобы удержать всю инф ор мац ию о всех буфер ах, всех вкладк ах, глобальн ых пер еменных, а так же о разм ере и пол ожен ии окна, нео бход имо задать опц ию sessionoptions след ующим образ ом: :set sessionoptions=buffers,folds,globals,options,resize,winposНа какой я строке? Vim доп ускае т строки почти неогр ан ич енной длины. Их можно либ о пер ен ос ить на нес колько строк экран а, чтобы вид еть без гор изонт аль ной прокрутк и, либ о отоб ражать на экран е только нач ал о кажд ой стро ки, позвол яя ей уйт и вправ о за предел ы экран а. Есл и вы предпоч итает е, чтобы одной строк е экрана соотв етс тв овала од на строк а текс та, отк люч ит е опц ию wrap: set nowrap При nowrap Vim отображает столько симв олов в строке, скольк о позво ляет ширин а экран а. Предс тавьте, что экран – это смотровое отв ерс тие или окн о, через котор ое расс матрив аетс я длинная строк а. Наприм ер, строка из 100 симв ол ов сод ержит на 20 символов больше, чем может вместить экран, состоящ ий из 80 столбцов. В зав ис им ости от того, ка кой символ стоит в первом столбце экр ана, Vim опр еделяет, какие сим волы в 100-символьн ой строк е не отоб ражаю тс я. Например, если в пер вом столбце наход ится 5-й симв ол строки, то симв олы 1–4 расположе ны за лев ым краем экран а, поэ том у их не видн о. Симв олы 5–84 видн ы на экр ане, а оставш иеся симв ол ы, с 85 по 100, выход ят за правый край экр ан а, поэтом у их такж е не видно. В Vim можно управл ять отображ ен ие м строк и при перем ещен ии по ней влев о и вправ о. Мин им альн ое кол ич ес тво симв олов, на которое Vim смещ ает строку налево и направо, равно sidescroll. Это знач ение можн о зад ать так:
На какой я строке? 337 set sidescroll=nгде n – числ о прок руч ив аемых столбцов. Мы рек ом ендуем уст ан овитьsidescroll равн ым 1, пос кольку сов рем енные ПК обл ад аю т мощн ос тьюпроц есс ора, достаточной для гладк ог о смещ ен ия всег о экран а на одинсимв ол за один раз. Если ваш экран тормозит и имеет большое врем яотк лика, можно увел ич ить знач ение для уменьш ен ия числа перерис овок экран а.Опция sidescroll опр едел яет минимальный сдвиг. Как можно ожид ать,Vim перем ещает курсор нас только дал еко, нас колько это требуется длявып олн ен ия зад анн ой вами команды пер ем ещ ения. Например, ввод wпер еместит курсор на следующ ее слово в строке. Однак о обработк а перем ещен ий в Vim немного мудр еная.Есл и след ующее слов о видн о не полн остью (справ а), ред актор перем естит вас на первый симв ол этого слов а, не смещ ая экран. Следующее выполнен ие ком анд ы w сместит строку влево на такое расстоян ие, чтобыкурс ор попал на первый симв ол следующ ег о слова, но чтобы был вид ентольк о этот перв ый симв ол.Под обн ое поведение можн о конт ролировать опц ией sidescrolloff. Онаопр ед ел яе т максим альн ое количество столбцов, сод ержащ ихс я справаи слева от курс ор а. Так, если задать sidescrolloff равн ой 10, Vim сохраняе т по крайн ей мер е 10 симв ол ов окруж ен ия, ког да курсор находитс яблизко к краю экран а. Сейч ас, ког да вы перемещ ает есь по строке нал ево и нап раво, курсор не подойд ет к каждом у из краев экрана ближ е,чем (в нашем случае) на 10 симв ол ов, так как программ а начнет смещать текст для просмотр а этог о контекс та. Возможн о, это наил учшийспос об нас трои ть Vim в реж име nowrap.Ред акт ор предоставляет удобн ые виз уальные подс казки с помощью опции listchar. Она зад ае т способ отображения символов при установленной опц ии list. В Vim такж е есть два парам етра этой опц ии, которыеопр едел яю т, исп ользов ать ли дополнит ельные симв ол ы, чтобы пок аз атьнал ич ие симв олов за пред ел ам и левог о и прав ого краев экрана в длинной строке. Наприм ер: set listchars=extends:> set listchars+=precedes:<предписыв ае т Vim пок аз ывать < в столбц е 1, есл и длинная строк а содерж ит друг ие симв олы слева от вид им ого экр ан а, а > – в пос ледн емстолбце, чтобы пок аз ать прис утств ие друг их симв олов справ а от вид имог о экр ана. Прим ер предс тавлен на рис. 15.6.Рис. 15.6. Длинн ая строка в реж им е nowrap
338 Глава 15. Другие полезности в Vim Нап ротив, есл и вам хочется видеть всю строку без прокрутк и, опц ией wrap можно задать пер енос строк в Vim. set wrap Теперь строка выгляд ит, как на рис. 15.7. Рис. 15.7. Длинная строка в реж им е wrap Очень длинные строки, которые не влезаю т полнос тью на экран, пред ставл яю тся единственным симв олом @ на первой поз иц ии, пока курсор и файл не буд ут расп олож ены так, чтобы строка влезла полн остью. Строк а на рис. 15.7 будет выг ляд еть, как на рис. 15.8, есл и распол ожит ся вниз у экр ан а. Рис. 15.8. Инд икатор длинной строкиСокращения команд и опций Vim В Vim сущес тв ует мног о ком анд и опц ий, поэтому мы рекоменд уем сна чал а выу чить их наз вания. Почт и все команд ы и опции (по крайней ме ре, с длинными имен ами) имеют связ анную с ним и короткую форму. Это пом ож ет сэкон ом ить время, но нужно быть уверенн ым, что вы знаете эту аббрев иатуру! Автор иног да получ ал смущ ающ ие и неожиданные ре зульт ат ы при использов ан ии неп равильн ой короткой формы ком анд ы. Есл и вы осв оил ись в любим ом подм нож естве ком анд и опц ий Vim, то исп ользов ан ие сок ращенных форм сэкон ом ит ваше время. Как прави ло, для опц ий редакт ор пытается взять сокращен ия тип а UNIX, а для ком анды берет начальн ую уник альн ую подстрок у ее имени. Прив ед ем некотор ые сок ращ ения для часто исп ользуем ых команд: n next prev previous q quit se set w write
Несколько мелочей (не обязательно для Vim) 339И опц ий: ai autoindent bg background ff fileformat ft filetype ic ignorecase li list nu number sc showcommand (а не showcase) sm showmatch sw shiftwidth wm wrapmarginСокращ енная форм а эконом ит врем я, если вы дост аточн о хор ошо знаетекоманд ы и опции. Однак о при нап исании скрипт ов и при настройке сеанс а командам и в файле .vimrc или .gvimrc вы, скор ее всего, в перспектив е сэкономит е врем я, есл и буд ет е исп ольз овать полн ые имена команди опц ий, т. к. это облегчае т чтение и отслеж ив ание файл ов и скриптов. Обрат ите вниман ие, что в комплект е файлов скрипт ов из дис триб у тив а Vim (syntax, autoindent, colorscheme и т. д.) предприн ят противо положный подх од, и мы нич его не имеем против него. Тем не менее для удобства исп ользов ания собств енных скриптов мы рек оменду ем указ ывать их полные имена.Несколько мелочей (не обязательно для Vim) Мы предл ож им несколько приемов. Нек от орые из них, имеющ иес я как в исх одном vi, так и в Vim, стои т запомн ить и исп ольз ов ать для облегч е ния раб от ы: Быс тр ая перес тановка Довольн о часто встреч ается такая ошибка, как ввод двух символов в неп рав ильном пор ядке. Поместит е курс ор на перв ый из «кап риз ных» знаков и введите xp (удал ить симв ол, вставить симв ол). Другая быс тр ая перестановк а У вас есть две строк и, которые нужно помен ять мест ами? Пом ест ите курс ор на верхн юю и введит е ddp (удал ить строк у, встав ить строк у после текущей). Быстрая справк а Не забывайте о встроенн ой справке в Vim. Нажат ие клавиш и F1 раз дел ит окн о и отоб раз ит содержимое онл айн овой справк и. Что это за ком анду я использ овал? В общем случ ае Vim открыв ае т доступ к недавно выз ванн ым коман дам пут ем использ ован ия клав иш со стрелк ами в ком андн ой строк е.
340 Глава 15. Другие полезности в Vim Нажимая стрелки вверх и вниз, вы сможете пер ем ещ аться по недав ним ком андам из спис ка и ред акт ир ов ать их. Независим о от того, правились ли ком анды в ист ор ии Vim или нет, можно выз вать лю бую из них наж атие м на ENTER. Можно лучш е изуч ить эту особ енность, есл и выз вать встроенное в Vim ред акт ир ован ие истор ии команд. Это дел ае тс я наж ат ие м CTRL-F в командн ой строке. Откроетс я небольш ое «командное» ок но (его высот а по умолч ан ию равна 7), в кот ор ом вы сможете перем е щаться обычн ыми командам и перем ещен ия Vim. Также здесь мож но вып олнять пои ск, как в обычн ом буф ере Vim, и редакт иров ать команд ы. В окн е редакт ир ован ия команд ы можн о легк о отыс кать недавн юю команду, при необх одимос ти измен ить ее и выполн ить наж атием на ENTER. Этот буфер можно запис ать в отд ельн ый файл, чтоб ы сох ра нить историю ком анд для буд ущего исп ользован ия. Нем ного юмор а Попроб уйте ввести :help sure и почит айт е, что отв ет ит Vim.Другие ресурсы Здесь мы прив ед ем две ссылки на HTML-коп ии встроенной справк и Vim для двух сам ых пос ледн их осн овных рел из ов Vim: Vim 6.2 http://www.vim.org/htmldoc/help.html Vim 7 http://vimdoc.sourceforge.net/htmldoc/usr_toc.html Кром е тог о, http://vimdoc.sourceforge.net/vimfaq.html – это FAQ (часто за даваемые воп рос ы) для Vim. В нем не связ ан ы отв ет ы и вопрос ы, но все они наход ятся на одной страниц е. Мы рек оменд уе м пролистать стран и цу вниз до ответов и нач ать чтение оттуд а. Раньше на официальной страниц е Vim можно был о послать советы по программ е, однак о из-за проблем со спамерами админ ис тратор ы пере местил и совет ы в wiki, где со спамом бор отьс я прощ е. Адр ес стран иц ы в wiki: http://vim.wikia.com/wiki/Category:Integration.
III Другие клоны vi Часть III.В част и III расс матрив аю тс я друг ие поп улярные клон ы vi, котор ые развив ались паралл ельн о с Vim. Эта часть сод ерж ит следующие главы:• Глав а 16 «nvi: нов ый vi»• Глава 17 «elvis»• Глав а 18 «vile: vi Like Emacs»
16 nvi: новый vi Глава 16.nvi – сок ращен ие от «new vi» (нов ый vi). Изн ач альн о этот ред акт ор былразр аб от ан в Кал ифорнийс ком унив ерс ит ет е в Беркли (University ofCalifornia at Berkeley) (UCB), на род ине Berkeley Software Distribution(BSD) UNIX. Он и был исп ольз ов ан для нап ис ан ия этой глав ы.Автор и историяОригин альный vi был созд ан в UCB в конц е 1970-х год ов Билл ом Джойем (Bill Joy), тог да еще студ ентом отдел ения комп ьют ерных нау к, который позже стал осн ов ат елем и виц е-през идентом Sun Microsystems.До vi Билл Джой (Bill Joy) снач ал а нап исал ex, основыв ая сь на сильноулучш енном шест ом изд ан ии редактора ed. Первым усовершенс тв ов анием стал отк рыт ый реж им, кот орый он сдел ал совмес тно с Чак ом Хали (Chuck Haley). Межд у 1976 и 1979 год ам и ex прев рат ился в vi. Зат емв Беркли приш ел Марк Хортон (Mark Horton), добавил макр ос ы «и другие функц ии»1 и проделал над прог рамм ой мног о раб от ы, пос ле чег оред акт ор стал зап уск атьс я на огромн ом числе терм ин ал ов и UNIX-систем. К верс ии 4.1 BSD (1981) он уже содержал в себ е все функции, описанн ые в част и I этой книг и.Нес мотр я на все пер емен ы, ядром vi был (и остается) изнач альн ый UNIX-ред актор ed. Из-за этог о его код нельз я было своб одно распрос тран ять.К нач алу 1990-х год ов, когда шла работа над 4.4 BSD, разр аб отчик иBSD захотели иметь верс ию vi, кот ор ая могла бы свободн о расп рос траняться в вид е исходн ог о код а.1 Из справочн ого руковод ства vi. К сож ал ен ию, как ие именн о функц ии, не говорится.
344 Глава 16. nvi: новый vi Кейт Бостич (Keith Bostic) из UCB начал с elvis 1.81 – своб одно расп ро страняемой мод иф ик ации vi – и стал превращать его в «поошибочн о со вмест имую» разновидность изн ачального ред акт ор а. nvi такж е следуе т стандартам POSIX Command Language и Utilities Standard (IEEE P1003.1) везде, где это имеет смысл. Буд уч и уже не связ анн ым с UCB, Кейт Бостич (Keith Bostic) продолж а ет расп рос тран ять nvi. На момент написания книг и тек ущ ая верс ия имел а ном ер 1.79. nvi важен, пос кольк у это «официа льная» берклее вская версия vi. Это часть 4.4 BSDLite II, и именн о она использ уется в популярн ых разно видн остях BSD, таких как NetBSD и FreeBSD.Важные аргументы командной строки В чист ом окр уж ении BSD nvi устанавливается под именам и ex, vi и view. Обычно все они ссылаю тс я на один и тот же исполн яем ый файл, и nvi смотр ит, как он был вызван, чтобы вест и себ я соотв етств ующ им обр а зом. В нем доп ускается ком анда Q реж им а vi для переход а в реж им ex. Вариант view похож на vi, за иск лючен ие м изнач ально установл енной опц ии readonly. nvi поддерж ивае т опред еленный наб ор опц ий командной строк и. При вед ем наиб олее част о употр ебляем ые: -c command При старте выполняет ком анд у command. Это POSIX-версия ист ор и чес ки сложившегос я синт аксиса +command, одн ако nvi не огран ичен позиционн ым и аргументами (стар ый синтаксис тож е работ ает). -F Не коп иров ать весь файл при начал е ред акт ир ован ия. Это мож ет уве лич ить скор ость работы, но при этом допускаетс я возможность си туации, ког да в ред актируем ый вам и файл кто-то другой тож е вно сит изменен ия. -r Восстанов ить указ анн ые файлы или, есл и файл ы не указаны в ко мандн ой строк е, выв ест и список всех файл ов, кот орые можно вос стан ов ить. -R Зап уск в реж им е «тольк о для чтен ия» и установк а опц ии readonly. -s Вход в пакетн ый (скриптовый) реж им. Предназ нач ено тольк о для ex и для запуск а скриптов ред акт ирования. Отключен ы все подс казки 1 Хот я от перв он ач альн ого код а elvis едва ли что-то осталось.
Онлайн-справка и другая документация 345 и соо бщ ен ия, кром е соо бщ ений об ошибк ах. Это POSIX-верс ия для ист орич ес кого арг ум ент а «-»; nvi подд ержив ает оба вар ианта. -S Зап уск с уст ан овленной опцие й secure, кот ор ая зап рещ ае т доступ к внешн им программ ам1. -t tag Нач ать редакт иров ание на указ анн ом тег е tag. -w size Уст ановка разм ер а внутр енн ег о окн а равн ым size строк.Онлайн-справка и другая документация nvi пос тавляетс я с довольн о полной распеч атываем ой докум ент ацие й. Она дост упн а в вид е исходн ик а troff, в форм ат е ASCII и в PostScript и включае т след ующ ие докум енты: Справочн ое рук овод ство vi Справ очн ое руков од ство для nvi, опис ывающ ее все опц ии ком анд ной строк и nvi, команды, опции и команд ы ex. Man-стран иц ы vi Стран иц ы рук овод ства (manpage) для nvi. Учебн ик vi Этот док умент являе тся вводным курс ом в редактир ов ан ие в vi. Справ очное рук ов од ство для ex Представляе т собой исходный вариант документац ии по ex и являе т ся нем ног о устаревшим ввиду новых возможн остей в nvi. Кроме тог о, сюд а включены файлы ACSII, в кот орых зад ок ум ентир ова ны некоторые внутр енн ие особенн ос ти nvi, а также дается спис ок по лезных функц ий и файлы, кот ор ые можно использ ов ать в кач естве он лайн-справки vi. Встроенная в nvi онл айн-справка мин им альна и сод ержит две ком ан ды: :exusage и :viusage. Они предост авляю т одн острочн ые резюм е для кажд ой команд ы ex и vi. Обычн о этог о достат очно, чтобы вспомн ить, как работ ае т та или иная команд а, но не подход ит для изуч ения новых или непонятн ых функций nvi. В кач естве аргум ент а для :exusage и :viusage можн о задав ать ком анду. В этом случ ае nvi пок ажет справку тольк о для нее и вывед ет одну стро1 Как и на все, что имее т в наз вании «secure» (безо пасный), полн ос тью пола гаться на это не стои т. Тем не менее Кейт Бостич (Keith Bostic) утв ерждает, что опции secure в nvi можн о доверять.
346 Глава 16. nvi: новый vi ку, объясняющ ую назначен ие этой команд ы, и одну, где показан о ее ис пользован ие.Инициализация Если указаны опц ии -s или «-», nvi игнорир ует все иниц иализации. Иначе программа произведет следующ ие шаг и: 1. Счит ает и вып олн ит файл /etc/vi.exrc. Его владельц ем должны быть либо вы, либ о root. 2. Вычисл ит значен ие переменн ой окруж ения NEXINIT при ее налич ии, инач е исп ользуе т пер ем енн ую EXINIT, если она сущ еств уе т. Исполь зуе тся тольк о одн а из этих пер ем енных. Игн орир уе тс я1 выполн ен ие $HOME/.nexrc или $HOME/.exrc. 3. Есл и сущес твует файл $HOME/.nexrc, то он считывае тс я и выполн яет ся. Инач е считывае тся и вып олн яетс я $HOME/.exrc. Обраб атыватьс я буд ет только один файл. 4. Есл и устан овлена опц ия exrc, то ред актор ищет и выполняет файл ./.nexrc, а если такового нет, то./.exrc. Обр абатываться будет тольк о один из этих файл ов. nvi не буд ет обр аб атыв ать файл, прав а на запись в котор ый имее т кто-то еще кроме его владельца. В документ ац ии nvi предлаг ается поместить общие действия иниц иа лиз ац ии (то есть опц ии и ком анд ы для UNIX vi) в ваш файл .exrc и вы зывать команду :source .exrc в ваш ем файл е .nexrc перед или пос ле ини циал изац ий, специфичных для nvi.Многооконное редактирование Чтобы создать нов ое окн о в nvi, исп ользуйте версию одн ой из команд редакт иров ан ия ex, нап исанную с прописн ой бук вы: Edit, Fg, Next, Pre vious, Tag или Visual (как обычн о, можн о применять абб рев иатур ы этих ком анд). Если курс ор нах од ится в верхней половин е экр ан а, то нов ое окно поя вится в нижней, и нао бор от. Пер еключение на другое окн о про исх одит с помощью CTRL-W: <preface id=\"VI6-CH-0\"> <title>Preface </title> <para> Text editing is one of the most common uses of any computer system, and <command>vi</command> is one of the most useful standard text editors on your system. With <command>vi</command> you can create new files, or edit any existing 1 Есл и перем енн ые NEXINIT или EXINIT опр еделен ы. – Прим. нау ч. ред.
Многооконное редактирование 347Unix text file.</para>ch00.sgm: unmodified: line 1# Makefile for vi book## Arnold RobbinsCHAPTERS = ch00_6.sgm ch00_5.sgm ch00.sgm ch01.sgm ch02.sgm ch03.sgm \ ch04.sgm ch05.sgm ch06.sgm ch07.sgm ch08.sgmAPPENDICES = appa.sgm appb.sgm appc.sgm appd.sgmPOSTSCRIPT = ch00_6.ps ch00_5.ps ch00.ps ch01.ps ch02.ps ch03.ps \ ch04.ps ch05.ps ch06.ps ch07.ps ch08.ps \Makefile: unmodified: line 1В этом пример е пок азано, как nvi ред актир ует два файла: ch00.sgmи Makefile. Разделение экрана прои зошл о в рез ультате ввода nvi ch00.sgmи последовавш ег о за ним :Edit Makefile. Последн яя строк а каждогофайла работ ае т как строка состояния, и именн о там выполняютс я команд ы с двоет очием для этог о окна. Строк и сос тоян ия показан ы инв ертир ованн ым цветом.Команды создан ия окон в реж им е ex и их действ ия описан ы в табл. 16.1.Таблица 16.1. Команды управления окнам и в nviКом анд а Функцияbg Скрыв ает тек ущее окно. Его можн о выз вать пов торн о команд а ми fg и Fg.di[splay] Пок азывае т все буф еры, включая именованн ые, неименованныеb[uffers] и цифровые.di[splay] Показывает все имена файлов окон, распол ож енных в фон е.s[creens]Edit filename Ред акт ируе т файл filename в новом окне.Edit /tmp Создае т новое окн о, где пок аз ыв аетс я пуст ой буф ер. /tmp специfg filename альн о инт ерп рет ир уе тся как созд ан ие нов ого врем енн ог о файл а.Fg filename Возвращае т файл filename в тек ущее окно. Пред ыдущ ий файл отход ит на фон. Возв ращает файл filename в новом окне. Текущ ее окно разделя ется, вместо тог о чтобы мес то на экр ан е пер ерасп редел ил ось меж ду всеми открытыми окнам и.Next Редакт ир ует следующий файл из списка аргумент ов в нов ом окн е.Previous Редакт ируе т предыд ущ ий файл из спис ка арг умент ов в нов ом окн е (в nvi есть соотв етс тв ующая ком анда previous, перем ещ аю щая польз ователя обр атн о к пред ыдущему файл у, но в vi ее нет).resize ±nrows Увеличивает или уменьшает разм ер текущего окна на nrows строк.Tag tagstring Ред акт ируе т файл, сод ерж ащ ий tagstring, в новом окн е.
348 Глава 16. nvi: новый vi Команда CTRL-W цикличес ки перемещ ает между окнами, сверху вниз. Ком анды :q и ZZ – это выход из текущего окна. Можно иметь нес колько окон, в кот орых отк рыт один файл. Изм ене ния, сделанн ые в одн ом окн е, отр ажаю тс я в друг ом, хот я исп равления, сдел анн ые в реж им е вставк и nvi, не будут видны в другом окн е, пока вы не заверш ите правк у нажатием ESC. Пользователя не буд ут пригла шать сох ранить изм ен ен ия до вызов а команд ы, зак рывающ ей пос лед нее окно у файл а.Графические интерфейсы nvi не имее т версии с граф ичес ким пользов ат ельс ким инт ерфейс ом (GUI).Расширенные регулярные выражения Мы поз нак ом ил ись с расширенными рег ул ярными выр аж ениями еще раньше, в раздел е «Расш иренные регул ярн ые выр ажения» на стр. 152. Сейч ас мы обобщим мет асимвол ы, предоставляем ые nvi. Прог рамма такж е подд ерж ив ае т группов ые выр ажен ия POSIX, [[:alnum:]] и прочие. Для вызова пои ск а по расширенн ым рег ул ярн ым выраж ен ия м нужн о вып олнить :set extended: | Указывае т на альтернат иву. Левая и правая сторон ы не обязаны быть один очным и симв ол ам и. (...) Исп ольз уе тся для группир овки, чтоб ы допуст ить применен ие до полнительн ых опер аторов раб от ы с регул ярным и выр аж ениям и. Когда устан овл ен extended, текст, сгрупп ир ованн ый кругл ыми скоб кам и, работ ае т как текст, сгруппир ованн ый в \(...\) в обычном vi. К собственно тексту можно обр ат итьс я в строке зам ены с пом ощ ью \1, \2 и т. д. В этом случ ае \( представляет соб ой буквальн о левую скобк у. + Соо тветствует одн ому или нес кольк им вхожд ен иям предшеств ую щег о регул ярног о выражения. Им может быть один симв ол либо групп а симв ол ов, зак люч енных в круглые скобки. ? Соо тв етств уе т одн ом у или ни одн ому вхождению предшествующ ег о регул ярн ого выраж ен ия. {...} Опр едел яет инт ервальное выраж ение. Оно опис ыв ает счетн ое числ о пов тор ен ий. В следующем описан ии n и m предс тавляют собой цел о численные константы.
Улучшения в редактировании 349 {n} Соо тв етс твует n вхож д ен иям предшествующег о рег ул ярн ого вы ражен ия. {n,} Соответствует не менее чем n вхожд ен иям предшеств ующ его ре гулярног о выр ажения. {n,m} Соо тветств уе т количеств у вхож д ений предш еств ующег о регул яр ного выражения от n до m. Есл и опц ия extended не устан овл ен а, nvi пред ост авляе т те же самые возможн ости, но с исп ольз ов ан ие м \{ и \}. Как можн о ожидать, есл и extended уст ановлен а, то для буквальн ого со ответс тв ия метас имв олам перед ним и нужн о став ить обратную косую черт у.Улучшения в редактировании Этот раздел описыв ает особ еннос ти nvi, котор ые еще более обл егчаю т раб от у и расш ир яют возможности прос тог о ред акт иров ания текс та.История и завершение командной строки nvi сох раняе т ком анд ы ex и дает возможн ость ред актировать их для по следующего ввода. Эта способн ость управляетс я опцие й cedit, знач ен ие которой – строк а. При вводе первого симв ола этой строки в командн ой строк е с двоеточи ем nvi отк рывает новое окно с ист ор ией команд, которую можн о редак тир ов ать. Есл и на какой-нибудь строк е нажать ENTER, программ а вы полнит ее. Этой опции удобно поставить в соотв етс твие ESC (для его ввод а исп ольз уйте ^V ^[). Так как нажатие ENTER запускает выполн ен ие ком анды, для переме щен ия вниз по строкам нео бход им о польз оватьс я клавиш ами j или ↓. Помимо редакт ир ов ания командн ой строк и мож но выполн ять подста новку в имен ах файлов. Эта возможность управляе тся опц ие й filec. При вводе ее перв ого симв ола в командной строк е с двоеточ ие м nvi рас сматрив ае т отд еленное проб елами слов о пер ед курс ором, как есл и бы к нем у была прип исана * и произв одит подс тановку имен и файла, как в ком андн ой строк е. Этой опц ии такж е удобно пос тавить в соо тв етств ие ESC (для его ввод а исп ользуйт е ^V ^[). Есл и вы пос тавили этой опц ии в соответствие тот же символ, что и для опц ии cedit, редактирован ие командн ой строки происходит только то
350 Глава 16. nvi: новый vi гда, когда перв ый введ енн ый симв ол знач ен ия опц ии cedit одн ов рем ен но явл яе тс я перв ым в ком андн ой строке с двоеточ ием. Док умент ация nvi указ ывае т, что TAB – еще один расп ространен ный выб ор для опции filec. Чтобы это зар абот ало, нужно ввести :set filec=\TAB. В любом случ ае на практике использ ов ан ие ESC хор ош о раб отает для обоих вар иантов. Проще всег о установ ить эти опц ии в файл е .nexrc: set cedit=^[ set filec=^[Стеки тегов Теги был и опис ан ы ран ее в разд ел е «Стек и тегов» на стр. 157. Стек тегов в nvi – самый простой среди чет ырех модификац ий оригинальног о ре дактора. В табл. 16.2 и 16.3 пок азаны исп ользуемые для нег о команд ы. Таблиц а 16.2. Ком анд ы раб от ы с тег ами в nvi Команд а Функция di[splay] t[ags] Отобраз ить стек тег ов. ta[g][!] tagstring Ред акт ир ов ать файл, сод ерж ащий tagstring, как опр еделено в файле tags. ! принужд ает nvi переключ итьс я в нов ый файл, даж е есл и текущ ий буф ер был изм енен, но не сохран ен. Ta[g][!] tagstring Действует как :tag, только в данн ом случае файл редакти руетс я в нов ом окне. tagp[op][!] tagloc Извлек ает из стек а все тег и вплоть до указ анн ого или до по следн его исп ользов авшегос я тега, есл и tagloc отсутс тв уе т. Поз иц ией мож ет быть как имя файла интер есующег о нас тега, так и ном ер, прис вое нный тег у в стек е. tagt[op][!] Перех одит на сам ый стар ый тег в стек е. При этом стек очи щается. Табл иц а 16.3. Команды работы с тегами для командног о реж им а nvi Команд а Функция ^] В файл е tags ищет полож ение идент иф икатор а, на котор ом ^T стоит курс ор, и переходит на это место. Тек ущее положение авт омат ич ески зан оситс я в стек тегов. Возв рат к предыд ущ ем у пол ож ен ию в стек е тег ов, то есть изв лечен ие элем ент а из стека. Можн о установить опц ию tags как спис ок имен файлов, где nvi будет ис кать тег. Такой подх од позволяет задать упрощ енн ую схему путей поис
Search
Read the Text Version
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
- 100
- 101
- 102
- 103
- 104
- 105
- 106
- 107
- 108
- 109
- 110
- 111
- 112
- 113
- 114
- 115
- 116
- 117
- 118
- 119
- 120
- 121
- 122
- 123
- 124
- 125
- 126
- 127
- 128
- 129
- 130
- 131
- 132
- 133
- 134
- 135
- 136
- 137
- 138
- 139
- 140
- 141
- 142
- 143
- 144
- 145
- 146
- 147
- 148
- 149
- 150
- 151
- 152
- 153
- 154
- 155
- 156
- 157
- 158
- 159
- 160
- 161
- 162
- 163
- 164
- 165
- 166
- 167
- 168
- 169
- 170
- 171
- 172
- 173
- 174
- 175
- 176
- 177
- 178
- 179
- 180
- 181
- 182
- 183
- 184
- 185
- 186
- 187
- 188
- 189
- 190
- 191
- 192
- 193
- 194
- 195
- 196
- 197
- 198
- 199
- 200
- 201
- 202
- 203
- 204
- 205
- 206
- 207
- 208
- 209
- 210
- 211
- 212
- 213
- 214
- 215
- 216
- 217
- 218
- 219
- 220
- 221
- 222
- 223
- 224
- 225
- 226
- 227
- 228
- 229
- 230
- 231
- 232
- 233
- 234
- 235
- 236
- 237
- 238
- 239
- 240
- 241
- 242
- 243
- 244
- 245
- 246
- 247
- 248
- 249
- 250
- 251
- 252
- 253
- 254
- 255
- 256
- 257
- 258
- 259
- 260
- 261
- 262
- 263
- 264
- 265
- 266
- 267
- 268
- 269
- 270
- 271
- 272
- 273
- 274
- 275
- 276
- 277
- 278
- 279
- 280
- 281
- 282
- 283
- 284
- 285
- 286
- 287
- 288
- 289
- 290
- 291
- 292
- 293
- 294
- 295
- 296
- 297
- 298
- 299
- 300
- 301
- 302
- 303
- 304
- 305
- 306
- 307
- 308
- 309
- 310
- 311
- 312
- 313
- 314
- 315
- 316
- 317
- 318
- 319
- 320
- 321
- 322
- 323
- 324
- 325
- 326
- 327
- 328
- 329
- 330
- 331
- 332
- 333
- 334
- 335
- 336
- 337
- 338
- 339
- 340
- 341
- 342
- 343
- 344
- 345
- 346
- 347
- 348
- 349
- 350
- 351
- 352
- 353
- 354
- 355
- 356
- 357
- 358
- 359
- 360
- 361
- 362
- 363
- 364
- 365
- 366
- 367
- 368
- 369
- 370
- 371
- 372
- 373
- 374
- 375
- 376
- 377
- 378
- 379
- 380
- 381
- 382
- 383
- 384
- 385
- 386
- 387
- 388
- 389
- 390
- 391
- 392
- 393
- 394
- 395
- 396
- 397
- 398
- 399
- 400
- 401
- 402
- 403
- 404
- 405
- 406
- 407
- 408
- 409
- 410
- 411
- 412
- 413
- 414
- 415
- 416
- 417
- 418
- 419
- 420
- 421
- 422
- 423
- 424
- 425
- 426
- 427
- 428
- 429
- 430
- 431
- 432
- 433
- 434
- 435
- 436
- 437
- 438
- 439
- 440
- 441
- 442
- 443
- 444
- 445
- 446
- 447
- 448
- 449
- 450
- 451
- 452
- 453
- 454
- 455
- 456
- 457
- 458
- 459
- 460
- 461
- 462
- 463
- 464
- 465
- 466
- 467
- 468
- 469
- 470
- 471
- 472
- 473
- 474
- 475
- 476
- 477
- 478
- 479
- 480
- 481
- 482
- 483
- 484
- 485
- 486
- 487
- 488
- 489
- 490
- 491
- 492
- 493
- 494
- 495
- 496
- 497
- 498
- 499
- 500
- 501
- 502
- 503
- 504
- 505
- 506
- 507
- 508
- 509
- 510
- 511
- 512
- 1 - 50
- 51 - 100
- 101 - 150
- 151 - 200
- 201 - 250
- 251 - 300
- 301 - 350
- 351 - 400
- 401 - 450
- 451 - 500
- 501 - 512
Pages: