О блоге

Все новые материалы размещаются на Блогосайте alv.me. Старые - в процессе переноса.

24.07.2008

Редактор nano

POSIX.ru, Citkit, 2005 г - 2006 г

Редактор nano вполне может сыграть роль своего рода амортизатора для начинающего пользователя. Да, это не Vim, не emacs, и даже не joe. Но с задачей конфигурирования справляется успешно. А в освоении и`обращении - прост, как грабли. Не случайно во многих дистрибутивах Linux он по умолчанию предлагается в качестве общесистемного. В Gentoo Linux, где при установке необходимость в ручном редактировании конфигурационных файлов возникает весьма часто - так это просто единственный редактор, доступный на стадии инсталляции системы. В CRUX и Archlinux он, правда, во время установки соседствует с vi - имитирующем тот самый,
первозданный, и потому тоже может оказаться предпочтительным.

Не след забывать о nano и пользователям Kubuntu. Конечно, с одной стороны, они имеют мощный и удобный инструмент редактирования в Иксах - Kate, с другой - и Vim'ом эта система не обделена. Но, как мы увидим позднее, даже в этом гуманистическом дистрибутиве иногда возникает потребность в чисто консольном редакторе, а многие ли из начинающих пользователей способны сразу же смотреть на Vim без содрогания?

Наконец, пользователям Ubuntu для настроечных процедур nano может подойти даже больше, чем штатный Gedit из комплекта GNOME...

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

Итак, представляю: редактор nano, или, точнее, GNU nano. Официальным местопребыванием имеет сайт http://www.nano-editor.org. Генетически связан с pico - текстовым
редактором, входящим в почтовый пакет pine, но, в отличие от него, распространяется на условиях лицензии GPL (и, что немаловажно, не тянет за собой почтовой системы - возможно, не всем нужной). Характеризуется авторами как маленький и дружелюбный. Что в целом соответствует истине.

Редактор nano чисто консольный и запускается из строки шелла одноименной командой, можно - с указанием имени файла, существующего или нового (в последнем случае, как обычно, файл с таким именем будет создан). Поддерживается несколько опций командной строки, как то: -T #, устанавливающей величину (в символах) табуляции, -i, включающей автоматические отступы, -w, отключающей режим переноса строк на границе экрана (что очень важно при редактировании конфигурационных файлов), и так далее. Полный их список можно посмотреть посредством

$ man 1 nano

После запуска nano перед глазами возникает нечто вроде следующего (рис. 1). Вверху - титульная строка, в которой
выводятся номер версии программы, имя открытого файла и, в правом углу, сообщение о том, что файл был изменен. В нижней
части экрана можно видеть зону подсказки - список основных из управляющих клавишных последовательностей (образованных
сочетанием <Control>+литера) с пояснениями на языке установленной локали.

Рис. 1. Редактор nano - внешний вид

Область между титульной строкойи зоной подсказки - рабочая, в ней осуществляется ввод и редактированиетекста. В nano предусмотрен (в отличие, например, от vi и vim) только один режим работы. То есть текст вводится обычным образом, а для вызова команд предусмотрены управляющие последовательности. Ознакомиться с ними можно, вызвав встроенную системупомощи клавишей <F1>.

В nano существуют два вида управляющих последовательностей -
собственно управляющие, <Control>+литера, и мета-последовательности, <Meta>+литера. Посредством первых осуществляется редактирование текста и операции с
файлами. Управляющие последовательности частично дублируются функциональными клавишами <F1>-<F16> (вызов <F13>-<F16> - посредством сочетания <Shift>+<F1>-<F4>). Meta-последовательности предназначены для изменения настроек редактора (тот же результат достигается и опциями командной строки).

Напомню, что на клавиатуре PC роль Meta-клавиши выполняет обычно нажатие клавиши <Alt> (в некоторых раскладках
- конкретно <Alt>'а правого, или, напротив, левого), или нажатие и отпуск клавиши <Escape>.

Control-последовательности - следующие (в скобках - дублирующие функциональные клавиши и, иногда, Meta-последовательности):

  • <Control>+<G>(<F1>) - вызов меню полной подсказки;

  • <Control>+<X>(<F2>) - выход из программы;

  • <Control>+<O>(<F3>) - запись текущего файла;

  • <Control>+<R> (<F5>) - вставка файла в текущий;

  • <Control>+<W>(<F6>) - поиск текста в текущем файле;

  • <Control>+<\>(<F14> или <Meta>+<R>) - замена текста в текущем файле; сначала вводится замещающий текст, потом, после нажатия
    <Enter> - заменяемый;

  • <Control>+<Y> (<F7> или <PgUp>) - перемещение на предыдущий экран;

  • <Control>+<V> (<F8> или <PgDwn>) - перемещение на следующий экран;

  • <Control>+<K> (<F9>) = удаление (Cut, вырезать) строку в позиции курсора (или группы выделенных
    посредством <Control>+<^> строк) с сохранением ее в буфере (cutbuffer);

  • <Control>+<U > - (<F10>) - вставка содержимого cutbuffer'а в строку в позиции курсора; если последняя не менялась - выполняет роль Undo (отмены), штатно не предусмотренной; может также использоваться для неограниченного клонирования строки (или группы ранее
    вырезанных посредством <Control>+<K>
    строк) в прозвольной части текста - достаточно после удаления переместить курсор в нужное место;

  • <Control>+<C> (<F11>) - вывод информации о положении курсора в форме вроде

            [ строка 4 из 81 (4%), символ 117 из 3092 (3%) ]
  • <Control>+<T> (<F12>) - проверка орфографии (посредством внешней программы спеллинга, если она установлена и включена соответствующая опция в конфиге, см. ниже);

  • <Control>+<P> - перемещение курсора на одну строку вверх;

  • <Control>+<N> - перемещение курсора на одну строку вниз;

  • <Control>+<F> - перемещение курсора на один символ вперед;

  • <Control>+<B> - перемещение курсора на один символ назад;

  • <Control>+<A > - перемещение курсора в начало текущей строки;

  • <Control>+<E> - перемещение курсора в конец текущей строки;

  • <Control>+<L> - перерисовка текущего экрана;

  • <Control>+<^> (<Meta>+<A>) - выделение текста, начиная с текущей позиции курсора, с целью
    последующего удаления (комбинацией <Control>+<K>) и переноса в другое место
    (комбинацией <Control>+<U >); снятие выделения - повторным нажатием <Control>+<^>;

  • <Control>+<D> - удаление символа в позиции курсора;

  • <Control>+<H> - удаление символа слева от курсора;

  • <Control>+<I> - вставка символа табуляции;

  • <Control>+<J> (<F4>) автозаполнение текущего абзаца;

  • <Control>+<M> вставка символа перевода строки (CR) в позиции курсора;

  • <Control>+<_> (<F13> или <Meta>+<G>) - переход на указанный
    номер строки.

Meta-последовательности работают обычно как переключатели. С их помощью выполняются следующие действия:

  • <Meta>+<C> - включение/выключение постоянного
    положения курсора;

  • <Meta>+<I> - включение/выключение автоотступов;

  • <Meta>+<Z> - включение/выключение приостановки;

  • <Meta>+<X> - включение/выключение вывода зоны
    подсказки;

  • <Meta>+<P> - включение/выключение режима эмуляции редактора pico;

  • <Meta>+<W> - включение/выключение режима переноса слов;

  • <Meta>+<M> - включение/выключение поддержки мыши
    (только при сборке с поддержкой gpm);

  • <Meta>+<K> - разрешить/запретить вырезание до конца

  • <Meta>+<E> - включение/выключение использования регулярных выражений (regexp).

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

Правда, по умолчанию этот файл не устанавливается, и сам собой, при запуске редактора, не образуется. Пример его (nanorc.sample.gz) следует отыскать в файловом древе (например, в Kubuntu - в каталоге /usr/share/doc/nano/examples/) и поместить в свой домашний каталог:

$ zcat /usr/share/doc/nano/examples/nanorc.sample.gz > ~/.nanorc

после чего отредактировать по собственному усмотрению. Правда, для этого редактор должен быть перед сборкой
сконфигурирован с опцией with --enable-nanorc, но, насколько я знаю, в большинстве дистрибутивов (в частности,
в Ubuntu и Kubuntu) так оно и есть (если нет - nano придется пересобрать самому).

Описывать подробно устройство ~/.nanorc не буду - остановлюсь только на моментах, представляющихся мне самыми важными. По умолчанию все опции настройки закомментированы - чтобы сделать их действенными, с соответствующих строк требуется снять символ #. И первый кандидат на раскомметирование - строка

set nowrap

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

Далее - проверка орфографии, Для обеспечения оной нужно снять комментарий со строки

set speller "aspell -x -c"

В результате по комбинации <Control>+<T> (или по <F12>) для спеллинга будет вызываться программа aspell - если она, конечно, установлена и снабжена словарем для требующегося языка. Разумеется, aspell можно заменить
ispell'ом - но в Kubuntu это делать не рекомендуется (ispell так до сих пор и не научился работать с кодировкой UTF8).

И, наконец, подсветка синтаксиса. В nano она предусмотрена для
нескольких языков программирования (Си, Java, Perl) и таких языков разметки, как HTML, TeX, Groff, нужно только снять комментарии с соответствующих строк. В частности, если раскомментировать всю секцию за строкой

## Here is a short example for HTML

то есть:

syntax "HTML" "\.html$"
color cyan start="<" end=">>"
color red "&[^;[[:space:]]]*;"

то будут подсвечиваться теги HTML. А
если внести в ~/.nanorc такие строки:

# Generic conf/rc/sh file syntax highlighting
#############################################
syntax "conf/rc/sh" "conf$|rc$|sh$"
color white ".+"
color green "^#.*"

то колоризуются конструкции шелл-скриптов (в "образцовом"
~/.nanorc таких строк нет).Собственно, это и все. Функциональные возможности nano отнюдь не производят
впечатления исключительно богатых. Однако со своей ролью - несложной правкой небольших конфигурационных файлов, -
он вполне вполне справляется. А способность подключать программы проверки орфографии позволяет использовать его и для сочинения просто текстов.

Теперь остается сделать nano редактором по умолчанию - чтобы
использовать его в командах типа sudoedit и visudo (а также в ряде других случаев). Для чего воспользуемся им самим же, открыв в нем конфигурационный файл командной оболочки (в виртуальной консоли или терминальном окне konsole:

$ nano ~/.bashrc

Теперь вписываем в него такую вот строку:

export EDITOR=nano

определяющую переменную оболочки EDITOR. Теперь редактор nano будет вызываться при редактировании системных конфигов командой sudoedit.