Текстовый редактор nano

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

В Gentoo Linux, где при установке необходимость в ручном редактировании конфигурационных файлов возникает весьма часто -- так это просто единственный редактор, доступный на стадии инсталляции системы. В CRUX и Archlinux он, правда, во время установки соседствует с vim -- имитирующем тот самый, первозданный vi, и потому тоже может оказаться предпочтительным.

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

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

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

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

$ man 1 nano

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

nano01.png

Область между титульной строкой и зоной подсказки -- рабочая, в ней осуществляется ввод и редактирование текста. В 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, но, насколько я знаю, в большинстве современных дистрибутивов так оно и есть (если нет -- 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.


Теги: