Emacs для начинающих

         

Путь второй: старый, проверенный


Данный способ является своеобразным "шагом назад", поскольку подразумевает, что Вы будете использовать устаревшую кодировку KOI8-R вместо современной UTF. Если Вы занимались русификацией предыдущих версий Red Hat,часть нижеизложенного будет Вам знакома. Остальные читатели в случае необходимости могут обратиться за детальной информацией к Cyrillic-HOWTO.

Итак, попробуем применить хорошо известное решение: SYSFONT="Cyr_a8x16" и SYSFONTACM="koi2alt" (о его плюсах написано все в том же HOWTO). К сожалению, в таком виде оно не работает. Причина кроется в скрипте /sbin/setsysfont, который почти не менялся со времен consoletools. Любой заглянувший в него не может не обратить внимания на вопиющую дискриминацию - для kbd (setfont) не поддерживается переменная SYSFONTACM! Я отправил сообщение об этой ошибке (включая исправленную версию сценария) на bugzilla.redhat.com, исправление должно появиться в initscripts 6.96-1 или более поздней версии. После исправления этой ошибки (например, путем скачивания моей версии setsysfont) и установки вашей любимой клавиатурной раскладки (что-нибудь типа ru*, но никак не *-utf!) не забудьте удалить подстроку "UTF-8" из имени локали, поскольку иначе консоль переключится в режим UTF и откажется принимать Вашу KOI8-R.

После всех этих манипуляций файл /etc/sysconfig/i18n будет иметь следующий вид: LANG="en_US"
SUPPORTED="по умолчанию"
SYSFONT="Cyr_a8x16"
SYSFONTACM="koi2alt"

Если Вашей целью было создание "пан-европейской" версии Linux (это когда русские буквы отображаются, но все общение с системой происходит на английском языке), Вас опять можно поздравить. Если нет - читайте дальше.
Для окончательной русификации (установки российского формата даты, времени, валюты, русскоязычных сообщений в отдельных программах) следует установить соответствующую локаль, например "ru_RU.koi8r". К сожалению, здесь нас опять поджидают проблемы - в такой среде у Midnight Commander и некоторых других программ (setuptools, например) пропадет псевдографика. MC, помимо этого, опять отказывается выводить русские буквы где-либо, кроме меню, да и в нем - в искаженном виде. "Корень зла" во всех случаях один - используемые библиотеки (NCurses, S-Lang) скомпилированы с поддержкой Unicdoe, в то время как она нам совсем не нужна. Необходимо перекомпилировать их в однобайтовом режиме (вот он, истинный шаг назад - мы, по сути, устраняем изменения, внесенные в Red Hat Linux после версии 7.3). Рассмотрим эту процедуру на примере Midnight Commander. Его "излечение" проходит в два этапа:

Откомпилируйте NCurses в без поддержки UTF (./configure --disable-widec) Перекомпилируйте MC с использованием NCurses вместо традиционного S-Lang (./configure --with-ncurses) Подробную информацию о других ключах компиляции ищите в документации к соответствующим пакетам.

На мой взгляд, наиболее приемлемым вариантом русификации является "пан-европейский" KOI8-R. UTF-режим, безусловно, удобен, но еще недостаточно отлажен. Думается, что им вполне можно будет пользоваться в версиях 8.2-8.3. Полная русификация в не-UTF режиме - слишком трудоемкая операция. Если русскоязычный интерфейс для вас превыше всего, имеет смысл обратить внимание на KDE, благо с ее русификацией особых проблем не возникает.

Автор выражает благодарность Шабунио Ю.А. за ценные идеи и плодотворную дискуссию.



Работа с несколькими окнами.


Экран редактора Emacs может быть разделен на несколько частей, называемых окнами (не путать с окнами в многооконных системах), для одновременной работы с несколькими буферами. Время от времени Emacs сам открывает новые окна, чтобы отобразить соответствующую информацию (например, справочную информацию).

Нажатие C-x 2 (или выбор пункта Split Window из меню File) приводит к разделу экрана редактора пополам, т.е. на два окна. Оба окна отображают информацию из одного и того же буфера, текущего на момент раздела. Чтобы загрузить в разные окна разные файлы нужно выполнить следующее:

Загрузить в Emacs первый файл; Нажать C-x 2, чтобы разделить экран пополам; Нажать C-x C-f, чтобы загрузить в одно из окон второй файл. (см. рис. Перемещение курсора в другое окно.).


Перемещение курсора в другое окно.

Переход из одного окна в другое осуществляется нажатием комбинации C-x o ("o" - буква, не цифра).

Удаление окна, в котором находится курсор, осуществляется комбинацией C-x 0 ("0" - цифра, не буква) или командой delete-window.

Комбинация C-x 1 запускает команду delete-other-windows, которая закрывает все окна, кроме текущего. Закрытие окна не означает закрытие буфера. Все буферы остаются доступными для редактирования, в любой из буферов можно переключится нажатием C-x b.

Чтобы вывести список доступных для редактирования буферов и переключиться в один из них, используется похожая комбинация клавиш: C-x С-b (list-buffers). Чтобы переключиться в один из отображенных в списке буферов, нажмите C-x о. Затем переместите курсор в строку с указанием имени буфера и нажмите 1. Буфер с выбранным именем отобразится во вновь открытом окне.

Вышеописанные операции с буферами также доступны из меню Buffers.



Работа в командном режиме


Команды в этом режиме имеют формат :

[count] command [where] Многие команды состоят всего из одного символа. Рассматриваемые в данном разделе команды - наиболее используемые в редакторе vi.



Аргумент count - число, начинающееся с символа от 1 до 9. Например : команда "x" удаляет символ в позиции курсора, при вводе команды "23x" - будут удалены 23 символа.

Некоторые команды используют аргумент where, определяющий границы текста, к которым будет применена команда, также параметр where может быть командой перемещения курсора.



Разбиение Оперативного Элемента


Команда PSGML Sgml-split-element, вызываемая через C-c Enter, разбивает текущий элемент на два в позиции курсора. Если нужно, чтобы существующий параграф был разбит на два параграфа, нажмите указанную выше комбинацию клавиш, и Emacs вставит конечный и начальный тэги, соответствующие типу разбиваемого элемента. При этом курсор будет установлен после начального тэга нового элемента.

Помните, что команда Sgml-split-element автоматически не вставляет другие элементы, более высокого уровня вложения. Для проверки используйте команду sgml-next-trouble-spot или соответствующую комбинацию C-c C-o.

Еще одна полезная функция команды Sgml-split-element - возможность разделения структуры более высокого уровня. Так, если при нажатии C-c Enter был разделен элемент sect2, то в окне минибуфера появится следующее сообщение:

Repeat the command to split the containing sect1 element


Повторное нажатие C-c Enter приведет к вставке конечного и начального тэгов sect1. Поскольку элемент sect1 требует наличия элемента title, то после нажатия C-c C-o в окне минибуфера появится сообщение о наличии ошибок в структуре текста.

Можно использовать комбинацию клавиш M-q (команда fill-paragraph), чтобы корректировать концы строки, но далее, в разделе "Выравнивание текста элемента", будет показан более продуктивный путь.



Размещение рисунков.


Изображения в форматах GIF/JPEG размещаются в тексте с помощью ключевого слова. Синтаксис:

%image filename (alignment) (width) (height)

где filename указывает имя фаила изображения. Дополнительные аргументы управляют выравниванием и размером изображения. Выравнивание может быть по левому краю, по правому, по центру или центрирование с указанием ширины и высоты изображения в пикселях. Как пример, следующее изображение

было размещено с помощью строки:

%image mouse.gif centre



Разное


^G Показать имя файла и статус. ^L Очистить и перерисовать экран. ^R Перерисовать экран и удалить ошибочные строки. ^[ Отменить частично набранную команду. ^^ Возвратиться к последнему редактированному файлу. ! Выполнить команду оболочки. & Повторить предыдущую команду :s. . Повторить последнюю команду. : Начало команды редактора "EX". Команда выполняется один раз после нажатия клавиши "Enter". @ Напечатать команду из определенного буфера. U Восстановить текущую строку. m Отметить текущую позицию определенным символом. u Отменить последнее изменение файла. Повторная команда восстанавливает изменения.



Разновидности Emacs


Существует две основных разновидности Emacs — GNU Emacs и XEmacs. GNU Emacs — это развитие оригинальной версии Emacs, написанного Столлманом, а XEmacs — это версия с некоторыми добавлениями к интерфейсу и языку Emacs Lisp. О причинах, по которым образовалось две версии, можно прочесть по этому . В большинстве случаев их поведение похоже друг на друга, но есть и некоторые отличия. Поэтому некоторые пакеты расширений могут работать только с конкретной версией Emacs.

Кроме двух основных версий, существует и множество других редакторов, считающихся вариантами Emacs. Полный их список можно найти на странице .

В данном документе я буду рассказывать, прежде всего, о GNU Emacs, входящем в поставку . Однако большая часть сказанного применима и для XEmacs, а также для версий Emacs в других дистрибутивах Linux.

   След.
   Основы работы с Emacs


Существует две основных разновидности Emacs — GNU Emacs и XEmacs. GNU Emacs — это развитие оригинальной версии Emacs, написанного Столлманом, а XEmacs — это версия с некоторыми добавлениями к интерфейсу и языку Emacs Lisp. О причинах, по которым образовалось две версии, можно прочесть по этому . В большинстве случаев их поведение похоже друг на друга, но есть и некоторые отличия. Поэтому некоторые пакеты расширений могут работать только с конкретной версией Emacs.

Кроме двух основных версий, существует и множество других редакторов, считающихся вариантами Emacs. Полный их список можно найти на странице .

В данном документе я буду рассказывать, прежде всего, о GNU Emacs, входящем в поставку . Однако большая часть сказанного применима и для XEmacs, а также для версий Emacs в других дистрибутивах Linux.

   След.
   Основы работы с Emacs



Редактирование


dd - стирание текущей строки

dдвижение курсора - стирание от текущего положения курсора до нового, задаваемого символом перемещения курсора(Нажатие кнопок стрелочной клавиатуры НЕ ЯВЛЯЕТСЯ движением курсора и не может использоваться в комбинированных командах.)

J - слияние текущей строки со следующей

u - отмена последней команды

. - повтор последней команды

: - переход в режим командной строки



Редактирование атрибутов


Существует четыре способа редактирования атрибутов, включая возможности меню PSGML. Первый способ - просто пеместить курсор в открывающий тэг элемента и набрать имя атрибута и его значение. Рассмотрим пример:

<p>Now, the Pequod had sailed from <a>Nantucked</a> at the very beginning of the Season-on-the-line.</p>

Пусть нужно добавить атрибут HREF в элемент a. Для этого переместите курсор, установив его на открывающем тэге так, чтобы курсор был установлен на символе ">", и наберите имя атрибута и его значение. В результате должно получиться следующее:

<p>Now, the Pequod had sailed from <a href="http://www.nantucket.com">Nantucket\ </a> at the very beginning of the Season-on-the-line.</p>

Конечно, описанную выше процедуру можно выполнить в любом текстовом редакторе. Ниже будут рассмотрены методы редактирования атрибутов, использующие преимущества PSGML. Сама процедура редактирования значительно упрощается.

Команда PSGML sgml-insert-attribute (комбинация C-c + или пункт Insert Attribute меню Markup) представляет более универсаленый способ вставки атрибутов, поскольку предоставляет возможность выбора не только имен, но и допустимых значений. Установите курсор либо на открывающем тэге, либо на закрывающем, либо в области ввода текста данного элемента и нажимите C-c +. В окне минибуфера отобразится подсказка:

Attribute name:


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

После того, как имя атрибута введено в окне минибуфера и нажат Enter, в окне минибуфера отображается имя атрибута (тип данных) и текущее значение (если значение атрибута не было оговорено особо), а также предлагается ввести новое значение. Вид экрана представлен на рис. Вид командной строки для команды ..


Вид командной строки для команды sgml-insert-attribute.


Не нужно набирать кавычки при вводе значения атрибута - PSGML добавляет их сам. В окне минибуфера введите значение атрибута: http: // www.nantucket.gov, как это показано на рис. Ввод нового значения аттрибута .,


Ввод нового значения аттрибута href.

и нажмите Enter. При этом значение атрибута должно быть изменено. Результат представлен на рис. Результат редактирования значения аттрибута ..


Результат редактирования значения аттрибута href.

При вводе значений атрибутов также можно использовать функцию "дописывания", если объявленное значение является группой названий. Например, определением элемента HTML DTD предусмотрено наличие атрибута ALIGN:

ALIGN (top|middle|bottom) #IMPLIED
При редактировании элемента IMG и его атрибута ALIGN после нажиматия C-c + и введите одну из трех букв: t, m, или b, а затем нажмите Tab. При этом значение атрибута будет введено полностью.

Другой, еще более простой способ редактирования атрибутов, особенно при необходимости редактирования более одного атрибута того же самого элемента, является использование команды sgml-edit-attributes (комбинация клавиш C-c C-a или пункт Edit Attributes меню Modify). В новом окне будет выведен список допустимых атрибутов текущего элемента в виде формы, которую нужно заполнить. Рассмотрим пример. Нажмите C-c C-a, предварительно поместив курсор на слове Nantucket. Вид экрана представлен на рис. .


Ввод значений аттрибутов с помощью команды sgml-edit-attributes.

Переместите курсор на значение какого-нибудь другого атрибута и введите новое значение. Быстрый переход к полю значения следующего по списку атрибута осуществляется нажатием кнопки Tab. После того, как значения всех интересующих атрибутов были изменены, нажмите C-c C-c. При этом внесенные значения будут отображены в тексте документа, а окно атрибутов будет закрыто. Если нужно закрыть окно атрибутов без сохранения, нажмите C-x 0.

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




Окно редактирования атрибута для элемента IMG.

Например, на рис. Окно редактирования атрибута для элемента . показано окно редактирования атрибута для элемента HTML IMG; обратите внимание на список "bottom middle top" во второй строке атрибута ALIGN:

Четвертый и самый простой способ редактирования атрибутов со значением - через пункт Insert Attribute от меню Markup, если, конечно, версия Emacs допускает использование меню. В отличие от команды вставки атрибута sgml-insert-attribute с быстрой клавишей C-c +, пункт Insert Attribute от меню Markup позволяет редактировать значения уже существующих атрибутов. Нужно просто поместить курсор в поле атрибута, вызвать пункт меню, выбрать тип атрибута, а затем выбрать новое значение атрибута из предложенных.


Редактирование Документов SGML в редакторе Emacs и PSGML


Редактор Emacs фактически имеет встроенный режим для редактирования документов SGML, но это просто автоматизированная вставка разделителей - тэгов ("<" и ">") - и запрос внешней программы, который может проверять синтаксис файла типа nsgmls или sgmls.

PSGML - добавочный режим SGML для Emacs, расширяющий возможности SGML. PSGML расширяют возможности редактора Emacs. Данный режим позволяет редактировать документ, не волнуясь о его структуре, поскольку большинство задач, поддерживающих структуру документа, автоматизировано. Режим PSGML обеспечивает вставку соответствующих тэгов нажатием минимального числа клавиш или даже автоматически. Данный режим позволяет обнаруживать структурные ошибки, выравнивать тэги, обозначивая вложенные структуры. Допускается выделение тэгов, комментариев и ссылок на объекты различным шрифтом или цветом, чтобы облегчить визуальное восприятие структуры.



Редактирование нескольких файлов


Комбинация C-x C-f запускает команду поиска файлов - find-file. Используя эту комбинацию (или выбирая Find File... меню File), пользователь как бы говорит редактору: "Открыть файл, имя которого будет задано, если он уже в буфере - показать этот буфер. Если файла с таким именем нет в буфере, но он есть на диске - сообщить, где именно он находится, чтобы можно было его открыть. Если такого файла вообще не существует - создать его." В окне минибуфера появится сообщение с предложением ввести имя текущей директории, где возможно находится файл:

Find file: c:\pathname\

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

Чтобы переключиться из одного активного буфера в другой, используйте комбинацию C-x b (команда switch-to-buffer). Emacs попросит ввести имя буфера, которое совпадает с именем редактируемого файла. При вводе имени буфера также можно пользоваться функцией "дописывания".

Все буферы используют один и тот же буфер обмена (kill ring). Например, чтобы переместить параграф из file1.txt в file2.txt, нужно выполнить следующие действия:

Выделить блок текста в file1.txt; Скопировать его в буфер обмена посредством комбинации C-w; Перейти в буфер file2.txt. Для чего используйте C-x b, а в ответ на запрос switch-to-buffer нужно ввести имя буфера file2.txt; Переместите курсор туда, куда нужно вставить текст и нажмите C-w.

После завершения операции копирования, чтобы сохранить изменения, нажмите C-x C-s. Данную команду удобно использовать, если нужно сохранить изменения только в текущем буфере, а остальные файлы оставить без изменений. Затем можно выйти из Emacs без сохранения, воспользовавшись C-x C-c.



Редактирование текста в Emacs


Редактор Emacs предоставляет пользователю возможность выбора между командой и комбинацией клавиш для выполнения той или иной операции. В данной главе описывается "минимальный набор" комбинаций, необходимых для работы.



Редактор текстов - каким хотелось бы видеть


Из данного выше определения редактора следует, что для огромного количества трудящихся это - один из основных инструментов. А такой инструмент всегда хочется видеть если не идеальным, то максимально к идеалу приближенным. Каковы же требования к идеальному редактору?

Разумеется, они разные для разных задач. Одно дело - редактор для программиста, и совсем другое - для писателя. Все же попробую сформулировать свои представления о редакторе с позиций составления "из головы" длинных структурированных текстов, претендующих на оригинальность и содержательность.

Текстовый редактор, заслуживающий своего имени, кроме ввода букв, в том числе и русских (это - важнейшее условие, но о нем - в самом конце), должен обеспечивать:

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

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

Крайне желательны также - расцветка синтаксиса, по крайней мере HTML и TeX, многооконный режим работы, возможность работы с различными кодировками русского языка, ну и как предел мечтаний - поддержка проектов из нескольких файлов, с возможностью групповых операций (скажем, поиска и замены) в них.

Должен сразу сказать - хоть "все страны облазил, и Европе был, и в Азии", идеала своего я пока не нашел. И не только под Linux, но и под Windows. Онако именно с позиций приближения к этому идеалу я и буду описывать ниже текстовые редакторы.

Но сначала - пару слов о том, какие они бывают вообще. А бывают они, во-первых, консольные, и во-вторых - графические (то есть работающие в графическом режиме). С другой стороны, бывают редакторы общего назначения и специализированные, например, редакторы для программистов. Хотя последние подчас могут использоваться и в качестве первых.

Количество текстовых редакторов под Linux достаточно велико. Что же они из себя представляют, для чего предназначены и на что способны?

Чтобы как-то прояснить этот вопрос, я решил провести эксперимент, как обычно, на самом себе. А именно, последовательно загружал каждый из попавшихся под руку редакторов и описывал в нем свои впечатления (о нем же, конечно). Пользуясь в основном базовыми средствами, доступными по умолчанию. При этом я не старался не только описать, но даже постигнуть все потенциальное богатство описываемых систем, а только пытался определить, насколько они удобны для поставленной выше цели.

Начал я, естественно, с редакторов консольных. Почему? - спросите вы меня. Ведь все прогрессивное человечество уже пол-десятилетия работает в графических средах.

На этот вопрос не трудно ответить любому обладателю близорукости пяти и более диоптрий, проводящему за редактированием текстов пять и более часов. Потому что, не смотря на все безусловные достоинства графического режима, режим текстовый (даже при далеко не идеальном мониторе) обеспечивает существенно меньшую нагрузку на зрение.

Кроме того, в ряде случаев требуется слегка подправить некий конфигурационный файл. Для чего нелепо вызывать редактор графического режима - ведь на работу в нем уйдет меньше времени, чем на загрузку.

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

Именно поэтому первое, что приходит на ум из консольных редакторов -



Редактор vi


Крутиков М.П.,

Редактирование

Повторители



REDT


Редактор REDT разработан в Государственном Университете Вашингтона, базируется на библиотеке curses и следует модели редактирования, принятой в EDT - известном редакторе из VAX/VMS. Однако чистым эмулятором EDT этот редактор назвать нельзя: средства обработки текста в REDT выполнены в стиле редакторов для MS-DOS (выделение в прямоугольник, курсор может выходить за конец строки, наличие строки статуса). Раскладка функциональной клавиатуры может быть полностью изменена. REDT по достоинству оценят прежние пользователи редакторов EVE, EDT и SEDT.

Можно упомянуть еще такие эмуляторы редактора VMS/EDT, как OpenEDT от фирмы Acceler8 Technology и EDT+ от Boston Business Computing, а также SPF/UX (эмулятор редактора ISPF компании IBM), разработанный фирмой Uneclipse Software Systems.

Как видите, выбор текстовых редакторов все-таки имеется, и с операционной системой UNIX можно "дружить". Надеюсь, что теперь, располагая приведенной в данной статье информацией, в ответ на ненавязчивое предложение освоить vi Вы не станете делать круглые глаза, а скажете: "Спасибо, друг, но я не увлекаюсь криптографией - у меня есть кое-что получше."

Название, версия Производитель Платформы Цена Где взять Примечание
GNU Emacs 19.19 Ready-to-Run Software (USA, Groton) HR-UX, OSF/1Su $175 - 1 польз. $775 - 10 польз. $695 - модуль поддержки С, С++ т.(1-508) 448-39-59 GNU Emacs 19.22 в текстах есть на AIX ftp.demos.su в каталоге /unix/gnu
UniPress Emacs 2.20e UniPress Software Inc. (USA, Edison) AIX, HP-UX, IRIX, Solaris и др. $395 - 1 польз. 995 - 10 польз. т.(1-908) 287-21-00 -
Siren Editor 1.0 Siren Software Corp. (USA, Menlo Park) AIX, HP-UX, IRIX, SCO, SunOS $249 - 1 польз. $1795 - 10 польз. т.(1-415) 322-06-00 -
Iris X Editor 1.3.7 Iris Computing Labs (USA, Santa Fe) AIX, HP-UX, IRIX, Solaris, SunOS $295 - 1 польз. $2212 - 10 польз. тел. в Москве: (095) 168-88-23 Имеются две демо-версии для SCO и HP-UX на ftp.demos.su в каталоге /demo/ted
TED 2.1a Eagle Dynamics Ltd. (Россия, Москва) SCO, Xenix, ISC, SVR4, BSD, Coherent, HP-UX, Solaris, AIX, Topix, Dynix, SINIX, Bestix, ICL DRS.NX и др. от $287 на любое количество польз. andy@eagle.msk.su -
Nedit 3.1.1 Fermi National Accelerator Lab (USA, Batavia) AIX, Ultrix, OSF/1, SCO бесплатно - на в каталоге /unix/X11. Только под X/Motif, в исходных текстах
AUIS ez Andrew Consortium (USA, Pitsburg) AIX, Solaris, SunOS, HP-UX, SCO, Ultrix, Linux, VAX/BSD, IRIX бесплатно - на ftp/andrew/cmu/edu в каталоге /pub/AUIS. Только под X11, в исходных текстах
YUI 1.0 ИТК (Россия, Ижевск) Linux, ISC, SunOS, BSD, DOS бесплатно - на почтовом сервере mailserv@izhmark/udmurtia.su в каталоге /unix/edit/yui. Бета версия, в исполняемом виде.
VEDIT 2.30 Greenview Data Inc. (USA, Ann Arbor) SCO, Xenix, DOS $350 - 5 польз. тел. в Москве: (095) 158-95-20 Только для тестовых терминалов
Edit*2000 1.40 Computer Innovations (USA, Shrewbury) SCO, Solaris, SVR4 и др. $395 - 1 польз. $2495 - 10 польз. т.(1-908) 542-59-20 -
SlickEdit 2.3 MicroEdge Inc. (USA, Raleigh) AIX, HP-UX, IRIX, SCO, Solaris, SunOS, SVR4 и др. $425 - 1 польз. $2950 - 10 польз. т.(1-919) 790-16-91 -
REDT 2.3.2 Washington State Univ. (USA, Pullman) AIX, IRIX, USL, SunOS, HP-UX, Ultrix ??? т.(1-509) 335-11-00 -
nu/TPU 3.0 a/Soft Development Inc. (USA, Bedford) AIX, HP-UX, Solaris, SunOS, IRIX, OSF/1 и др. $499 - 2 польз. $1500 - 8 польз. т.(1-603) 666-66-99 Эмулятор редактора EVE из VAX/VMS
<
Таблица 1.
Общая информация о редакторах.

Название, версия GNU Emacs 19.19 UniPress Emacs 2.20e Siren Editor 1.0 Iris X Editor 1.3.7 TED 2.1a VEDIT 2.30 Nedit 3.1.1 Edit*2000 1.40 SlickEdit 2.3 nu/TPU 3.0
Ограничение
Макс. длина строки O/C O/C O/C O/C O/C O/C O/C O/C 25 O/C
Макс. размер файла O/C O/C O/C O/C O/C O/C O/C O/C 1 GB O/C
Макс. число открытых файлов O/C O/C O/C O/C O/C 37 O/C O/C О/С O/C
Возможности редактирования
Поддержка мыши под XWS + + + + + + - - +
Автосдвиг + + + + + + + + + -
Прямоугольные блоки + + + + + + - + + +
Замена табуляции пробелам + + - + + + + + + +
Нерегулярные табуляции + + - - + - - + +
Перемещение курсора за EOL - - + - + + - + + +
Перестраиваемая клавиатура + + + + + + + + + +
Эмуляция клавиатур vi, EDT EDT - - - WordStar, Wperfect, brief - - emacs, brief EDT, Wperfect
Редактирование DOS-файлов + + + + + + - + + -
Редактирование двоичных файлов + + - - + + - + + -
Редактирование МАС файлов - + + - + - - + + -
Макроязык + + - + - + - - + +
Макротладчик + - - - - + - - - -
Поддержка программирования
Шаблоны языковых конструкций + + - - + - - - + +
Компилирование из редактора + + - + + + + + + +
Поиск ошибок компиляции + + - + + + + + + -
Цветовое выделение синтаксиса + - - - - - - - - -
Проверка парности скобок + + - + + + + + + +
Тэги + + - + + - + - + -
Обработка текста
Перенос слов (word wrap) + + - - + + + + + +
Выравнивание по левой границе + + - + + + + + + +
Выравнивание по правой границе - + - - + + - - - +
Полное выравнивание - + - - + + - - + +
Центрирование - + - - + - - - - +
Проверка правописания + + - - + + - - - -
Примечание. О/С - "определяется информационной системой"

Таблица 2.
Сравнительная характеристика возможностей редакторов.

// Издательство "Открытые Системы" (www.osp.ru)
Постоянный адрес статьи: http://www.osp.ru/os/1994/04/72.htm


Регулярное выражение


Для осуществление поиска в AWK языке допускается использование регулярных выражений, определенных в описании SED, (см. ``Неинтерактивный текстовый редактор SED'' 2.1), заключенных в``/ /''. Дополнения к использованию регулярных выражений, допускаемые в AWK-языке:

"( )" - Скобки допускаются для группирования;

" |" - Указание альтернативы "или";

" + " - Плюс, стоящий за регулярным выражением означает любую последовательность вхождений этого выражения, начиная с 1;

" ? " - Знак вопроса за регулярным выражением означает 0 или 1 вхождений этого выражения;

[A-Z] - Допускается сокращенная форма записи для рангов ASCII символов;

Установленный порядок выполнения операторов на одном скобочном уровне: "[] * + ? конкатенация |".

Например:

/Olga/ - Указывает на строки, содержащие Olga.

/[Oo]lga|[Mm]ike|[Mm]al/ - Указывает на строки, содержащие Olga или olga или Mike или mike или Mal или mal.

/number[0-9]/ - Указывает на строки, содержащие number0 или number1 или ... number9.

/\/.+\// - Указывает на строки, содержащие любое количество символов, больше или равное 1, заключенных в / /.


Для осуществления отбора строк для редактирования, в адресах команд SED допускается использование регулярных выражений, заключенных в "/ /" и определяемых следующим образом:

Регудярное выражение указывается в разделителях: "/ /" ; любой символ (кроме специальных: \[.^*$ ) является регулярным выражением себя; ^ в начале регулярного выражения указывает на пустой символ в начале регулярного выражения. (Т.е. на начало строки) $ в конце регулярного выражения указывает на пустой символ в конце регулярного выражения. (Т.е. на конец строки); \n - вставленный newline (новая строка); . - любой символ (кроме обыкновенного newline );

* - стоящая за регулярным выражением означает любую последовательность вхождений этого выражения, начиная с 0; [ ] - указывает на один из символов, приведенных внутри; [^ ] - указывает на один из символов, кроме приведенных внутри; \ - перед любым символом, кроме цифр и "(" , ")" , означает этот символ. ( Экранирование специальных символов). \(x\) -, где x - регулярное выражение, указывает на x . \d -, где d - цифра, указывает копию d -того выражения, которое заключалось в скобки "\(" и "\)" ; конкатенация регулярных выражений является регулярным выражением.

Примеры:

/olga/ - указывает на строки содержащие "olga" , "abcolgadef" ,...;

/ol.*ga/ - указывает на строки, содержащие "olga" , "olabcga" ,....;

/^[Oo]lga/ - на строки, начинающиеся с "Olga" или "olga" ;

/./ - попадают все строки, имеющие хотя бы 1 символ (не newline );

/\./ - попадают строки, содержащие "." ;

/^[^ ]/ - строки, не начинающиеся с " " ;

/\(ol\).*\1/ - строки, содержащие два вхождения "ol" не подряд.



Режим командной строки


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

Команды отображаются в нижней части экрана (в ``командной'' строке редактора).



Режимы работы VI


Первое, что узнают пользователи о редакторе vi - два режима его работы : командный и вставки текста. Командный - режим ввода команд. Обычно эти команды короткие - состоят из одной или двух букв. Режим вставки текста - вставляется в файл то, что вы набираете на клавиатуре.

По умолчанию редактор запускается в командном режиме. Для переключения в режим вставки текста существует несколько команд. Наиболее часто используемые среди них - "a" и "i". Ниже мы остановимся подробнее на этих командах. Чтобы выйти из режима вставки текста нажмите клавишу "Escape". Если у вас нет такой клавиши попробуйте "^[" или "control-[" Вы можете нажать клавишу "Escape" дважды и редактор все равно будет командном режиме. Нажатие клавиши "Escape" в командном режиме не переведет его ни в какой другой. Может только прозвучать сигнал, сообщающий, что вы уже находитесь в командном режиме.



РТПЗТБННЩ-РЕТЕЧПДЮЙЛЙ Ч Linux


бЧФПТ: дЕОЙУ лПМЙУОЙЮЕОЛП,
пРХВМЙЛПЧБОП: 29.4.2003

ї 2002, йЪДБФЕМШУЛЙК ДПН ?лпнршафеттб? |

цХТОБМ ?упжфеттб? |

ьФПФ НБФЕТЙБМ чЩ ЧУЕЗДБ УНПЦЕФЕ ОБКФЙ РП ЕЗП РПУФПСООПНХ БДТЕУХ:љ

хЦЕ ДБЧОП УФБОДБТФОЩНЙ ПЖЙУОЩНЙ РТЙМПЦЕОЙСНЙ, ХУФБОПЧМЕООЩНЙ РПЮФЙ ОБ ЛБЦДПН ЛПНРШАФЕТЕ, УФБМЙ РТПЗТБННЩ?РЕТЕЧПДЮЙЛЙ. уТЕДЙ РТПЗТБНН ДМС Windows ОБЙВПМЕЕ ЙЪЧЕУФОЩНЙ СЧМСАФУС Stylus (Prompt), Socrat Й Lingvo.

ч ЬФПК ОЕВПМШЫПК УФБФШЕ НЩ РПЗПЧПТЙН П РТПЗТБННБИ-РЕТЕЧПДЮЙЛБИ ДМС Linux ? Mueller Й Slowo. рТБЧДБ, РЕТЕЧПДЮЙЛБНЙ ЧУЕ ЬФЙ РТПЗТБННЩ НПЦОП ОБЪЧБФШ МЙЫШ У ВПМШЫПК ОБФСЦЛПК. чУЕ ЬФЙ РТПЗТБННЩ ? ЬФП УМПЧБТЙ. рП УЧПЕК ТБВПФЕ ПОЙ ОБРПНЙОБАФ Lingvo: ЧЩ ЧЧПДЙФЕ УМПЧП, Б УМПЧБТШ РЕТЕЧПДЙФ ЕЗП. б ЧПФ РПМХЮЙФШ ВПМЕЕ ЙМЙ НЕОЕЕ УЧСЪОЩК РЕТЕЧПД РЕТЕМПЦЕОЙС ОЕ РПЪЧПМСЕФ ОЙ ПДОБ РТПЗТБННБ.

рТПЗТБННБ MOVA (ЙОПЗДБ ЕЕ ОБЪЩЧБАФ Mueller ЙЪ-ЪБ ЙУРПМШЪПЧБОЙС ОЕА УМПЧБТС нАММЕТБ) ? ПЮЕОШ ХДПВОЩК Ч ЙУРПМШЪПЧБОЙЙ РЕТЕЧПДЮЙЛ (ТЙУ. 1), ТБЪТБВПФБООЩК еЧЗЕОЙЕН гЩНВБМАЛПН. рТПЗТБННБ ТБУРТПУФТБОСЕФУС РП МЙГЕОЪЙЙ GPL, ФП ЕУФШ УЧПВПДОП.

љ

тЙУ. 1. рТПЗТБННБ movaTK

дМС ХУФБОПЧЛЙ РТПЗТБННЩ MOVA ОХЦОП ХУФБОПЧЙФШ ФТЙ РБЛЕФБ:

mova mueller7-mova xfonts-phonetic

рЕТЧЩК РБЛЕФ УПДЕТЦЙФ РТПЗТБННХ mova, ЧФПТПК ? ЬФП УМПЧБТШ ДМС РТПЗТБННЩ, Б ФТЕФЙК ? ЬФП ОБВПТ ЫТЙЖФПЧ, ЛПФПТЩЕ ЙУРПМШЪХЕФ РТПЗТБННБ.

рПУМЕ ХУФБОПЧЛЙ РБЛЕФПЧ ЪБРХУФЙФШ РТПЗТБННХ mova НПЦОП МЙВП ЛПНБОДПК mova ЙМЙ ЦЕ ЛПНБОДПК movaTK. рЕТЧБС ЪБРХУЛБЕФ РТПЗТБННХ Ч ФЕЛУФПЧПН ТЕЦЙНЕ, Б ЧФПТБС ? Ч ЗТБЖЙЮЕУЛПН. нПЦОП ФБЛЦЕ ЪБРХУФЙФШ РТПЗТБННХ ЛПНБОДПК movaMTK. ч ЬФПН УМХЮБЕ ВХДЕФ ЙУРПМШЪПЧБО ДТХЗПК ЧЙД ЙОФЕТЖЕКУБ (УН. ТЙУ. 2, 3). фБЛПК ЙОФЕТЖЕКУ ХДПВОП ЙУРПМШЪПЧБФШ, ЕУМЙ ЧЩ ИПФЙФЕ ПУФБЧЙФШ ОБ ЬЛТБОЕ ТЕЪХМШФБФ РТЕДЩДХЭЕЗП РЕТЕЧПДБ, ИПФС Ч ЬФПН ТЕЦЙНЕ РТПЗТБННБ ТБВПФБЕФ НЕДМЕООЕЕ.

љ

тЙУ. 2. рТПЗТБННБ movaMTK

љ

тЙУ. 3. лБЦДЩК РЕТЕЧПД РТПЗТБННЩ movaMTK ПФЛТЩЧБЕФУС Ч ОПЧПН ПЛОЕ

вПМШЫЙН РТЕЙНХЭЕУФЧПН РТПЗТБННЩ СЧМСЕФУС УЛПТПУФШ ЕЕ ТБВПФЩ. рТПЗТБННБ ЙУРПМШЪХЕФ ИЕЫЙТПЧБОЙЕ УМПЧБТС, ВМБЗПДБТС ЮЕНХ РПЧФПТОЩК ЧЩЪПЧ РТПЗТБННЩ ОЕ ЪБОЙНБЕФ НОПЗП ЧТЕНЕОЙ ? ПУОПЧОЩЕ ЪБДЕТЦЛЙ РТЙИПДСФУС ОБ ЪБЗТХЪЛХ УМПЧБТС Ч РБНСФШ, ЛПФПТБС РТПЙУИПДЙФ, ЛБЛ РТБЧЙМП, РТЙ РЕТЧПН ЪБРХУЛЕ РТПЗТБННЩ. бЧФПТ ПФНЕЮБЕФ, ЮФП РТПЗТБННБ НПЦЕФ ТБВПФБФШ, ЕУМЙ ОБ ЧБЫЕН ЛПНРШАФЕТЕ ХУФБОПЧМЕОП 32нВ ПРЕТБФЙЧОПК РБНСФЙ ЙМЙ ЦЕ 64нВ РТЙ ЪБЗТХЦЕООПН KDE. с ХУФБОПЧЙМ РТПЗТБННХ ОБ ОЕ ?ХМШФТБ УПЧТЕНЕООПК? НБЫЙОЕ ? Celeron 433/128MB (Red Hat 7.3/KDE3) ? РТПЗТБННБ РТПУФП ?МЕФБМБ?, РПЬФПНХ ОЕ ПЮЕОШ ФП ВЕУРПЛПКФЕУШ П ФПН, ЮФП РТПЗТБННБ ВХДЕФ НЕДМЕООП Х ЧБУ ТБВПФБФШ. еУМЙ ЦЕ Х ЧБУ УФБТЕОШЛЙК ЛПНРШАФЕТ У ОЕВПМШЫЙН ЛПМЙЮЕУФЧПН ПРЕТБФЙЧОПК РБНСФЙ, РТПЮЙФБКФЕ ЖБКМ /usr/share/doc/mova-4.0/readme_mova_koi.txt ? Ч ОЕН ЧЩ ОБКДЕФЕ ТЕЛПНЕОДБГЙЙ ПФОПУЙФЕМШОП РПЧЩЫЕОЙС РТПЙЪЧПДЙФЕМШОПУФЙ ТБВПФЩ РТПЗТБННЩ.

тБВПФБФШ У РТПЗТБННПК ПЮЕОШ РТПУФП: ЧЧЕДЙФЕ УМПЧП ЙМЙ РТЕДМПЦЕОЙЕ Ч МЕЧХА ЮБУФШ ПЛОБ РТПЗТБННЩ, ЧЩДЕМЙФЕ ЕЗП (movaTK) Й ОБЦНЙФЕ ПДОХ ЙЪ ЛОПРПЛ ? Word, Symbols, Tandem of Words, Tandem of Symbols.

Word ? РТПЗТБННБ ВХДЕФ ЙУЛБФШ Ч УМПЧБТЕ УФБФША, ЛПФПТБС ОБЮЙОБЕФУС ОБ ЧЩДЕМЕООПЕ УМПЧП (ЙМЙ РЕТЧПЕ УМПЧП ЙЪ РТЕДМПЦЕОЙС)

Symbols ? РТПЗТБННБ ВХДЕФ ЙУЛБФШ Ч УМПЧБТЕ УФБФША, ЛПФПТБС ОБЮЙОБЕФУС ЧЩДЕМЕООЩЕ УЙНЧПМЩ.

Tandem of Words ? РТПЗТБННБ ВХДЕФ ЙУЛБФШ Ч УМПЧБТЕ УФБФША, УПДЕТЦБЭХА ЧЩДЕМЕООПЕ УПЮЕФБОЙЕ УМПЧ.

Tandem of Symbols ? РТПЗТБННБ ВХДЕФ ЙУЛБФШ Ч УМПЧБТЕ УФБФША, ЛПФПТБС УПДЕТЦЙФ ЧЩДЕМЕООПЕ УПЮЕФБОЙЕ УЙНЧПМПЧ.

дМС ЧЩИПДБ ЙЪ РТПЗТБННЩ ОБЦНЙФЕ ЛМБЧЙЫХ Esc.

рТПЗТБННХ НПЦОП УЛБЮБФШ РП БДТЕУХ . уМЕДХЕФ ПФНЕФЙФШ, ЮФП РТПЗТБННБ ХЦЕ ЧИПДЙФ Ч УПУФБЧ ОЕЛПФПТЩИ ДЙУФТЙВХФЙЧПЧ, ОБРТЙНЕТ, ALT Linux Junior 2

рТПЗТБННБ Slowo ТБЪТБВПФБОБ дНЙФТЙЕН бОЙУЙНПЧЩН. лТПНЕ ТБВПФЩ Ч ТЕЦЙНЕ УМПЧБТС РТПЗТБННБ ХНЕЕФ РПЛБЪЩЧБФШ ФТБОУЛТЙРГЙЙ. лБЛ Й Ч УМХЮБЕ У РТПЗТБННПК MOVA ЙНЕАФУС ФТЙ ТБЪМЙЮОЩЕ ЧЕТУЙЙ РТПЗТБННЩ:



Руководство по редактору vi для начинающих.


Wei-Meng Lee, 2003. Перевод - Master aka Vadim Tkachenko, .

Ягуар (имеется в виду MacOS X 10.2 Jaguar- прим. SHuRuP'а) включает несколько текстовых редакторов. Из всех этих приложений опытные пользователи Unix предпочетают vi (Visual Editor). Пока пользователи GUI систем используют user friendly текстовые процессоры и редакторы, существует vi, который является мощным и функциональным текстовым редактором, а также экономичным и эффективным.

Тем не менее, изучение vi требует терпения и небольшой практики; следовательно, кривая изучения более крутая, чем при изучении текстового редактора, типа BBEdit. Но программисты, которые обычно используют vi, клянутся в этом. Для некоторых, использование vi - символ силы, отличающий мужчин от мальчиков.

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

Запуск vi

Для запуска vi необходимо набрать в терминале:

vi textfile

Когда vi загрузится, вы увидете окно, похожее на следующее:



Первая важная вещь - это то, что редактор vi работает в двух режимах: режиме команд (Command mode) и режиме вставки (Insert mode). Режим команд используется, чтобы выполнять команды, например, команды удаления строки или символа. Чтобы начать печатать, необходимо перейти в режим вставки. Когда вы запускаете vi, он находится в режиме команд.

Перемещение курсора

Как показано на рисунке, чтобы управлять курсором, можно использовать клавиши h, j, k и l:



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

Особенно интересно, что для перемещения курсора на пять знаков вправо, вы можете набрать 5l; чтобы переместить курсор на три линии вниз, вы можете набирать 3j и т.д.

Для того, чтобы переместить курсор на начало линии, нажмите 0 (числовой нуль). Для того, чтобы переместить курсор на конец линии, нажмите $.

Давайте попытаемся набирать некоторый текст в наш файл.

Вставка текста

Чтобы начать печатать, необходимо перейти в режим вставки. Нажмите i (для вставки символов) и введите следующее:

vi is an editor in Unix

Что происходит, если вы сделали ошибку и хотите ее изменить? Скорее всего, вы захотите переместить ваш курсор в символе, который нужно редактировать, и, делая это, вы будете использовать клавиши перемещения курсора, и тогда странные символы появятся у вас на экране. Если это так - не паникуйте. Просто нажмите клавишу Esc, чтобы возвратиться в режим команд. Нажатием клавиши Esc осуществляется переход из режима вставки в режим команд.

Добавление текста

Теперь, когда вы напечатали первое предложение, давайте его отредактируем. Я хочу прочитать: "vi is a powerful editor in Unix". Для этого переместите ваш курсор на символ "a" (подчеркивание указывает позицию вашего курсора):

vi is an editor in Unix

Нажмите a (для добавления символов) и введите " powerful". Должно получиться:

vi is a powerfuln editor in Unix

Вы увидели различие между a и i? Если бы вы нажали i, когда курсор находился на символе "a" и ввели " powerful", то у вас получилось бы следующее:

vi is powerfulan editor in Unix

Видите разницу?

Для того, чтобы вставить новую строку, просто нажмите клавишу Enter или используйте o, чтобы вставить новую строку между двумя строками.

Удаление текста

Для того, чтобы удалить символ, переместите курсор на символ и нажмите x.

Для того, чтобы удалить целое слово, например "powerful", переместите курсор к началу слова и нажмите dw:

vi is a powerful editor in Unix

Для того, чтобы удалить целую строку, переместите курсор на строку, которую вы хотите удалить, и нажмите dd. Для того, чтобы удалить несколько линий, нажмите dnd, где n - количество строк, подлежащих удалению. Например, d2d удалит две cтроки.

Сохранение файла

Если Вы запускаете vi с параметром <имя файла>, то, нажав :w и Enter, можно сохранить результат изменений. Когда вы нажмете : в командном режиме, курсор переместится в нижнюю часть экрана. Здесь можно будет вводить команды.

Если Вы запускаете vi без параметров, то вы должны определить имя файла:

~
~
:w newfile.txt

Вы можете использовать этот метод, чтобы сохранять файл под другим именем. Если имя файла, которое вы определяете, существует, то vi не перезапишет существующий файл. В таком случае, используйте :w!, чтобы перезаписать существующий файл.



Вставка файла

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

~
~
:r anotherfile.txt

Просто сначала установите курсор на строке, где необходимо вставить файл, а затем нажмите :r.

Выход из vi

Для того, чтобы выйти из vi, используйте команду :q. Если файл модифицирован и вы не сохранили изменения, vi не позволит вам выйти. Для того, чтобы выйти не сохраняя результатов, используйте :q!.

Открытие файла

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

~
~
:e textfile.txt

Копирование, вырезка и вставка текста

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


v i is an editor in Unix
Real programmers use vi!
Have you tried it?
yy скопирует строку "vi is an editor in Unix"
Для копирования слова используйте yw.

vi is an editor in Unix
Real programmers use vi!
Have you tried it?
yw скопирует слово "editor"
Для копирования от курсора до конца строки используйте y$.

vi is an editor in Unix
Real programmers use vi!
Have you tried it?
y$ скопирует строку "editor in Unix"
Для вставки текста используйте команду p.

vi is an editor in Unix
Real programmers use vi!
Have you tried it?
В продолжение предыдущего примера,
P (заглавная p):
vi is an editor in Unixeditor in Unix
Real programmers use vi!
Have you tried it?

p (строчная p):
vi is an eeditor in Unixditor in Unix
Real programmers use vi!
Have you tried it?
Заметьте, что для операций вырезки, вы можете использовать команду d (см. "Удаление текста") для вырезки блока текста и команду p для вставки блока текста.

Отмена и возврат

Вы можете отменить ваше действие, нажав u. Заметьте, что вы можете отменить только последнее действие. Для возврата действия, используйте (.).

Изменение и замена текста

Вы можете изменить текст в файле, используя команду c. Например, cw позволяет изменить целое слово:

vi is an editor in Unix
Real programmers use vi!
Have you tried it?
cw Solid (и нажать escape) замена слова "Real" словом "Solid"
Для изменения последних трех слов используйте c3b.

Для того, чтобы изменить слово, начиная с текущей позиции курсора и до конца строки, используйте c$.

Для того, чтобы изменить слово, начиная с начала строки и до текущей позиции курсора, используйте c0 (числовой нуль).

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

Поиск текста

Для того, чтобы искать конкретную часть текста в vi, используйте команду /, сопровожденную текстом, который необходимо найти. Например, /in ищет первое появление слова "in". Для повторения поиска нажмите / и затем Enter.

Чтобы заменять все слова в документе, вы можете использовать команду s. Например, :s/in/on заменит первое появление слова "in" словом "on".

:s/in/on/g заменит все слова "in" словом "on" на текущей строке.

:1,45s/in/on/g заменит все слова "in" словом "on" с 1-ой по 45-ю строки.

:%s/in/on/g заменит все случаи слова "in" словом "on" во всем файле.

Переход к строке

Если вы редактируете большой файл, можно переместиться непосредственно на нужную строку, печатая номер строки. Например, :4 переместит курсор непосредственно на 4-ю строку. Это полезно, когда вы отлаживаете программу, и компилятор указал ошибку в конкретной строке.

Я надеюсь, что это руководство оказалось для вас полезным. Помните, чем больше вы используете vi, тем больше вы получаете от него удовольствия. Удачи!

Источник - LinuxBegin.ru
http://linuxbegin.ru/

Адрес этой статьи:
http://linuxshop.ru/linuxbegin/article244.html


Русификация


С чего начинается Linux? С картинки в твоем букв... Нет, не то. Правильно, с консоли!
Нужна ли обычному пользователю консоль? Правильно, практически не нужна!
Нужен ли обычному пользователю русский язык в консоли в тех редких случаях, когда консоль нужна? - Правильно, не нужен на фиг!
Тем не менее, если кому-то это очень нужно (вдруг X-ы свалились), его файл /etc/sysconfig/i18n должен выглядеть так:

LANG="en_US.UTF-8" SUPPORTED="en_US.UTF-8:en_US:en:ru_RU.UTF-8:ru_RU:ru" SYSFONT="latarcyrheb-sun16"

Прошу заметить: мы получили UTF-8-ную консоль.
Для тех, кто в консоли хочет иметь koi8-r (рецепт взят с linux.org.ru):

LANG="ru_RU.UTF-8" SUPPORTED="en_US.UTF-8:en_US:en" SYSFONT="koi8u_8x16" SYSFONTACM="koi8r"

А теперь переходим к самому главному для нас (пользователей) -X-Window.



Русификация Linux


. Источник - .

Русификация консоли

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

Как Linux осуществляет вывод какой-либо строки на экран? Сначала строка пропускается через так называемую screen map (карту соответствия), перекодирующую выводимые символы в соответствии с используемым терминалом шрифтом. Это позволяет, в принципе, использовать различные кодировки, не изменяя шрифт на консоли.

В Linux и прочих Unix-подобных системах в качестве основной русской кодировки используется кодировка KOI8-R. У этой кодировки есть много преимуществ по сравнению с используемыми в других системах IS08859-5 и кодовыми страницами 1251 и 866, но мы не будем их здесь обсуждать.

Итак, что же нужно сделать, чтобы настроить вывод символов в кодировке KOI8 на экран?

Во-первых, мы должны загрузить русский шрифт. Загрузка шрифта в Linux выполняется при помощи команды setfont. В принципе, в комплект поставки Linux входят KOIS-шрифты, но они весьма плохо выглядят, поэтому мы используем шрифт Суг_а8х16 в кодировке, соответствующей кодовой таблице 866.

В файл /etc/rc.d/rc.font добавьте строку

setfont Суr_а8х16

или, если команда setfont уже присутствует в этом файле, замените указанный после нее шрифт на Суr_а8х16.

Во-вторых, мы должны установить необходимую карту соответствия, которая позволит на лету перекодировать символы из KOI8 в 866 для их корректного вывода на экран при помощи установленного шрифта. Установка карты соответствия выполняется при помощи команды mapscrn.

В файл /etc/rc.d/rc.font добавьте строку

mapscrn koi2ait

Однако того, что мы сделали, еще не достаточно. На каждой консоли, на которой вам нужны русские буквы, карта соответствия должна быть активизирована. Для этого на соответствующую консоль должна быть выведена ?маги-

ческая последовательность? ESC-(K. Для вывода этой последовательности вы можете использовать команду

echo -ne ' 33(К'

Параметр -п запрещает вывод символа новой строки по окончании работы команды, параметр -е указывает, что вместо выражений вида ххх должен выводиться символ с восьмеричным кодом ххх. В данном случае будет выведен


символ с кодом 033 - то есть, ESC.

Конечно, вы можете каждый раз вводить эту команду вручную на той консоли, на которой вам нужны русские буквы, но этот процесс можно автоматизировать.

В файл /etc/rc.d/rc.local добавьте следующий текст:

for i in 1 2 3 4 5 6

do

echo -ne ' 33(К' > /dev/tty$i

done

Эта последовательность команд определяет цикл (for ... do ... done), в котором переменная i последовательно принимает значения 1-6 (i in 1 2 3 4 5 6). В теле цикла выполняется вывод нужной "магической последовательности"

ESC-(K на консоль с номером i (/dev/tty$i, знак $ указывает, что вместо $i должно быть подставлено значение переменной, то есть последовательно 1,2, ...,6).

На этом настройка вывода на экран завершена.

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

В файл /etc/rc.d/rc.local добавьте команду

loadkeys ru1

Раскладка ru1 позволит вам вводить символы в кодировке KOI8, переключаясь между латинской и русской раскладками при помощи правой клавиши Alt.Теперь вы можете перезагрузить компьютер или просто вручную выполнить описанные команды.

Однако на этом русификация консоли не закончена. Если вы попытаетесь ввести что-либо русскими буквами непосредственно в командной строке, то у вас, скорее всего, ничего не получится. Нам еще предстоит объяснить, как трактовать русские символы трем важным программам : bash, Is и less.

Начнем с bash - интерпретатора командной строки , той программы, которая выводит приглашение $ (или #, если вы работаете от root) и ожидает ввода команд. Для управления поведением bash при использовании символов из второй половины кодовой таблицы используется файл .inputrc, который находится в домашнем каталоге пользователя.

Создайте в своем домашнем каталоге файл .inputrc, сoдержащий следующие строки:

set meta-flag on

set convert-meta off

set output-meta on

Выйдите из системы (введя logout) и войдите в нее снова. Все, теперь вы можете вводить русские буквы в командной строке и даже создавать файлы с русскими именами. Попробуйте ввести :>"Привет, мир", чтобы создать пустой файл с именем Привет, мир.



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

В конец файла /etc/profile добавьте строку

alias ls='ls -N $LS_OPTIONS'

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

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

В конец файла /etc/profile впишите строчку

export LESSCHARSET=latin1

На этом русификация консоли закончена. Для того чтобы сделанные нами в файле /etc/profile изменения вступили в силу, вы должны выйти из системы и войти в нее снова.

Русификация Xwindow System

Pусские шрифты KOI8-R на XFree86

В современных дистрибутивах они скорее всего уже стоят. Первым делом (на работающем X сервере) запустите :

$ xlsfonts -fn "*-koi8-r"

Если список не пустой - примите наши поздравления :-)

Начиная с версии XFree86 3.3.2 русские фонты(шрифты) cronyx-* входят прямо в дистрибутив XFree. Если фонтов нет -- их нужно установить. Для Red Hat просто поставьте пакет XFree86-cyrillic-fonts-XXXX.rpm . Фонты установятся в /usr/X11R6/lib/X11/fonts/cyrillic .

Далее нужно подключить шрифты к X Window. Убедитесь, что в файле /etc/X11/XF86Config прописан путь :

Section "Files"

...

FontPath "/usr/X11R6/lib/X11/fonts/cyrillic"

FontPath "/usr/X11R6/lib/X11/fonts/75dpi"

...

EndSection

Путь с cyrillic лучше всего поставить первым. Перезапустите X сервер и проверьте командой : xlsfonts -fn "*-koi8-r" .



Хорошим решением также будет использование фонт-сервера. Во-первых, он может быть один на всю организацию, а во-вторых, в современных фонт-серверах можно использовать шрифты TrueType. Для Red Hat фонт-сервер xfsft входит в пакет Xfree86-xfs.

Существует два основных способа русификации клавиатуры X :

XKB, применяющийся в современном X11R6

xmodmap, применявшийся в X11R5

При русификации X 3.3.x через XKB в /etc/X11/XF86Config должно быть прописано:

Section "Keyboard"

...

XkbRules "xfree86"

XkbModel "pc101"

XkbLayout "ru"

XkbOptions "grp:shift_toggle"

EndSection

Для X 4.0.x

Section "InputDevice"

...

Driver "keyboard"

Option "XkbRules" "xfree86"

Option "XkbModel" "pc101"

Option "XkbLayout" "ru"

Option "XkbOptions" "grp:shift_toggle"

EndSection

В зависимости от клавиатуры опция Model может быть "pc101", "pc104" или "pc105", а комбинации переключения:

grp:toggle правый Alt (с "фиксацией")

grp:caps_toggle Caps_Lock

grp:shift_toggle два Shift

grp:ctrl_shift_toggle Control+Shift

grp:ctrl_alt_toggle Control+Alt

Для 4.0.x добавились новые :

grp:alt_shift_toggle Alt+Shift

grp:menu_toggle Menu (модель должна быть pc104, pc105)

В kde, начиная с 2.2.1 можно переключаться с помощью ctrl+alt+K, если включен выбор раскладки в control center на закладке peripherals.

Общие проблемы

Смонтировать диск, чтобы русские имена файлов были видны

Для vfat примерно так (cтрочка из /etc/fstab/):

/dev/hda5 /mnt/d vfat noexec,rw,umask=002, codepage=866, iocharset=koi8-r, gid=100 0 0

(в одну строчку)

Потом mount /mnt/d. Еще в ядро (>=2.0.36) должны быть включены соответствующие кодовые страницы (возможно, в виде модулей /lib/ modules/`uname -r`/fs/nls_*) - CP866 и KOI8-R, так что возможно (хотя скорее всего нет) ядро придется перекомпилировать.

Для CD, содержащего файлы с русскими именами:



$ mount -t iso9660 -o iocharset=koi8-r /dev/cdrom /mnt/cdrom

Параметр codepage для isofs не нужен, в файловой системе JOLIET имена файлов хранятся в UNICODE. Смысл этих опций можно узнать в 'man mount' или в документации исходников ядра /usr/src/linux/Documentation/filesystems/ или /usr/doc/ kernel/filesystems/.

увидеть русские буквы в именах файлов на диске Samba

Добавить в /etc/smb.conf

[global]

character set = koi8-r

client code page = 866

preserve case = yes

short preserve case = yes

перекодировать из DOS/Win кодировки в KOI8-R

Перекодировщиков CP1251 и CP866 --> KOI8-R просто огромное количество. Наиболее широко распространены iconv (входит в поставку glibc(т.е. есть почти на всех дистрибутивах)) и GNU recode ( ftp://prep.ai.mit.edu/pub/gnu/recode/)

$ iconv -f866 -tKOI8-R -o infile

$ recode CP1251..KOI8-R winfile.txt

в mc увидеть pусские буквы

F9 - options - display bits - Full 8 bit

telnet

Если возникают проблемы с вводом русских символов, надо написать файлик ~/.telnetrc со следующей строкой:

DEFAULT set outbinary

Вы можете встретить проблемы при работе в кодировке Win-1251 -- не передается маленькая русская буква "я" 0xff. У протокола TELNET 0xff -- это первый символ управляющей последовательности. Дабы передать собственно "я", нужно его удваивать : 0xff, 0xff. В KOI8-R такой проблемы нет.

русифицировать TeX под koi-8

TeX и LaTeX во всех современных дистрибутивах говорят по-русски с раздачи. В этом случае имеется документ cyrguide.*, который и содержит развернутый ответ на вопрос о русификации TeX.

Переносы не всегда работают "из коробки", иногда надо поправить language.dat, и пересобрать форматы. Вот что пишет Alex Nikiforov:

Если уж о последних версиях, то в RH-6.0 с tetex 0.9 у меня получилось так:

$ texconfig

выбрать

hyphenation -> latex

раскомментировать russian

Добавить в LaTeX файлах

usepackage[T2A]{fontenc}

usepackage[koi8-r]{inputenc}

usepackage[english,russian]{babel}

и в файле можно переключаться между русским и английским командами Russian и Engish. Чтобы добавить форматы из cyrplain набора в texconfig выбрать FORMATS и добавить



cyrtxinf tex language.dat cyrtxinf.ini

для русского texinfo. Аналогично для cyrblue и cyramstx. Чтобы добавить формат cyrtex ( русский TeX ) проще в каталоге web2c выполнить:

initex 'input cyrtex.ini dump'

и бросить символическую ссылку с именем cyrtex на tex ( например в /usr/bin ). Чтобы переключиться на русский в этих plain форматах, нужно использовать команду

language N

где N - номер, под которым числится русский язык в получившейся раскладке.


Источник - LinuxBegin.ru


Адрес этой статьи:





u="http://stat.iplog.md/"; d=document; nv=navigator; na=nv.appName; j="N"; d.cookie="b=b"; c=0; if (d.cookie) c=1; n=(na.substring(0,2)=="Mi")?0:1; rn=Math.random(); z="rn="+rn+"&c="+c; js="1.0";

js="1.1"; j = (navigator.javaEnabled()?"Y":"N"); js="1.2"; s=screen; px=(n==0)?s.colorDepth:s.pixelDepth; z+="&wh="+s.width+'x'+s.height+"&px="+px;

js="1.3"

y=""; y+=""; d.write(y);if(!n) { d.write("


Русификация PCVT консоли


Версии OpenBSD 2.8 и ниже, содержат три различных русских шрифта в кодировке koi8-r для русификации PCVT консоли: koi8-8x16, koi8-8x14 и koi8-8x8. Эти шрифты могут быть загружены в знакогенератор EGA/VGA адаптера для использования в различных видеорежимах:

Шрифт Число строк
EGA
Число строк
VGA
koi8-8x8 43 50
koi8-8x14 25 28
koi8-8x16 - 25

Для русификации консоли:

Убедитесь, что система собрана с драйвером PCVT. Файл конфигурации ядра должен содержать следующую строчку:

vt0 at isa? port 0x60 irq 1

Добавьте в /etc/rc.local команды загрузки шрифтов:

if [ -x /usr/sbin/ispcvt ] && /usr/sbin/ispcvt; then /usr/sbin/loadfont -c0 -f/usr/share/misc/pcvtfonts/koi8-r-8x16 /usr/sbin/loadfont -c1 -f/usr/share/misc/pcvtfonts/koi8-r-8x14 /usr/sbin/loadfont -c2 -f/usr/share/misc/pcvtfonts/koi8-r-8x8 /usr/sbin/kcon -m koi8 /usr/sbin/scon -o

# Следующие строчки нужны только для OpenBSD 2.5 и более ранних версий # for t in /dev/ttyC[0-7]; do # echo -n '\033/X' > ${t} # done fi

После выполнения данных действий, на консоли можно будет нормально читать русский текст в кодировке koi8-r. Однако набор русского текста превратится в этакое упражнение по машинописи, чтобы набрать букву "ф" придётся нажать LeftAlt-A, "Ф" - Shift-LeftAlt-A, "ы" - LeftAlt-S и т.д. На Игоря Грабина находится патч, позволяющий создать фиксированный переключатель.



При перепечатке ссылка на оригинал


Автор: Королев Тимофей (tk AT linux-online.ru) специально для LinuxShop.Ru
© 2003 Linux-Online.Ru. При перепечатке ссылка на оригинал обязательна!


Русификация wscons


Начиная с OpenBSD 2.9, драйвер консоли был полностью переписан. Русская раскладка была добавлена после выхода 2.9, поэтому для набора текста в 2.9, вам необходим . В случае если у вас OpenBSD 3.0 или новее, добавьте в файл /etc/kbdtype

раскладку вашей клавиатуры:

# echo "ru" > /etc/kbdtype

или раскомментируйте следующею строку в /etc/wsconsctl.conf:

keyboard.encoding=ru

Поддержка русского языка достигается путем создания custom

ядра с опциями:

option WSDISPLAY_COMPAT_USL option WSDISPLAY_COMPAT_RAWKBD option WSDISPLAY_COMPAT_PCVT option WSDISPLAY_DEFAULTSCREENS=2

Исходя из количества экранов по умолчанию, в данном случае два, добавьте в /etc/rc.local следующие строки, в зависимости от версии OpenBSD, для создания трех дополнительных экранов с предварительно загруженным русским шрифтом. Не забудьте запустить дополнительные процессы getty(8), если нужны, на этих экранах, см. /etc/ttys.

Для OpenBSD 2.9:

if [ -x /usr/sbin/wsconscfg -a -x /usr/sbin/wsfontload ]; then # Русские koi8 шрифты /usr/sbin/wsfontload -h 16 /usr/share/misc/pcvtfonts/koi8-8x16

for SCREEN in 2 3 4; do /usr/sbin/wsconscfg -t 80x25bf -e vt100 $SCREEN done

/bin/sh /path/to/koi8-map.sh > /dev/null fi

Для OpenBSD 3.0 и новее:

if [ -x /usr/sbin/wsconscfg -a -x /usr/sbin/wsfontload ]; then # Русские koi8 шрифты /usr/sbin/wsfontload -h 16 /usr/share/misc/pcvtfonts/koi8-r-8x16 # Украинские koi8 шрифты # /usr/sbin/wsfontload -h 16 /usr/share/misc/pcvtfonts/koi8-u-8x16

for SCREEN in 2 3 4; do /usr/sbin/wsconscfg -t 80x25bf -e vt100 $SCREEN done

# Следующие строчка позволяет создать фиксированный # переключатель на правом Ctrl /sbin/wsconsctl -w keyboard.map+="keycode 157 = Mode_Lock" > /dev/null # а если вы привыкли пользоваться обычным переключателем - правый Alt /sbin/wsconsctl -w keyboard.map+="keycode 184 = Mode_switch" > /dev/null fi

В OpenBSD 2.9 набор русского текста происходит так же, как и в PCVT консоли - зажимая правый Alt. Доступен патч для реализации т.н. sticky переключателя (фиксированного). Патч и краткое руководство по установке доступны . Начиная с версии 3.0, такой переключатель интегрирован в OpenBSD.



Русификация X Window


В файл конфигурации X Window (/etc/X11/XF86Config для XF4 или /etc/XF86Config для X11) в раздел Section "Files" добавьте следующую строчку, перед ранее написанными директивами FontPath:

FontPath "/usr/X11R6/lib/X11/fonts/cyrillic/"

После рестарта X Window, вы сможете читать тексты на русском языке в кодировке koi8-r. Для ранних версий X Window, вам может понадобится установить дополнительные шрифты, для этого создан порт . Для русификации клавиатуры можно настроить XKB, либо воспользоваться .



Русификация X Window и приложений.


Прежде чем начать описание необходимых действий, внесу ясность:

1. В начале установки я в качестве "языка установки" выбрал "Русский"

2. При выборе пакетов я поставил галку "Установить все" - 5 Гб не жалко. Все равно винчестер 80 гб.

3. После копирования пакетов было предложено выбрать "языки системы", где я поставил галочки у "English(USA)" и "Русский". Причем хуже не будет, если в качестве языка по умолчанию вы выберите английский язык.

4. Мне от системы нужно: английский интерфейс и возможность читать/писать по-русски.

5. Чтобы все было в UTF-8 (koi8-r/cp1251 на свалку истории!).

Чтобы производить переключения языка (Русский/Английский) для ввода текста по умолчанию требуется одновременно нажать две клавиши Shift. Причем, что интересно, по умолчанию для ввода используется русский язык, что довольно неудобно.

Для того, чтобы сделать английский язык ввода языком ввода по умолчанию, нужно подредактировать файл /etc/X11/XF86Config и заменить в нем строку:

Option "XkbLayout" "ru,us"

на

Option "XkbLayout" "us,ru".

А чтобы сменить метод переключения "Английский/Русский" нужно сточку:

Option "XkbOptions" "grp:shift_toggle,grp_led:scroll"

заменить на:

Option "XkbOptions" "grp:ctrl_shift_toggle,grp_led:scroll"

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

Итак, приступим к делу. Все команды, которые будут приводится нужно выполнять либо переключившись в пользователя root (для этого можно использовать команду su -l), либо просто войдя в систему пользователем root. Эти команды нужно вводить в запущенном терминале: Applications -> System Tools -> Terminal.

Вам нужно либо выкачать TTF-шрифты (файлы с расширением .ttf) из интернета, либо скопировать их с какого-нибудь диска, либо если рядом есть Windows-машина, взять шрифты из нее. Допустим, что вы поместили эти шрифты в директорию /tmp/ttf/ (название директории взято для примера. вы можете назвать директорию по своему). Вам необходимо скопировать (не переместить! они нам еще понадобятся) все эти шрифты в директорию /usr/X11R6/lib/X11/fonts/TTF/:

[root@developer root]# cd /tmp/ttf/ [root@developer ttf]# cp *.ttf /usr/X11R6/lib/X11/fonts/TTF/ [root@developer ttf]# cp *.TTF /usr/X11R6/lib/X11/fonts/TTF/ [root@developer ttf]# cd /usr/X11R6/lib/X11/fonts/TTF/ [root@developer TTF]# mkfontdir [root@developer TTF]# mkfontscale Couldn't get family name for ./marlett.ttf [root@developer TTF]#

<


Отлично. Теперь нужно каким-либо способом подключится к Internet и скачать файл: . После того как вы скачаете его, вам нужно будет установить его:



[root@developer root]# cd /tmp/ [root@developer ttf]# wget http://www.linuxshop.ru/redhat/files/XFree86-75dpi-fonts-4.2.0-73.i386.rpm [root@developer ttf]# rpm -e --nodeps XFree86-75dpi-fonts [root@developer ttf]# rpm -ihv XFree86-75dpi-fonts-4.2.0-73.i386.rpm


На самом деле, теперь у нас уже заработали GTK1-приложения. Но мы не будем останавливаться на достигнутом и продолжим тотальную русификацию.

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


[root@developer root]# cd /tmp/ttf [root@developer ttf]# mkdir /usr/share/fonts/ttf [root@developer ttf]# cp *.ttf usr/share/fonts/ttf [root@developer ttf]# cp *.TTF usr/share/fonts/ttf [root@developer ttf]# cd /usr/share/fonts/ttf [root@developer ttf]# mkfontdir [root@developer ttf]# mkfontscale

Вот и вся русификация. Теперь нужно только удалить шрифтовый кэш, перезапустить сервер шрифтов:


[root@developer root]# fc-cache [root@developer root]# service xfs restart

после чего перезапустить графическую систему либо просто отлогикившись (Actions -> Log Out), либо одновременно нажав клавиши Ctrl-Alt-Backspace. Ура! Все готово.


¦Рутущьу


¦К ГьБпуБу ч GNU Emacs, GNU-ьщзпЮщпФьь ЮпврьБчсч, АпэчтчзЦэущБьЮчрпщщчсч, щпАБЮпьрпуэчсч, ЮпАХьЮОуэчсч МзЮпщщчсч ЮутпзБчЮп ЮупшЛщчсч рЮуэущь Emacs. (`G' р `GNU' ГьБпуБАО.)

+К счрчЮьэ, ГБч Emacs -- МБч МзЮпщщКы ЮутпзБчЮ, Бпз зпз ЮутпзБьЮЦуэКы БузАБ чяКГщч рьтущ щп МзЮпщу ь прБчэпБьГуАзь чящчршОуБАО, зчстп рК ррчтьБу зчэпщтК. аэчБЮьБу Юпвтуш .

+К щпвКрпуэ усч ЮутпзБчЮчэ ЮупшЛщчсч рЮуэущь, Бпз зпз МзЮпщ чящчршОуБАО чГущЛ ГпАБч, чяКГщч ъчАшу зпжтчсч щпяЮпщщчсч рпэь вщпзп ьшь ъпЮК вщпзчр. мБч ЦэущЛХпуБ зчшьГуАБрч ьщДчЮэпФьь, зчБчЮЦН рК тчшжщК ЦтуЮжьрпБЛ р ъпэОБь, зчстп ЮутпзБьЮЦуБу. аэчБЮьБу Юпвтуш .

+К щпвКрпуэ Emacs ЮпврьБКэ, Бпз зпз чщ ъЮутчАБпршОуБ АЮутАБрп, зчБчЮКу тпНБ щуГБч ячшЛХуу, Гуэ ъЮчАБпО рАБпрзп ьшь Цтпшущьу: ЦъЮпршущьу ъчтъЮчФуААпэь, прБчэпБьГуАзчу Ачвтпщьу чБАБЦъчр р ъЮчсЮпээпЕ, ъЮчАэчБЮ трЦЕ ьшь ячшуу Дпышчр АЮпвЦ, ЮутпзБьЮчрпщьу ДчЮэпБьЮчрпщщчсч БузАБп ь туыАБрьО р БуЮэьщпЕ Аьэрчшчр, Ашчр, АБЮчз, ъЮутшчжущьы, пявпФур ь АБЮпщьФ, п Бпзжу рКЮпжущьы ь зчээущБпЮьур р щуАзчшЛзьЕ ЮпвщКЕ ОвКзпЕ ъЮчсЮпээьЮчрпщьО.

апэчтчзЦэущБьЮчрпщщчАБЛ чвщпГпуБ, ГБч р шНячу рЮуэО рК эчжуБу щпяЮпБЛ АъуФьпшЛщКы Аьэрчш, Control-h, ГБчяК ЦвщпБЛ, ГБч рК эчжуБу АтушпБЛ. ¦К Бпзжу эчжуБу ьАъчшЛвчрпБЛ усч, ГБчяК рКОАщьБЛ, ГБч тушпуБ ъЮчьврчшЛщпО зчэпщтп, ьшь щпыБь рАу зчэпщтК, ьэуНИьу чБщчХущьу з зпзчы-шьяч Буэу. аэчБЮьБу Юпвтуш .

+пАБЮпьрпуэчАБЛ чвщпГпуБ, ГБч рК эчжуБу шусзч ьвэущьБЛ чъЮутушущьО зчэпщт Emacs. +пъЮьэуЮ, уАшь рК ьАъчшЛвЦуБу ОвКз ъЮчсЮпээьЮчрпщьО, р зчБчЮчэ зчээущБпЮьь щпГьщпНБАО А ` ь зчщГпНБАО щп `**>', рК эчжуБу рушуБЛ зчэпщтпэ Emacs тшО ЮпячБК А зчээущБпЮьОэь ьАъчшЛвчрпБЛ ьэущщч Бпзьу АБЮчзь (АэчБЮьБу Юпвтуш ). ¦ЮЦсчы рьт щпАБЮчызь -- МБч ъуЮуЮпАъчшчжущьу ЦАБпщчршущщКЕ зчэпщт. +пъЮьэуЮ, уАшь рК ъЮутъчГьБпуБу, ГБчяК ГуБКЮу чАщчрщКу зчэпщтК трьжущьО зЦЮАчЮп (рруЮЕ, рщьв, ръЮпрч, ршурч) щпЕчтьшьАЛ щп зшпрьХпЕ, ЮпАъчшчжущщКЕ зЮуАБччяЮпвщч щп зшпрьпБЦЮу, рК эчжуБу ъуЮуъЮьрОвпБЛ МБь зшпрьХь. аэчБЮьБу Юпвтуш .

юпАХьЮОуэчАБЛ чвщпГпуБ, ГБч рК эчжуБу ъчыБь тпшЛХу ъЮчАБчы щпАБЮчызь ь щпъьАпБЛ АчруЮХущщч щчрКу зчэпщтК, ъЮчсЮпээК щп ОвКзу ¦ьАъ, ъЮутщпвщпГущщКу тшО впъЦАзп р АчяАБрущщчэ ¦ьАъ-ьщБуЮъЮуБпБчЮу Emacs. Emacs ОршОуБАО "ьщБуЮпзБьрщч ЮпАХьЮОуэчы" АьАБуэчы, ГБч вщпГьБ, ГБч чщ тушьБАО щп эщчсч ДЦщзФьы, зчБчЮКу рКвКрпНБ тЮЦс тЮЦсп; зпжтпО ьв щьЕ эчжуБ яКБЛ ъуЮучъЮутушущп рч рЮуэО АупщАп ЮутпзБьЮчрпщьО. ©чГБь шНяпО ГпАБЛ Emacs эчжуБ яКБЛ впэущущп яув зчъьЮчрпщьО рАусч Emacs. ¦чшЛХьщАБрч зчэпщт ЮутпзБьЮчрпщьО Emacs Цжу щпъьАпщК щп ¦ьАъу; щуАзчшЛзч ьАзшНГущьы эчсшь яК яКБЛ щпъьАпщК щп ¦ьАъу, щч щпъьАпщК щп аь тшО МДДузБьрщчАБь. ечБО БчшЛзч ъЮчсЮпээьАБ эчжуБ щпъьАпБЛ ЮпАХьЮущьу, шНячы эчжуБ ьАъчшЛвчрпБЛ усч ъчАшу. ¦Ашь рК ЕчБьБу щпЦГьБЛАО ъЮчсЮпээьЮчрпщьН щп Emacs Lisp, эК ЮузчэущтЦуэ рпэ зщьсЦ Introduction to Emacs Lisp, щпъьАпщщЦН ючяуЮБчэ ¦ж. гпААушчэ, Бпзжу чъЦяшьзчрпщщЦН дчщтчэ арчячтщчсч ©ЮчсЮпээщчсч +яуАъуГущьО.

¦чстп Emacs впъЦИущ ъчт АьАБуэчы X Windows, чщ ъЮутчАБпршОуБ АчяАБрущщКу эущН ь ЦтчящКу ъЮьрОвзь тшО зщчъчз эКХь. +ч Emacs эчжуБ тпБЛ эщчсьу ъЮуьэЦИуАБрп чзчщщчы АьАБуэК ь щп БузАБчрчэ БуЮэьщпшу. +пъЮьэуЮ, рК эчжуБу рьтуБЛ чтщчрЮуэущщч щуАзчшЛзч Дпышчр, ъуЮуэуИпБЛ БузАБ эужтЦ Дпышпэь ь ЮутпзБьЮчрпБЛ рч рЮуэО ЮпячБК зчэпщт чячшчГзь.

[]   []   [ъЮутКтЦИьы]   [рруЮЕ]   [АшутЦНИьы]   []  



Самодельный HTML-редактор


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

Итак, перед нами стоит задача составления достаточно длинных и относительно структурированных документов, предназначенных в первую очередь для размещения в Сети. При этом не исключается возможность, что они в дальнейшем будут воплощены и на бумаге в виде журнальных или книжных публикаций (для чего может потребоваться импорт документа в текстовый процессор или программу верстки). Способов комфортного выполнения этой работы несколько. Что в таком случае можно делать?

Набирать текст в текстовом процессоре (таком как StarWriter из комплекта StarOffice) с дальнейшим экспортом в формат HTML - качество HTML-кода при этом получается настолько низкое, что пользоваться этим методом для серьезной работы нельзя. Набирать текст в визуальном редакторе Web-страниц типа Netscape Composer; однако к HTML-коду невысокого качества здесь добавляются очень скромные возможности форматирования и контроля за HTML-кодом. Набирать текст в любом подходящем по возможностям HTML-редакторе с одновременной расстановкой требуемых тегов его штатными средствами; однако далеко не всегда такие редакторы столь универсальны, как нам требуется; к тому же оба известных мне полнофункциональных HTML-редактора под Linux (WebMaker и Quanta) обладают общим недостатком: они позволяют набирать текст либо в одну строку (что неудобно визуально), либо с переносом слов через фиксированное количество знаков с образованием символа возврата каретки (что совершенно ни к чему при импорте в текстовый процессор). Набирать текст в обычном текстовом редакторе с последующим помещением в редактор HTML-кода, где и осуществляется его (текста) разметка; но, помимо сложностей с двухэтапным созданием документа, такой метод приводит к появлению двух содержательно идентичных (по идее) файлов, а какой из них более актуален - удается вспомнить не всегда.


Поэтому оптимальным представляется составление документа в текстовом редакторе с одновременной разметкой тегами HTML. Однако проставлять теги вручную, даже если помнишь все наизусть, - занятие малопроизводительное. Посему возникает естественное желание эту процедуру автоматизировать, благо NEdit с его развитым макроязыком и простыми средствами применения последнего такую возможность обеспечивает.

Для начала определимся, какие теги требуются для каждодневного использования. Это: 1) заголовки нескольких уровней - <h1></h1>, <h2></h2> и т.д.; 2) теги начала абзаца (<p>) и разрыва строки (<br>); 3) структурные теги: emphasis (<em></em>) и preformatted text (pre и /pre); 4) всякого рода списки - маркированные (<ul></ul>), нумерованные (<ol></ol>), списки с определениями и их элементы (<dl></dl>, <li>, <dt>, <dd>); 5) гиперссылки (<a href=""></a>) и именованные якоря (<a name=""></a>).

Вот в такой последовательности и будем создавать соответствующие макросы. Включаем режим протоколирования (через меню Macro - Learn Keystrokes или комбинацией клавиш Alt+K) и просто-напросто набираем с клавиатуры последовательность символов.

Для обеспечения непрерывности набора логично вернуть курсор в позицию между открывающим и закрывающим тегами, для чего соответствующее количество раз нажимаем клавишу Left. После чего завершаем протоколирование (через меню Macro - Finish Learn или повторным нажатием Alt+K), при помощи меню Macro Replay Keystrokes (или комбинации Ctrl+K) проверяем правильность исполнения и переходим в меню Preferences - Default Settings - Customize Menu - Macro Menu. В появившейся панели Macro Commands (см. рис. 2) указываем в поле Menu Entry:

Headers>header1

В поле Accelerator приписываем команде клавишу вызова (например, F1, благо она не закреплена за вызовом справки), при желании определяем мнемоническую литеру и нажимаем экранную кнопку Paste Learn/Reply Macro. В результате в поле Macro Command to Execute появляется примерно такой код:

insert_string("<") insert_string("h") insert_string("1") insert_string(">") insert_string("<") insert_string("/") insert_string("h") insert_string("1") insert_string(">") backward_character() backward_character() backward_character() backward_character() backward_character()



Поскольку правильность макрокоманды мы уже проверили, нажимаем Apply для ее включения в список и переходим к следующему пункту нашей программы. Конечно, можно повторить протоколирование набора для тегов заголовков всех уровней последовательно. Но проще с помощью экранной клавиши Copy скопировать только что созданный макрос, изменить в поле Menu Entry его название с header1 на header2, закрепить за ним клавишу F2 и в поле Paste Learn/Reply Macro отредактировать код вручную, заменив строку

insert_string("1")

на

insert_string("2").

Подобную процедуру придется повторить для заголовков всех требуемых уровней (хотя вряд ли их число превысит четыре).

Затем переходим к созданию макросов для наиболее часто требующихся при наборе тегов абзаца и разрыва строки. Порядок действий идентичный: протоколирование ввода тега, вызов панели Macro Commands, описание имени команды (с учетом ее положения в иерархическом меню), закрепление за ней свободной комбинации "горячих" клавиш, помещение "заученного" кода макроса в поле команд для исполнения, включение новой макрокоманды в список доступных. И так для всех тегов, которые, как нам представляется, требуются постоянно и ежедневно...

Завершив создание макросов, следует не забыть сохранить их в меню с помощью Preferences - Save Defaults. После чего они будут доступны в последующих сеансах NEdit, поскольку размещаются в файле .nedit. в секции

nedit.macroCommands:

На сайте http://linuxsaga.newmail.ru/ приведено содержимое этой секции после того, как я разработал серию макросов для своих личных целей. Не судите строго: с точки зрения программиста-профессионала ничего замечательного там не содержится. Но а) этот процесс занял у меня считанные минуты, и б) результатов его мне вполне хватает в 90 случаях из 100.

Чего еще хотелось бы от несложного HTML-редактора? Ну конечно, визуализации производимых изменений в каком-либо внешнем браузере (каковым, с большой долей вероятности, будет Netscape Navigator текущей версии).

Для этого мы прибегнем к настройке меню Shell (Preferences - Default Settings - Customize Menu - Shell Menu). В соответствующей панели (см. рис. 3) определяем, как описано выше, поле имени команды. Если есть желание просматривать плоды своих трудов в разных браузерах, можно создать иерархическое меню, например:

Browser>netscape Browser>lynx Browser>opera



оставляя, скорее всего, пустыми поля Accelerator и Mnemonic (не столь это частая процедура - вызов внешнего браузера, чтобы тратить на нее драгоценную клавишную комбинацию, коих и так не в избытке).

А затем вводим в поле Shell Command to Execute строку

konsole -e netscape %

или иную любимую терминальную программу в качестве первого элемента (xterm. rxvt, etc.). И ни в коем случае не забываем параметр %, предписывающий браузеру отображать именно редактируемый в NEdit файл.

Теперь разбираемся с переключателями. В линейке Command Input логично отметить значение None (иначе есть риск получить по закрытии Netscape пустой файл), в линейке Command Output - значение same window. Кроме того, не худо бы включить также опцию сохранения текущего файла перед выполнением команды (Save file before executing command).

Принимаем изменения (экранной клавишей Apply) и проверяем действие команды. Если все нормально, выбор из меню Shell пункта netscape должен вызвать появление сначала терминального окна, а затем - окна браузера Netscape Navigator, отображающего редактируемый файл в текущем его состоянии. Если да - сохраняем ситуацию (через меню Preferences - Save Defaults), и собственный HTML-редактор готов!

Как и результат редактирования меню макрокоманд, результаты действий по встраиванию команд оболочки попадают в файл .nedit, в секцию

nedit.shellCommands:

где их можно в дальнейшем редактировать непосредственно.

Эта статья написана не только к вящей славе редактора NEdit. Автор руководствовался и собственными корыстными соображениями: вдруг кто-нибудь напишет достаточное количество качественных наборов макросов для NEdit на все случаи жизни?


Saxon


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



Search


вполне заслуживает отдельного положения в главном меню, поскольку возможности поиска и замены в NEdit чрезвычайно широки. Здесь и поиск введенной последовательности символов ([Shift]Ctrl+F), и повторный поиск ([Shift]Ctrl+G), и поиск фрагмента, идентичного выделенному ([Shift]Ctrl+H). Возможен поиск как буквенных последовательностей (Literal), в том числе и с чувствительностью к регистру (Case Sensitive Literal), так и регулярных выражений (Regular Expression), поиск вперед и назад (Search Forward и Search Backward, соответственно). При этом поддерживается история искомых выражений: клавиша управления курсором Up вызывает появление предыдущей последовательности, клавиша Down - последующего.

Следует отметить, что строка для ввода искомой последовательности может быть выведена не только в диалоговой панели по вызову соотвествтующего пункта меню, но и включена в верхней части окна программы, между строкой меню и строкой состояния (с помощью команды Find Incremental, [Shift]Ctrl+I). В обоих случаях кириллица в строке поиска не отображается, заменяясь знакомой пользователям Windows псевдо-грекофранцузской абракадаброй; тем не менее, самому по себе поиску это отнюдь не мешает - кириллические символы в теле документа находятся исправно.

Разумется, возможна и замена найденных фрагментов (Replace, [Shift]Ctrl+R), и повторная замена (Replace Again, [Shift]Ctrl+T). Опции замены - те же, что и для поиска: с чувствительностью к регистру, с использованием регулярных выражений, вперед и назад, и так далее.

В пункте же Search - переход к строке по ее номеру (Goto Line Number, Ctrl+L) и к выделенному фрагменту (Goto Selected, Ctrl+E), установка закладок (Mark, Alt+M), в качестве которых могут использоваться буквы латинского алфавита (от A до Z), и переход к ранее установленным закладкам (Goto Mark,[Shift]Alt+G) и еще пара пунктов, содержания которых я не очень понял. Это, во-первых, Goto Matching (...) ([Shift]Ctrl+M), не вызывающий никаких действий, и, во-вторых, Find Definition (Ctrl+D), не активизированный вообще.

Переходим к пункту



Searching


Я уже говорил, что возможности поиска в редакторе NEdit весьма обширны. А настриваемость придает им еще и гибкость. В пункте Searching присутствует два переключателя:

Verbose, то есть включение поиска многословных фрагментов, и Keep Dialogs Up, включение которой позволяет осуществлять непрерывный поиск последующих вхождений (по умолчанию для поиска следующего вхождения требуется выбрать в главном меню Search - Find Again).

Третий пункт настройки поиска - режим по умолчанию: Literal (то есть когда искомое значение рассматривается как буквенная последоватлеьность), Case Sensitive (то же, но с чувствительностью к регистру) и Regular Expression (то есть поиск регулярных выражений, представление о синтаксисе которых можно получить из соответствующего пункта меню Help).

Следующая группа настроек -



Секционирование


Разделы текста отделяются командами =headN, например

=head1заголовок_первого_уровня

=head2 заголовок_второго_уровня

=head3 заголовок_третьего_уровня

Эти же команды определяют заголовки разделов заголовок_первого_уровня и т.д. Сколько уровней вложенности заголовков (т.е. максимально допустимое N) разрешается -- зависит от конвертора POD-во-что-то-еще. Например, pod2man допускает только два уровня, pos2html -- до шести уровней.

К исходному тексту примеров я добавил номера колонок. Номера строк в настоящем исходном тексте отсутствуют. Здесь они включены для того, чтобы указать на пустые строки, которые должны разделять командные абзацы, т.е. те, которые начинаются со знака равенства в колонке 0. Для того чтобы сделать более понятным, где начинается нулевая колонка, в примере ниже я добавил линейку с делениями.

Пример:

1 2 3 4 5 012345678901234567890123456789012345678901234567890 1 =head1 Аппаратное обеспечение 2 3 Физические составляющие части вашего компьютера 4 называются аппаратным обеспечением, или hardware. 5 6 =head1 Процессор 7 8 Процессор (CPU) -- это самая важная деталь вашего 9 компьютера. 10 11 =head1 Устройства хранения данных 12 13 Устройства хранения данных, или mass storage devices 14 служат для постоянного хранения информации. 15 16 =head2 Жесткие диски 17 18 Жесткие диски (hard disk drives) обеспечивают произвольный 19 доступ к данным. 20 21 =head2 Магнитные ленты 22 23 Магнитные ленты (magnetic tapes) обеспечивают медленный 24 последовательный доступ к данным. 25 26 =head1 Программное обеспечение 27 28 Вот тут-то и начинаются вилы...



SGML


Стандартный обобщенный язык разметки (SGML) - это язык, который основан на внедрении кодов внутрь документа. Этим он похож на HTML, но на этом их сходство заканчивается. Сила SGML в том, что в отличии от WYSIWYG (What You See Is What You Get), вы не определяете такие вещи как цвета,размеры шрифтов или какое либо форматирование. Вместо этого вы определяете элементы составляющие документ (параграфы,секции,нумерованные списки ...) и предоставляете SGML процессору вместе с конечной программой заботу о размещении элементов,цветах,шрифтах и прочем. HTML делает примерно тоже самое и на самом деле является лишь одной из форм SGML. SGML состоит из двух основных вещей. Во первых это Структура, которая обычно называется DTD (Document Type Definition - "определение типа документа"). DTD определяет зависимости между элементами. Например для создания этого документа использовалось DocBook DTD. DTD привносит общий вид и структуру во все документы, созданные с его использованием. Во вторых это наполнение, которое визуализируется SGML процессором и которое видит затем читатель. Например этот параграф - наполнение, но с таким же успехом наполнением может быть графическое изображение, таблица, список и т.д. Наполнение ограничивается тэгами,чтобы отделить элементы друг от друга.



Sgml-auto-insert-required-elements


Если этой переменной присвоено ненулевое значение, то каждый раз PSGML будет вставлять какой-либо элемент вместе с тэгами любых требуемых элементов внутри этого элемента. Например, при использовании DocBook DTD, требование к PSGML вставить элемент главы chapter влечет за собой вставку тэгов элемента заголовка title в начале главы. При этом выводится комментарий о необходимости вставки одного из (далее следует список допустимых элементов).



Sgml-balanced-tag-edit


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



SGML - документальный метаязык


Валерий Коржов

Текст - достаточно значимое явление нашей культуры. Порой он рассматривается как произведение искусства, для которого, как известно, важно не только содержание, но и оформление. Для украшения своих текстов авторы используют различные шрифты и другие визуальные эффекты. Подобные способы оформления текста давно известны, но как их перенести на электронные документы? Язык разметки, который используют для описания внешнего вида документа, еще не устоялся. Сейчас имеет хождение множество всевозможных форматов электронного текста, которые не всегда можно преобразовать один в другой.



SGML и Web


      Язык форматирования Web-страниц HTML изначально вводился как приложение SGML. Позже, с бурным развитием WWW, HTML начал всячески расширяться с целью дать автору больший контроль над внешним представлением информации. Новые элементы и атрибуты, такие как <FONT> или <BGCOLOR>, ориентировались на визуальное форматирование. Появились и стали активно использоваться средства, не входящие собственно в язык разметки: imagemaps, Java и JavaScript, plugins, и прочее. Много появилось также элементов HTML, поддерживаемых только определенным браузером, или по-разному работающих в разных браузерах. Поэтому сейчас уже сложно утверждать, является ли HTML приложением SGML или нет. Очень немногие страницы создаются в соответствии со спецификациями на HTML и соответствующими DTD.

      Эту проблему отчасти призваны облегчить каскадируемые стили, стандарт на которые принят W3 консорциумом. отделяет стиль, задающий визуальное представление элементов, от разметки элементов.

      Большой интерес представляет язык , предположительно идущий на смену HTML в качестве языка разметки Web-страниц. Это -- вариант SGML, ориентированный в первую очередь на применение на WWW. Он не требует обязательного наличия DTD, упрощен и сам язык за счет редко используемых сложных конструкций. Это позволит сделать простыми анализаторы, что сделает возможным активное применение XML в браузерах.

      XML снимет одно из неприятных ограничений HTML -- фиксированное количество элементов и фиксированная их семантика. Скажем, публикуя в XML список вопросов и ответов, можно задать естественную структуру элементов в таком стиле:

<FAQ>

<Q>Что такое XML?</Q>

<A>eXtensible Markup Language</A>

</FAQ>

      Заданные в дополнение к самому документу стили форматирования элементов <FAQ>, <Q> и <A> дадут возможность браузеру показать этот документ в соответствии с замыслами автора.



Sgml-indent-step


Данная переменная "заставляет" PSGML автоматически выравнивать тэги в соответствии с установками относительно структуры элемента. Значение переменной sgml-indent-step по умолчанию равно двум, т.е. тэги вложенных элементов смещены друг относительно друга на два пробела вправо. Ниже будет показано, что элементы title, para, figure выровнены еще два символа относительно открывающих и закрывающих элементов sect2, также как и элементы title и graphic, помещенные внутрь элемента figure.

<sect2> <title>A Bosom Friend</title> <para>We then turned over the book together, and I endeavored to explain to him the purpose of the printing, and the meaning of the few pictures that were in it.</para> <figure> <title>A Sample Figure</title> <graphic fileref="giftest.gif" format="gif"></graphic> </figure> <para>Thus I soon engaged his interest; and from that we went to jabbering the best we could about the various outer sights to be seen in this famous town.</para> <sect2>


Злоупотребление структурированием текста может привести к тому, что текст будет слишком сильно смещен вправо, поэтому нужно всегда помнить о возможности отключения данной функции. Отключение выравнивания осуществляется присвоением переменной sgml-indent-step нулевого значения. Соответствующая строка в .emacs-файле выглядит следующим образом:

(setq sgml-indent-step 0) ; default value is 2



Sgml-live-element-indicator


Если этой переменной присвоено ненулевое значение, то PSGML будет отображать тип документа и тип текущего элемента в строке состояния. Например, при использовании DocBook DTD, если курсор находится внутри элемента заголовка (title) при редактировании главы (chapter) документа, то в строке состояния возможно появление следующего сообщения:

(SGML [chapter/title]))


Это может немного замедлять работу Emacs, но жертва часто стоит того, если документ не слишком большой.



Sgml-omittag-transparent


При вставке нового элемента можно "попросить" PSGML перечислить все допустимые типы элемента, которые можно вставить в текущую позицию курсора. Если переменной sgml-omittag-transparent присвоено значение "nil" (ноль), PSGML только перечислит типы элемента, которые могут находиться внутри текущего элемента. Если переменной присвоено ненулевое значение - "non-nil", PSGML также перечислит доступные типы элементов, которые могут следовать за текущим элементом (то есть элементом, в котором расположен курсор), если текущий элемент элемент не нуждается в закрывающем тэге.

Например, если текущий элемент - элемент параграфа <para>, и DTD не требует, чтобы элементы параграфа имели закрывающий тэг, то при перечислении допустимых для вставки типов элементов, будут перечислены как те элементы, которые могут следовать непосредственно за элементом параграфа, так и те, которые могут находиться только внутри него.



SGML против WYSIWYG


      Для тех, кто привык пользоваться только "word processor"-ами, например, MS Word или WordPerfect, может быть интересно сопоставление их с SGML инструментами. Эти две группы программных средств, несмотря на схожесть решаемых задач -- производство документов -- весьма друг от друга отличаются по архитектуре и функциям.

      Word processor -- это интеллектуальная пишущая машинка. Он ориентирован на работу с визуальным представлением текста, характеризующегося набором стилей: стилей символов (шрифт, кегль, начертание), абзацев (красная строка, выравнивание, положение по ширине страницы), страниц (колонтитулы, сноски), разделов и документов (формат бумаги, оглавление), и прочих. Word processor не работает с внутренней структурой документа.

      SGML редактор, напротив, ориентирован на работу с содержимым документа. Для SGML редактора, например, раздел -- это элемент, в который могут включаться подразделы, а не промежуток от одного абзаца, набранного стилем "Заголовок" до другого, как для word processor-a.

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



SGML-редактор


      SGML-редактор отличается как от привычных текстовых редакторов, так и от "word processor"-ов. От первых -- наличием поддержки структурированных документов, от вторых -- отсутствием поддержки визуального форматирования. Редактор разбирает DTD редактируемого документа и "ведет" пользователя в соответствии с ним. Например, если DTD предусматривает элемент <SECTION>, в котором могут встречаться только элементы <SUBSECTION> или <PARAGRAPH>, то пользователю, редактирующему элемент <SECTION>, будет предложено вставить один из этих двух разрешенных элементов. SGML-редактор также обычно содержит средства навигации по иерархии документ.

      Из числа популярных SGML-редакторов можно назвать ArborText , SoftQuad , , Adobe , Corel , и множество других.



SGML: с чем это едят?


1997

Сегодня все чаще можно встретить аббревиатуру SGML. Многие виды документации поставляются в формате SGML. Популярный язык разметки Web-страниц HTML является приложением SGML. Появляется все больше прикладных программ для работы с SGML: редакторы, средства форматирования, системы документооборота, использующие SGML в качестве формата хранения документов... SGML-продукты выпускают Adobe, Corel, SoftQuad, Microsoft. В SGML готовятся книги издательства O'Reilly, техническая документация IBM, Sun и OSF. Основывается на SGML информационная технология многих ведущих машиностроительных и авиакосмических фирм всего мира.

      Появившаяся в начале восьмидесятых SGML-технология переживает сейчас период расцвета. Что это такое? Что она дает своим пользователям? Как с ней работать? На эти и другие вопросы я пытаюсь ответить этой статьей.



Sgml-set-face


Если этой переменной присвоено ненулевое значение, то PSGML будет выделять (если, конечно, это возможно на вашем мониторе) тэги, содержание, определения объектов и комментарии различным шрифтом или цветом. Подробнее см. раздел "Выделение Разметки шрифтом и цветом."



Sgmltools-lite


Очень рекомендуется -

Это наследник проекта sgmltools,которые был официально остановлен более года назад. После этого Cees de Groot создал немного отличный от него проект,который работает как wrapper для SGML процессора Jade. Он прячет от пользователя сложный синтаксис. Я установил старые sgmltools, затем sgmltools-lite и смог отформатировать этот документ достаточно просто. Есть даже man страница для sgmltools, на которой описан его синтаксис.



СharSets


Давайте теперь рассмотрим собственно наборы символов (character set). Первое что мы должны сделать - это обратить внимание на терминологию. Если мы говорим о наборе "абстрактных" символов, то употребляется термин character repertoire. Если же мы говорим о наборе символов вместе с их



Shell


Shell - достаточно необычный пункт меню текстового редактора. Через него можно, во-первых, запустить на исполнение любую команду или программу. Это делается с помощью подпункта Execute Command (Alt+X), который вызывает нечто вроде минитерминала. В нем может быть введена соответствующая команда оболочки (или любая другая) с любыми требующимися параметрами. Поддерживается, посредством клавиш управления курсором Up и Down, историю команд, правда, только в текущем сеансе.

Во-вторых, через подпункт Execute Command Line (KP Enter, что это за комбинация - я так и не понял) можно определить в качестве команды на запуск строку из текущего документа. Для этого достаточно установить курсор в любое ее место и выбрать соответствующий пункт меню (или набрать вышеприведенную неудобопонятную клавишную комбинацию, вероятно). Разумеется, если строка эта имеет смысл и записана синтаксически правильно. В противном случае в теле документа атоматически появится сообщение об ошибке. Например: netscape An error occurred running /usr/lib/netscape/netscape-communicator. Или даже полная справка по использованию команды, как в случае
ispell Usage: ispell [-dfile | -pfile | -wchars | -Wn | -t | -n | -x | -b | -S | -B | -C | -P | -m | -Lcontext | -M | -N | -Ttype | -V] file .....

и так далее. Разумеется, эта опция наиболее полезна для программистов. Однако и простым смертным она будет весьма нелишней при отладке скриптов командной оболочки. Необходимость в чем может возникнуть при желании нарастить функциональные возможности NEdit.

Дело в том, что скрипты эти могут быть встроены в меню Shell. Некий их набор включен в последнее по умолчанию. Это провекра правописания (spell), статистика (wc, от word count - подсчет строк, слов и знаков), сортировка строк и их нумерация, а также сугубо программистские сценарии - make для сборки программы из набранного исходного текста, expand и unexpand, смысл которых я не очень понимаю. Однако ничто не мешает пополнять меню Shell своими скриптами любого назначения, освободив его от ненужных лично вам элементов. Как - расскажу в одном из следующих разделов.

Кроме Shell, для наращивания функциональности программы служит и пункт



¦ШНГь


©чАшутчрпБушЛщчАБЛ зшНГуы, (ьшь зчЮчБзч, зшНГ) уАБЛ ъчАшутчрпБушЛщчАБЛ ррчтьэКЕ АчяКБьы, зчБчЮпО рчАъЮьщьэпуБАО зпз Фушчу, зпз "утьщпО зчэпщтп". +узчБчЮКу зчэпщтщКу ъчАшутчрпБушЛщчАБь Emacs --- МБч ъЮчАБч чтьщчГщКы вщпз ьшь чтщч АчяКБьу; щпъЮьэуЮ, ъЮчАБч C-f тчАБпБчГщч тшО ъуЮуэуИущьО ръуЮут щп чтьщ вщпз. +ч р Emacs Бпзжу уАБЛ зчэпщтК, зчБчЮКу рКвКрпНБАО трЦэО ьшь ячшуу АчяКБьОэь.

¦Ашь ъчАшутчрпБушЛщчАБЛ АчяКБьы тчАБпБчГщп тшО рКвчрп зчэпщтК, чщп ОршОуБАО впзчщГущщКэ зшНГчэ. ©ЮьэуЮчэ впзчщГущщКЕ зшНГуы эчсЦБ яКБЛ C-a, X, RET, NEXT (ДЦщзФьчщпшЛщпО зшпрьХп), DOWN (АБЮушзп), C-x C-f ь C-x 4 C-f. ¦Ашь ъчАшутчрпБушЛщчАБЛ щутчАБпБчГщп, ГБчяК АчАБпрьБЛ впзчщГущщКы зшНГ, чщп щпвКрпуБАО ъЮуДьзАщКэ зшНГчэ. ¦ ъЮьэуЮпЕ рКХу C-x ь C-x 4 ОршОНБАО ъЮуДьзАщКэь зшНГпэь. ¦НяпО ъчАшутчрпБушЛщчАБЛ зшНГуы -- МБч шьяч впзчщГущщКы, шьяч ъЮуДьзАщКы зшНГ.

¦чшЛХьщАБрч чтьщчГщКЕ вщпзчр ОршОНБАО впзчщГущщКэь зшНГпэь р АБпщтпЮБщКЕ ъЮьрОвзпЕ зчэпщт Emacs. +уэщчсьу ьв щьЕ ОршОНБАО ъЮуДьзАщКэь зшНГпэь. ©ЮуДьзАщКы зшНГ чяЙутьщОуБАО Ач АшутЦНИьэ АчяКБьуэ р ячшуу тшьщщЦН ъчАшутчрпБушЛщчАБЛ зшНГуы, зчБчЮпО Апэп эчжуБ яКБЛ впзчщГущщчы ьшь ъЮуДьзАщчы. +пъЮьэуЮ, C-x -- МБч ъЮуДьзАщКы зшНГ, ъчМБчэЦ C-x ь АшутЦНИуу АчяКБьу чяЙутьщОНБАО р трЦЕвщпзчрЦН ъчАшутчрпБушЛщчАБЛ зшНГуы. ¦чшЛХьщАБрч МБьЕ ъчАшутчрпБушЛщчАБуы ОршОНБАО впзчщГущщКэь зшНГпэь, р Бчэ ГьАшу C-x C-f ь C-x b. +узчБчЮКу, щпъЮьэуЮ C-x 4 ь C-x r, Апэь ОршОНБАО ъЮуДьзАщКэь зшНГпэь, ъЮьрчтОИьэь з БЮуЕвщпзчрКэ ъчАшутчрпБушЛщчАБОэ зшНГуы. +уБ чсЮпщьГущьО щп тшьщЦ ъчАшутчрпБушЛщчАБь зшНГуы, щч щп ъЮпзБьзу шНть Юутзч ьАъчшЛвЦНБ ъчАшутчрпБушЛщчАБь тшьщщуу ГуБКЮуЕ АчяКБьы.

+пъЮчБьр, тчяпрьБЛ АчяКБьО з впзчщГущщчэЦ зшНГЦ рК щу эчжуБу. +пъЮьэуЮ, трЦЕвщпзчрпО ъчАшутчрпБушЛщчАБЛ C-f C-k щу ОршОуБАО зшНГчэ, Бпз зпз C-f ОршОуБАО впзчщГущщКэ зшНГчэ Апэп ъч Ауяу. +урчвэчжщч тпБЛ C-f C-k щувпрьАьэчу вщпГущьу зпз зчэпщту. C-f C-k -- МБч тру зчэпщтК, п щу чтщп.

Tв рАусч Азпвпщщчсч АшутЦуБ, ГБч ъЮуДьзАщКэь зшНГпэь р Emacs ОршОНБАО C-c, C-h, C-x, C-x RET, C-x @, C-x a, C-x n, C-x r, C-x v, C-x 4, C-x 5, C-x 6, ESC, M-g ь M-j. +ч МБчБ АъьАчз щу рАБЮчущ; МБч ъЮчАБч АБпщтпЮБщпО ъЮьрОвзп зшНГуы р Emacs. ¦ ъЮчФуААу щпАБЮчызь Emacs рК эчжуБу АтушпБЛ щчрКу ъЮуДьзАщКу зшНГь ьшь ЦщьГБчжьБЛ МБь. аэчБЮьБу Юпвтуш .

¦Ашь рК р Апэчэ тушу АчвтпуБу ьшь ЦтпшОуБу ъЮуДьзАщКу зшНГь, МБч ьвэущОуБ щпячЮ рчвэчжщКЕ ъчАшутчрпБушЛщчАБуы зшНГуы. +пъЮьэуЮ, уАшь рК ъуЮучъЮутушОуБу C-f зпз ъЮуДьзА, C-f C-k прБчэпБьГуАзь АБпщчрОБАО зшНГчэ (впзчщГущщКэ, уАшь рК щу чъЮутушьБу усч Бчжу зпз ъЮуДьзА). +пчячЮчБ, уАшь рК ЦщьГБчжьБу чъЮутушущьу ъЮуДьзАп C-x 4, Бч а-Е 4 f (ьшь а-Е 4 ГБч-щьяЦтЛ) щу яЦтуБ р тпшЛщуыХуэ зшНГчэ.

+пъуГпБпр вщпз рКвчрп АъЮпрзь (C-h ьшь F1) ъчАшу ъЮуДьзАщчсч вщпзп, рК ъчшЦГьБу АъьАчз зчэпщт, щпГьщпНИьЕАО А МБчсч ъЮуДьзАп. ¦АБЛ щуАзчшЛзч ъЮуДьзАщКЕ вщпзчр, тшО зчБчЮКЕ C-h щу ЮпячБпуБ -- ъч ьАБчЮьГуАзьэ ъЮьГьщпэ Ц щьЕ уАБЛ тЮЦсчу вщпГущьу тшО C-h, зчБчЮчу щуъЮчАБч ьвэущьБЛ. +ч F1 тчшжщп ЮпячБпБЛ тшО рАуЕ ъЮуДьзАщКЕ вщпзчр.



¦ШНГь ь зчэпщтК


¦ МБчэ ЮЦзчрчтАБру эщчсч чБЮКрзчр, зчБчЮКу счрчЮОБ рпэ, ГБч тушпНБ чБтушЛщКу зшНГь. +ч Emacs щу чъЮутушОуБ вщпГущьу зшНГуы щуъчАЮутАБрущщч. ¦эуАБч МБчсч Emacs ъЮьАрпьрпуБ вщпГущьу ьэущчрпщщКэ зчэпщтпэ ь впБуэ ъЮьтпуБ зшНГпэ вщпГущьО ъЦБуэ ъЮьрОвзь ьЕ з зчэпщтпэ.

¦пжтпО зчэпщтп ьэууБ ьэО, рКяЮпщщчу тшО щуу ъЮчсЮпээьАБчэ. +яКГщч МБч ьэО АчАБпршОуБАО ьв щуАзчшЛзьЕ пщсшьыАзьЕ Ашчр, ЮпвтушущщКЕ туДьАпэь; щпъЮьэуЮ, next-line ьшь forward-word. ц зчэпщтК Бпзжу уАБЛ чъЮутушущьу, ОршОНИууАО ъЮчсЮпээчы щп ¦ьАъу; чщп впАБпршОуБ ДЦщзФьН тушпБЛ Бч, ГБч чщп тушпуБ. +п Апэчэ тушу, зчэпщтп р ОвКзу Emacs Lisp -- МБч чАчяпО ЮпвщчрьтщчАБЛ шьАъчрАзчы ДЦщзФьь; МБч БпзпО ДЦщзФьО, зчБчЮпО ЦзпвКрпуБ, зпз ГьБпБЛ пЮсЦэущБК ъЮь ьщБуЮпзБьрщчэ рКвчру. ¦шО ъчшЦГущьО ячшЛХуы ьщДчЮэпФьь ч зчэпщтпЕ ь ДЦщзФьОЕ АэчБЮьБу Юпвтуш `What Is a Function' р The Emacs Lisp Reference Manual. (+ъЮутушущьу, зчБчЮчу эК ьАъчшЛвчрпшь р тпщщчэ ЮЦзчрчтАБру, Ашусзп ЦъЮчИущч.)

арОвЛ эужтЦ зшНГпэь ь ДЦщзФьОэь впъьАКрпуБАО р ЮпвшьГщКЕ БпяшьФпЕ, щпвКрпуэКЕ БпяшьФпэь зшНГуы. аэчБЮьБу Юпвтуш .

¦чстп эК счрчЮьэ, ГБч "C-n АтрьспуБ руЮБьзпшЛщч рщьв щп чтщЦ АБЮчзЦ", эК впэпшГьрпуэ чБшьГьу, зчБчЮчу щу чБщчАьБАО з тушЦ ъЮь чяКГщчэ ьАъчшЛвчрпщьь, щч АЦИуАБрущщч тшО ъчщьэпщьО Бчсч, зпз щпАБЮпьрпуБАО Emacs. мБч зчэпщтп next-line, зчБчЮпО впъЮчсЮпээьЮчрпщп щп Атрьс рщьв. ¦шНГ C-n ьэууБ Бпзчу туыАБрьу, Бпз зпз чщ ъЮьрОвпщ з МБчы зчэпщту. ¦Ашь рК ъуЮуъЮьрОжуБу а-n з зчэпщту forward-word, Бч чщ яЦтуБ ъуЮуэуИпБЛ щп чтщч Ашчрч ръуЮут. ©уЮуъЮьрОвзп зшпрьХ -- чяКГщКы эуБчт щпАБЮчызь.

¦ чАБпшЛщчы ГпАБь МБчсч ЮЦзчрчтАБрп эК чяКГщч яЦтуэ ьсщчЮьЮчрпБЛ МБЦ БчщзчАБЛ, ГБчяК АчЕЮпщьБЛ ъЮчАБчБЦ. гБчяК тпБЛ щучяЕчтьэЦН тшО щпАБЮчызь ьщДчЮэпФьН, эК АБпрьэ ьэО зчэпщтК, зчБчЮпО р туыАБрьБушЛщчАБь рКъчшщОуБ ЮпячБЦ, р зЮЦсшКЕ АзчязпЕ ъчАшу ААКшзь щп зшНГ, зчБчЮКы уу впъЦАзпуБ. +пъЮьэуЮ, эК яЦтуэ счрчЮьБЛ: "¦чэпщтп а-n

(next-line) ъуЮутрьспуБ БчГзЦ рщьв", ьэуО р рьтЦ, ГБч next-line -- МБч зчэпщтп, зчБчЮпО трьспуБ рщьв, п а-n --- МБч зшНГ, зчБчЮКы АБпщтпЮБщч ъЮьрОвпщ з щуы.

юпв Цж эК счрчЮьэ АуыГпА БчшЛзч чя ьщДчЮэпФьь тшО щпАБЮчызь, Бч МБч ъчтЕчтОИьы эчэущБ, ГБчяК ЮпААзпвпБЛ рпэ ч ъуЮуэущщКЕ. гпАБч чъьАпщьу зчэпщт яЦтуБ счрчЮьБЛ: "гБчяК ьвэущьБЛ МБч, ЦАБпщчрьБу ъуЮуэущщЦН mumble-foo". ©уЮуэущщпО -- МБч ьэО, ьАъчшЛвЦуэчу тшО впъчэьщпщьО вщпГущьО. +щчсьу чъьАпщщКу р МБчэ ЮЦзчрчтАБру ъуЮуэущщКу АЦИуАБрЦНБ ъЮчАБч тшО чяшусГущьО щпАБЮчызь: щузчБчЮпО зчэпщтп ьшь тЮЦспО ГпАБЛ Emacs ъЮчруЮОуБ ъуЮуэущщЦН ь рутуБ АуяО ъч-ЮпвщчэЦ р впрьАьэчАБь чБ уу вщпГущьО. ©чзп рК щу ьщБуЮуАЦуБуАЛ щпАБЮчызчы, рК эчжуБу ъЮчъЦАБьБЛ ьщДчЮэпФьН ч ъуЮуэущщКЕ. ¦чстп рК яЦтуБу счБчрК, ГБчяК впьщБуЮуАчрпБЛАО, ъЮчГьБпыБу япвчрКу АрутущьО ч ъуЮуэущщКЕ, ь Бчстп ьщДчЮэпФьО чя чБтушЛщКЕ ъуЮуэущщКЕ яЦтуБ ьэуБЛ АэКАш. аэчБЮьБу Юпвтуш .



Show Matching (...), Tag Collisions, Popups Under Pointer


Эти опции объединены в один пункт мной произвольно. И исключительно потому, что я пока не разобрался, что они значат. И, следовательно, не скажу о них ничего. Кроме того, что являют они собой (за исключением Tag Collisions) простые переключатели.