Консольный текстовый редактор Nano

Опубликовано tulvit - пт, 10/05/2013 - 04:09

Стыдно! Который уже год сижу на Linux, а о Nano узнал буквально на днях.

Как я раньше правил конфиги? Alt+F2, gksu nautilus, а дальше искать нужный файл, открывать и править его в том же Geany. И так каждый раз... Даже ввести в консольке sudo gedit /etc/hosts руки не доходили. Стыдно-стыдно-стыдно.
консольный текстовый редактор nano

Так-то, Nano входит в дефолтную поставку большинства дистрибутивов, но если его нет, то и установить не сложно:

apt-get install nano

Запускается просто, достаточно набрать в консоле nano , или если нужно под рутом, то sudo nano . После этой команды Nano откроется с пустым буфером.

Nano с пустым буфером

А там уже можно либо что-то напечатать и сохранить, либо открыть внутри Nano нужный файл. Точнее, не открыть файл, а прочитать его содержимое в наш пока еще пустой буфер (т. е. если мы что-то напечатаем, то буфер будет уже не пустой, и "открытие" нового файла не перезапишет наш текст, а просто добавится к нему).

Чтобы прочитать содержимое какого-либо файла в буфер, нажимаем Ctrl+R (да, в Nano лишь клавиатурное управление, для шорткеев используются комбинации с Ctrl, который обозначается как ^, и с Alt, который обозначается как M, т. е. комбинация Ctrl+R везде будет значится как ^R, а комбинации с Alt записываются через дефис, например Alt+W будет M-W). Ну а дальше вводим путь к файлу, или же вызываем браузер по файлам, ^T.

nano file browser

Если папок/файлов слишком много, то никто не запрещает и поиском воспользоваться, ^W, но он не рекурсивный, ищет только по текущему каталогу.

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

nano ~/file.txt

Если такого файла не существует, то он будет создан (после сохранения).

Из полезных опций:

nano +LINE,COLUMN ~/file.txt - открытие файла на определенной строке/столбце, можно указать и только строку, nano +123 ~/file.txt , например.
nano -v ~/file.txt - открытие файла только на чтение.
nano -w ~/file.txt - запрет на перенос длинных строк, актуально для конфигурационных файлов, хотя опцию указывать необязательно, это значение обычно стоит по умолчанию в конфигурационном файле.

К слову, конфигурационных файлов Nano два - один основной, лежит в /etc/nanorc (который, опять же, можно прочитать и изменить через тот же Nano, sudo nano /etc/nanorc ), и второй пользовательский, ~/.nanorc, который переопределяет системные настройки, и по умолчанию не то что пустой, а даже не существует, но можно и создать.

Подсветка синтаксиса

А еще Nano умеет синтаксис подсвечивать! Разные стили для HTML, CSS, PHP, XML и прочего, да и свои создавать никто не запрещает. Описание путей к файлам стилей можно посмотреть все в том же конфигурационном файле /etc/nanorc.

Подсветка синтаксиса определяется по расширению файла (т. е. если у нас файл file.php, то он будет подсвечиваться как php), но можно и принудительно включить нужную подсветку с помощью опции Y. Команда

nano -Y php

откроет Nano с пустым буфером с PHP подсветкой кода, которую впрочем всегда можно выключить с помощью M-Y.

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

nano подсветка php синтаксиса

И PHP еще ладно. В CSS вообще для свойств получается белый текст на белом фоне. Т. е. цветовая гамма подсветки изначально рассчитана на черный фон консоли, и в таком случае выглядит достаточно приятно. Но от светлого текста на черном фоне лично у меня глаза быстро устают, особенно если приходится долго сидеть в консоле. Когда заходил в терминал редко, сервер там перезапустить, то у меня вообще оформление было под "матрицу", черный фон и зеленый текст, красиво, конечно, но совершенно не юзабельно.

В общем, надо писать свои стили. По-хорошему, это создать свой кастомный конфигурационный файл ~/.nanorc и прописать в нем пути для опять же нами созданных файлов стилей. Это по-хорошему. Но можно и по-плохому, просто внеся изменения в дефолтные конфиги. Зато быстро.

Открываем конфигурационный файл в самом низу

nano +235 /etc/nanorc

и ищем там следующие строки

## PHP
include "/usr/share/nano/php.nanorc"

Это путь до файла со стилями для подсветки PHP синтаксиса. Выходим из Nano (^X), и набираем в терминале

sudo nano /usr/share/nano/php.nanorc

после чего нашему взору предстанет следующая красота

настройка подсветки php синтаксиса в nano

Все достаточно просто. Строки, начинающиеся с ## это комментарии, а определение цветов идет в форме color цвет "регулярка".

Цвета в шестнадцатеричной форме (#FFFFFF) указывать, к сожалению, нельзя. Только через ключевые слова: white, black, red, blue, green, yellow, magenta, и cyan. Плюс все то же самое, но с приставкой bright.

Возможно проблемы с цветами не у меня одного (нет, я знаю, что маджента это цвет, но какой?), поэтому картиночка:

цветовое колесо

Ну а дальше правим конфиги на свой вкус (при правке этого конфигурационного файла я таки отключил подсветку кода, M-Y, так-как опять пошел вылезать белый текст на белом фоне, так что для начала надо было поправить не php.nanorc, а nanorc.nanorc, заменив все white и brightwhite на более темные цвета, но сразу что-то не сообразил).

настройка конфигурации подсветки синтаксиса

Я просто закомментировал старые настройки (чтобы была возможно к ним вернуться, если что) и вписал свои, заменив слишком яркие цвета (white, yellow, brightgreen) на более темные.

настройка подсветки php синтаксиса в nano

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

Копирование/вставка

Копирование/вставку внутри текста делать вполне себе просто, но для привыкших к Ctrl+C/Ctrl+V и мышке не так уж и очевидно, я во всяком случае не сразу понял как.

Есть два способа. Первый - копирование целых строк через их удаление. Позиционируем курсор на той строке, которую нужно скопировать, нажимаем ^K (вырезать) и сразу же ^U (вставить), а потом уже переходим к тому месту, куда эту строчку надо скопировать, и снова нажимаем ^U.

Копирование целой строки через, собственно, копирование. Ставим курсор на нужной нам строчке, нажимаем M-^, а дальше вставляем эту строчку куда нам нужно с помощью все той же вставки ^U.

Копирование произвольного участка строчки. Для этого ставим курсор на нужную нам позицию, нажимаем ^^, и дальше с помощью стрелок выделяем необходимый нам участок текста, а потом уже копировать (M-^) и вставить (^U).

Автоматические бекапы

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

nano -B ~/file.txt

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

nano -BC ~/nano-backups ~/file.txt

Папка для бекапов, конечно, должна уже существовать. Кстати, новые бекапы пишутся не поверх старых, а создаются новыми файлами (вида file.txt~.1, file.txt~.2 и так далее).

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

## Backup files to filename~.
set backup
## The directory to put unique backup files in.
set backupdir "~/.nano-backup-files"

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

Поиск и поиск с заменой

Простой поиск выполняется по команде ^W. После нажатия на ^W можно ввести ряд опций, например перейти к поиску с помощью регулярных выражений (M-R), искать c учетом регистра (M-C) или же, что требуется достаточно часто, поиску и замене (^R).

Проверка орфографии

Не стал бы об этом писать, но шорткей для данной функции (^T) представлен в главном меню Nano, и потестить хочется. Но при вызове проверки орфографии выскакивает ошибка [ Spell checking failed: Error invoking "spell": Operation not permitted ], что местами досадно. Однако, проблема решается на удивление просто - достаточно в конфигурационном файле /etc/nanorc раскомментировать строчку set speller "aspell -x -c", после чего поиск заработает (хотя только с поддержкой английского, для русского надо доставлять словари).

Расписывать все возможные функции, опции и шорткеи не буду, они все представлены в хелпах и документации.

Для получения хелпа по опциям достаточно ввести nano -h в терминале.

А внутри Nano справка вызывается по ^G (причем в зависимости от того, где мы находимся, если мы вызовем справку, находясь в функции поиска, то и справка будет по поиску).

Ну и конечно не стоит забывать про официальный сайт Nano: nano-editor.org. Документация там оформлена достаточно хорошо и без лишней воды.

пользуюсь давно, но буквально на днях на новом серваке подымал почту и достало что там конфиги простынями идут, невозможно читать.
гугление навело на http://rat.admin.lv/?p=116 а там и на http://bigvo.dyndns.org/nanosyntax.tar.bz2
теперь все читабельно, рекомендую

Спасибо за ссылки.

Архив скачал, посмотрел, но там все те же дефолтные цвета (или основанные на дефолтных), т. е. для того же CSS

color brightyellow start="\{" end="\}"
color brightwhite start=":" end="[;^\{]"

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

Я еще в самом начале пытался нагуглить готовые подборки стилей подсветки синтаксиса для белого фона, но так и не смог( Видимо только самому писать.

После того, как увидел в архиве over 9000 стилей для всего и вся, минут десять колебался - переключиться на черный фон и заюзать их, или остаться при белом и переписывать руками =) Пока решил остаться при белом.

Про массовую замену спасибо, что-то не подумал об этом, видимо так и сделаю.

А меня подсветка а-ля матрица вполне устраивает) вставить что-то в консоль (или в nano) через буфер - Shift+Ins (хоть что-то полезное от программирования в турбо-паскале...)

Не знал что там файл-браузер есть, обычно всегда сразу файл редактируемый указываю

А меня подсветка а-ля матрица вполне устраивает

Я еще думал поставить фоном тех же My Little Pony, "Terminal is magic", лол =)

через буфер - Shift+Ins

Проверил, и вправду работает, thnx. А я раньше вставлял по клику на колесико мышки)

Не знал что там файл-браузер есть

Но я с ним так до конца и не разобрался( Т. е. открыть Nano с пустым буфером, потом открыть браузер и вставить нужный файл - это ок.

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

Добавить комментарий

You must have Javascript enabled to use this form.