On-Line Библиотека www.XServer.ru - учебники, книги, статьи, документация, нормативная литература.
       Главная         В избранное         Контакты        Карта сайта   
    Навигация XServer.ru








 

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

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

6.1 Проверка правописания на русском языке

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

Словарь Константина Книжника

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

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

Если у вас все нормально, то можете инициировать проверку правописания для русских текстов путем вызова программы ispell с опцией '-d russian'

Если вы используете Emacs, то, вероятно, вы не против добавить пункт в меню для проверки с русским словарем.

Константин Книжник советует выполнить следующие действия:

Чтобы иметь возможность переключить запускаемый EMACS'ом ISPELL на использование русского словаря, можно попробовать добавить в .emacs следующие строки


(setq ispell-dictionary-alist (cons
 '("russian"                          ; make russian selectable
   "[\xc0-\xdf\xe0-\xff]" "[^\xc0-\xdf\xe0-\xff]" "[']"
   nil ("-B" "-d" "russian") nil) ispell-dictionary-alist))
(setq  ispell-menu-map-needed t)
(setq  ispell-menu-map nil)
(load "ispell")  ; reload ISPELL

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

Словарь Александра Лебедева

Более правильным (с точки зрения способа создания), чем словарь Книжника, является "Словарь русского языка для ispell"  Александра Лебедева.

Словарь постоянно совершенствуется, дополняется и корректируется. Последнюю версию словаря можно найти на сервере: mch5.chem.msu.su

Я использую именно этот словарь.

6.2 Emacs и XEmacs

Есть две версии редактора Emacs -- GNU Emacs и XEmacs. Они обеспечивают более или менее сходный набор функций и возможностей, но при этом реализация некоторых деталей расходится довольно сильно. Настройка кириллицы требует некого низкоуровневого (в духе Emacs Лиспа) "хака"  и немного отличается для этих двух реализаций.

Минимальная поддержка кириллицы в GNU emacs (вам не нужно этого делать при настройке XEmacs) обеспечивается при выполнении следующих вызовов, добавленных в .emacs (при условии, что поддержка символов кириллицы установлена для консоли или для X Window соответственно):


(standard-display-european t)

(let ((m (current-input-mode)))
  (set-input-mode (car m) (nth 1 m) 1))

Это позволит вам видеть и вводить символы, находящиеся в верхней части ASCII таблицы.

Однако этого не достаточно. Emacs обрабатывает кириллические символы как специальные и, как следствие, не распознает границы русских слов и не делает различия между строчными и заглавными буквами. Чтобы обойти это, вам следует несколько модифицировать таблицы синтаксиса и регистра emacs:


(require 'case-table)

(let* ((ruc "\341\342\367\347\344\345\263\366\372\351\352\353\354\355\356\357\360\362\363\364\365\346\350\343\376\373\375\370\371\377\374\340\361")
       (rlc "\301\302\327\307\304\305\243\326\332\311\312\313\314\315\316\317\320\322\323\324\325\306\310\303\336\333\335\330\331\337\334\300\321")
       (i 0)
       (len (length ruc)))
  (while (< i len)
    (modify-syntax-entry (elt ruc i) "w  ")
    (modify-syntax-entry (elt rlc i) "w  ")
    (set-case-syntax-pair (elt ruc i) (elt rlc i) (standard-case-table))
    (setq i (+ i 1))))

Для этого был создан файл rusup.el, который содержит эти команды, также как и пару других удобных функции. Вы должны вызвать его в вашем ~/.emacs.

Обратите внимание на пакет russian.el, созданный Валерием Алексеевым (valery@math.uga.edu), который позволяет пользователю переключаться между кириллическим и стандартным модами ввода и преобразовывать текстовый буфер из одной русской кодировки в другую (это очень полезно для чтения текстов, импортированных из MS-DOS или Windows).

ВНИМАНИЕ: Помимо описанной выше настройки, существует альтернативный путь обучения обоих версий emacs кириллице. Для этого используется MULE (MULtilanguage Emacs support). Для настройки кириллицы через MULE берем iso8859-5 шрифты, подключаем их к иксам, и выбираем в меню Mule нужную кодировку. Этот способ является более "идеологически"  правильным.

Совет: При работе с X-window для Emacs, вероятно, лучше всего подойдут шрифты lucidatypewriter из коллекции шрифтов Болховитянова.

6.3 Работа с vi

Редактор vi (по крайней мере, его клон vim, присутствующий в большинстве дистрибутивов Linux) знает о существовании 8-ми битных символов. Это дает вам возможность вводить кириллические буквы. Редактор правильно распознает границы слов.

Насколько я понимаю, vim использует locale для преобразования букв из строчных в заглавные и обратно, т.е. на всех встреченных мной unix-like системах vim правильно работал с русским языком после настройки locale.

Для того, чтобы постоянно не переключаться в командном режиме между английскими и русскими буквами, необходимо выполнить мапирование русских букв в английские -- либо (в старых версиях vim или vi) через команду map для каждой буквы, либо (в новых версиях vim) через опцию langmap. Последнее делается добавлением в ваш ~/.vimrc, или в общесистемный vimrc, двух строк:


set langmap=ж;;
set langmap=ё`,йq,цw,уe,кr,еt,нy,гu,шi,щo,зp,х[,ъ],фa,ыs,вd,аf,пg,рh,оj,лk,дl,э',яz,чx,сc,мv,иb,тn,ьm,б\,,ю.,Ё~,ЙQ,ЦW,УE,КR,ЕT,HY,ГU,ШI,ЩO,ЗP,Х{,Ъ},ФA,ЫS,ВD,АF,ПG,РH,ОJ,ЛK,ДL,Ж:,Э\",ЯZ,ЧX,СC,МV,ИB,ТN,ЬM,Б<,Ю>

Подробности -- в :help langmap.

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

Все проблемы joe можно решить, правильно настроив locale, если он правильным образом "пропатчен". Если у вас ничего не получилось, то попробуйте рецепт, описанный ниже.

Для того, чтобы распознавать 8-ми битные символы, joe требует специальную опцию -asis. Вы можете указать ее в командной строке или вставить в файл ~/.joerc для личного пользования, или в /usr/lib/joerc для настройки всей системы.

joe, который входит в более-менее современные дистрибутивы (BCL 6.2, RH 5.2-6.1; FreeBSD) правильно распознаёт границы русских слов. А для преобразования регистра man joe советует ^K / -- фильтровать блок через tr, т.е. все сводится к работе tr.

Назад       Содержание       Вперёд