- Подписка на печатную версию:
- Подписка на электронную версию:
- Подшивки старых номеров журнала (печатные версии)
LXF131:nano
Материал из Linuxformat.
Содержание |
Nano: Третий путь
- Ненавидите лапидарность Vi или комбинации клавиш Emacs? Майк Сондерс представляет Nano, текстовый редактор, вместивший большую мощь в малый объем.
Похоже, наш мир все более поляризуется. Вам нравится либо Microsoft, либо Apple. Вы пьете либо Coca, либо Pepsi. Вы либо с нами, либо против нас. Время – деньги, и в этом мире стремительных темпов кто может позволить себе выбиться из колеи упорно навязываемого простейшего выбора?
Но вы – пользователь Linux, а значит, избрали третий путь: дорогу, отдельную от двух главных коммерческих систем, Windows и OS X. Вы знаете, что почти всегда найдется вариант, отличный от A и B. Вы сознательно решили попробовать нечто иное, и вознаграждены, помимо прочего, операционной системой, которая стоит сейчас на вашем надежном компьютере. А как насчет текстовых редакторов?
Если взглянуть на практически любую дискуссию на эту тему в Интернете, то создастся впечатление, что игру делают всего два редактора: Vi(m) и Emacs. Оба они чрезвычайно мощные и сложные – между прочим, про Emacs часто шутят что это, по сути, операционная система, по случаю прихватившая и текстовый редактор. У них крутая кривая обучения и функциональность, скрытая за тайными командами и вывихивающими пальцы сочетаниями клавиш.
А не рассмотреть ли третий вариант, Nano (http://www.nanoeditor.org)? Этот редактор прекрасен, потому что он
- компактен, легок и включен в большинство дистрибутивов;
- прост в использовании и дает на экран много обратной связи;
- содержит массу продвинутых функций, способных конкурировать с Vi(m) и Emacs.
Nano работает в текстовом режиме в командной строке, что может навести на мысль «Зачем мне изучать редактор с текстовым режимом? Все, что нужно, делают Kate, Gedit и FooEdit 2000». Ну, во-первых, все постоянные пользователи Linux и администраторы должны иметь прочный опыт работы с редактором в командной строке. Например, если что-то случится с системой X Window System, вы попадете в терминал – и эти навыки окажутся существенными для редактирования конфигурационных файлов.
Во-вторых, если ваша Linux-машина работает как сервер, она не обязательно содержит X’ы и графические утилиты; тогда редактор с командной строкой придется применять довольно часто. Базовые навыки работы в нем, помимо открытия и сохранения файлов, увеличат производительность вашего труда, а к этому мы все и стремимся.
Историческая сводка такова: в конце 80‑х почтовым клиентом для Unix был Elm. Затем возник Pine, имя которого, по одной из версий, расшифровывалось как «Pine Is Not Elm (Pine – это не Elm)». Текстовым редактором в Pine был Pico, но он не являлся полностью свободной программой в понимании GNU. Поэтому создали Tip (Tip Isn’t Pico), позднее переименованный в Nano (Nano’s ANOther editor). Забавно, правда?
Прокладываем путь
Прежде чем нырнуть в разбор возможностей Nano, уделим минутку на ознакомление с интерфейсом редактора. Ввод nano в командной строке выдаст вам Nano в состоянии по умолчанию. Если вы уже пробовали Emacs, но были огорчены недостатком информации на экране, то Nano приятно вас удивит, а уж о Vi лучше и не говорить. Можете сразу же вводить текст, используя для перемещения по нему курсорные клавиши.
Вверху находится панель заголовка, содержащая номер версии Nano и имя редактируемого файла. Ниже, поскольку мы еще не открыли никакого файла, написано «New Buffer». Чтобы запустить редактор с файлом, просто введите в командной строке имя последнего: nano filename.txt. Внизу помещена полезнейшая быстрая справка о наиболее частых сочетаниях клавиш, в формате
^O WriteOut
Информация намеренно сжатая, чтобы побольше втиснуть на экран, так что за подробностями обращайтесь к «Quick keybinding reference [Быстрой справке по горячим клавишам]». Здесь символ ^ означает левую клавишу Ctrl вашей клавиатуры, то есть ^O соответствует Ctrl+O (хоть в верхнем, хоть в нижнем регистре). WriteOut сохраняет файл на диск, и нажав Ctrl+O, вы увидите внизу следующее приглашение:
File Name to Write:
Если вы открывали существующий текстовый файл, то его имя подставится автоматически, и нужно будет только нажать на Enter'. Если нет, придется ввести имя самим. Тут мы и убедимся в мощности Nano: нажмите Ctrl+t, и экран сменится на прекрасный двухпанельный файловый менеджер. С помощью курсорных клавиш можете перемещаться по каталогам, чтобы найти нужный файл, куда вы сохраните текст.
Как и следовало ожидать, этот файловый браузер пригоден и для других задач. Нажмите Ctrl+X, чтобы выйти из браузера, затем Ctrl+C, чтобы отменить операцию сохранения. Теперь жмите Ctrl+R, чтобы считать файл и вставить результат в текущую сессию редактирования. Когда появится приглашение на ввод имени файла, нажмите Ctrl+t и найдите файл, который требуется вставить.
Итак, с открытием, сохранением и вставкой файлов разобрались. Часто используемые сочетания клавиш всегда видны внизу экрана, и вы не запутаетесь. Теперь рассмотрим операции вырезать/вставить. Nano в этом отношении сильно отличается от многих других редакторов; однако, попривыкнув, вы поймете, что его способ весьма эффективен.
Введите пять строк какого попало текста, затем переместите курсор на вторую строку. Нажмите Ctrl+K, и эта строка исчезнет. Где именно в строке располагался курсор, неважно: она вся будет вырезана («Kut»). Теперь содержимое этой строки находится в буфере, и можно перейти в любое другое место, нажать Ctrl+U, и строка будет «Uncut» (вставлена в документ).
То же можно проделать и с несколькими строками. Поместите курсор на верхнюю строку нужного фрагмента и нажмите Ctrl+K ровно столько раз, сколько строк нужно вырезать. Прежнее содержимое буфера заменится на новый вырезанный фрагмент.
После этого перейдите на то место, куда хотите вставить текст, нажмите Ctrl+U – и все строки, пропавшие при вырезании, появятся в документе. Для нескольких вставок нажмите Ctrl+U нужное число раз.
По умолчанию номера строк не отображаются, однако при нажатии Ctrl+C появится сообщение о статусе, указывающее строку, столбец и символ у текущей позиции курсора, а также смещение от начала файла в процентах от его объема.
Сочетания клавиш
- Ctrl+X Выход из редактора. Если вы не сохранили редактированный текст, вас спросят, действительно ли вы хотите выйти.
- Ctrl+O Запись (output) текущего содержимого текстового буфера в файл. Появится приглашение ввести имя файла; нажатие Ctrl+T выдаст файловый навигатор, показанный выше.
- Ctrl+R Чтение текстового файла и вставка его содержимого в текущую сессию редактора. При запросе на имя файла можно вызвать навигатор, нажав Ctrl+T.
- Ctrl+K Вырезание строки в буфер обмена. Несколько нажатий вырежут несколько строк, которые сохранятся как один фрагмент.
- Ctrl+J Выравнивание (заполнение) абзаца. По умолчанию при этом текст будет соответствовать ширине окна редактирования.
- Ctrl+U Вставка текущего содержимого буфера. Примененная после операции выравнивания, эта команда отменит операцию.
- Ctrl+T Проверка орфографии.
- Ctrl+W Поиск слова или фразы. В приглашении с помощью курсорных клавиш можете просмотреть предыдущие слова поиска, а нажатие Ctrl+R включит режим замены. Также можно нажать Ctrl+T, чтобы перейти на определенную строку.
- Ctrl+C Покажет текущий номер строки и информацию о файле.
- Ctrl+G Получить справку; вам выдадут информацию о работе с файлами и основные клавиатурные команды.
Отрада опытных пользователей
Nano унаследовал одну из хваленых функций Pico – выравнивание текста. При этом текстовый блок встраивается в определенную ширину страницы, посредством переносов и перераспределения слов. Такую возможность включают немногие из текстовых редакторов, тем более легковесных; однако поскольку Pico использовался для почтовых сообщений и для чтения групп новостей, где цитаты нескольких уровней требовалось вмещать в экран шириной 80 символов, этой функции уделялось особое внимание.
В новой сессии Nano введите следующий текст:
сидит кошка на моем окошке
Теперь представьте, что нужно преобразовать этот текст в одну строку. Во многих текстовых редакторах пришлось бы делать эту работу вручную, переходя на конец строки и нажимая Delete.
А в Nano все иначе. Просто поместите курсор на какую-нибудь из этих трех строк и нажмите Ctrl+J, и вы увидите:
сидит кошка на моем окошке
Внизу экрана возникнет статусное сообщение «Can now UnJustify [Выравнивание можно откатить]». Нажатие Ctrl+U вернет все назад.
По умолчанию Nano выравнивает текст по ширине окна редактора. Если вы работаете в X-терминале, наберите какой-нибудь текст и с помощью операций вырезать/вставить заполните им половину окна. Нажмите Ctrl+J для выравнивания текста, после чего поменяйте размер окна и нажмите Ctrl+J еще раз. Вы увидите, что текст влился в размер окна. Nano выравнивает по абзацам – кускам текста, разделенным пустыми строками.
Уже неплохо; но настоящая сила прибывает с опцией -r. Выйдите из Nano и запустите его еще раз с помощью -r30. Так вы скажете Nano, чтобы все операции выравнивания укладывали текст в ширину 30 символов, независимо от размера окна.
У этой функции есть множество прекрасных применений. Например, британский сайт Linux Format ежемесячно рассылает подписчикам письмо с новостями, новыми возможностями и прочим (http://www.linuxformat.com/newsletters). При этом желательно придерживаться определенной ширины строки письма, чтобы сообщение смотрелось на любой машине. Разные почтовые клиенты по-разному обращаются с простым текстом, и чтобы сделать все как можно проще и надежней, мы запускаем nano -r68 newsletter.txt, вводим текст и нажимаем Ctrl+J, форматируя текст для рассылки.
Другой пример: представьте, что вы нарыли в Интернете замечательную команду с диким количеством параметров – например, команду mencode для преобразования видеофайла. Из-за представления web-страницы, при копировании и вставке команда превратится в 20 строк. Вместо того, чтобы удалять все символы перевода строки, просто запустите Nano с помощью nano -r1000. Вставьте в него текст (почти на всех X-терминалах работает Shift+Insert), нажмите Ctrl+J, и весь текст сложится в одну прекрасную строку, пригодную для вставки в терминал. Alt+J выравнивает все абзацы в файле.
Есть и еще возможности. Nano умеет автоматически создавать резервные копии файлов после их сохранения. Передайте ему опцию -B (nano -B config_file.txt), и при нажатии Ctrl+O, помимо сохранения, создастся резервная копия более старой версии файла, с тильдой в конце его имени (config_file.txt~). Это стоит проделывать при редактировании важного системного файла – если что-то пойдет не так, старую версию можно восстановить одним взмахом руки.
Полностью поддерживается поиск и замена: нажмите Ctrl+W (Where is…?), и вы увидите приглашение. Введите слово для поиска; а для замены нажмите Ctrl+R. Если в приглашении нажать Alt+R, оно превратится в [Regexp], что позволит выполнять поиск на основе регулярных выражений. С помощью курсорных клавиш вверх и вниз можно перемещаться по более старым строкам поиска – даже тем, что были в предыдущих рабочих сеансах. Они хранятся в вашем домашнем каталоге в файле .nano_history.
Интерфейс у Nano настраиваемый: по мере привыкания к редактору вам уже не понадобятся быстрые справки внизу насчет сочетаний клавиш. Командой -x можно указать Nano больше не показывать их. Опция -c делает строку состояния видимой всегда, а опция -S (S заглавная) заставит Nano прокручивать за один раз одну строку, а не страницу. Все это можно объединить:
nano -xcSr68 filename.txt
Здесь мы задали отсутствие справки, постоянно видимую строку состояния, гладкую прокрутку и выравнивание текста по 68 символам. Прямо как мамочка делывала!
Радости разработчиков
В Nano даже есть подсветка синтаксиса для различных языков программирования, хотя по умолчанию она отключена по соображениям производительности: на старых машинах анализ большого кодового файла с тем, чтобы каждая его строка отображалась правильным цветом, требовал много ресурсов. Однако на компьютерах, собранных не более десяти лет назад, вы замедления не заметите.
Чтобы включить подсветку синтаксиса, откройте конфигурационный файл Nano (см. врезку ниже) и прокрутите его до последнего раздела. Вы увидите набор строк вида
## C/C++ # include “/usr/share/nano/c.nanorc”
Знак решетки – это комментарий; удалив его во второй строке, вы предпишете Nano считывать на старте файл c.nanorc – в нем описана подсветка синтаксиса для файлов исходного кода C и C++. Посмотрев далее по списку, вы увидите, что имеется подсветка для Python, Perl, Ruby, Java, HTML, TeX и для других форматов.
Давайте создадим файл описания подсветки для языка, который не поддерживается в Nano по умолчанию. Зайдем в /usr/share/nano и скопируем sh.nanorc в файл языка, поддержку для которого мы пишем – скажем, в php.nanorc. Файл sh.nanorc мы выбрали за простоту: его легко модифицировать. А вот, например, в c.nanorc вы увидите жуткие нагромождения регулярных выражений, способные просто взорвать мозг.
В файле php.nanorc первая незакомментированная строка будет такой:
syntax “sh” “\.sh$”
Она велит Nano использовать данное форматирование для всех файлов, которые заканчиваются на .sh, и здесь нужно поменять все вхождения sh на php. Спуститесь на пару строк ниже, и вы увидите
color green “\<(case|do|done|elif|...
Когда в исходном коде встречаются ключевые слова case, do, done, elif и прочие, они окрашиваются зеленым (green). Вы можете удалять ключевые слова и добавлять новые, однако следите, что бы структура строки не менялась и чтобы ключевые слова отделялись значком канала |. Следующая строка может показаться тарабарщиной, если вы не знакомы с регулярными выражениями:
color green “(\{|\}|\(|\)|\;)...
Поясним: так задается цвет, используемый для определенных не буквенно-цифровых символов, таких как скобки и точки с запятой. Как и ключевые слова, они отделяются символом канала, но поскольку они и сами являются спецсимволами, применимыми в инструкциях по подсветке синтаксиса, мы «экранируем» их обратной косой чертой.
Если бы мы определили скобки в коде PHP как {|}|(|), это быне сработало: синтаксический анализатор Nano запутался бы, сочтя их инструкциями. Использование обратной косой черты перед каждой из скобок говорит Nano, что они должны рассматриваться как отдельные символы. Таким образом, сюда можно подставлять любой не буквенно-цифровой символ, но предварять его знаком \.
Большая часть оставшихся строк в нашем файле php.nanorc имеют тот же формат. Ближе к концу вы увидите такую строку:
color cyan “(^|space:)#.*$”
Она приказывает анализатору окрасить в голубой (cyan) все фрагменты текста, начинающиеся с символа решетки, до конца строки – другими словами, комментарии. В PHP для комментария также применяется двойная косая черта, так что скопируем эту строку и поменяем решетку на '\/\/:
color cyan “(^|space:)\/\/.*$”
С такой добавкой при открытии файлов PHP вы увидите, что комментарии с двойной чертой тоже раскрашены правильно.
Есть и другие функции, полезные для программистов. При редактировании текста нажмите Alt+I, чтобы включить режим автоматической расстановки отступов: тогда курсор будет оставаться в том же столбце при нажатии на Enter. Это особенно полезно в языках, где пробелы несут синтаксический смысл – например, в Python.
При сохранении файла вам, вероятно, может понадобиться его преобразование в другой формат для другой платформы. Linux и Windows используют разные невидимые символы конца строки, и это порой доставляет много головной боли. Попробуйте, например, открыть текстовый файл, созданный в Unix, с помощью Блокнота из Windows XP – все строки слипнутся.
Итак, при появлении приглашения ввести имя файла, нажмите Alt+D, чтобы переключиться между текстовыми стилями Unix и Windows/DOS (Alt+m переведет вас в формат для Mac, однако на самом деле это годится для Mac OS 9 и ранее). Мощь Nano позволит брать чьи-то испорченные записи, прокачивать их в текст без переносов строк, а затем выдавать обратно в формате, понятном этим глупым не-Linux-машинам. Ура!
Редактирование файлов настройки
Главный файл настройки Nano – /etc/nanorc. Но он не одинок: /etc/nanorc может содержать другие конфигурационные файлы, например, определения расцветки синтаксиса в /usr/share/nano. В nanorc можно задать опции по умолчанию, чтобы не прописывать их явно в командной строке. Каждая опция имеет формат:
# set backup
Это эквивалент опции -B командной строки. Данная строка закомментирована знаком решетки, и Nano будет действовать с настройками по умолчанию, то есть не создавая резервных копий.
Если знак решетки убрать, то по умолчанию создание резервных копий будет включено, а если вы хотите явно сказать Nano, чтобы он этого не делал, поменяйте строку вот на какую:
unset backup
Все опции сопровождаются небольшим текстом-пояснением, так что там не будет ничего непостижимого.