LINUX.ORG.RU

nano для самых маленьких

 ,


11

3

Основные команды текстового редактора nano

Итак, в вашей жизни случилось так, что вам нужно отредактировать какой-нибудь файл конфигурации, заполнить комментарий коммита git или написать подобную заметку с использованием разметки markdown. И в вашем распоряжении оказался редактор nano.

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

Условные обозначения, используемые для клавиатурных команд:
M- – удержание Alt или одинарное нажатие Esc;
^ – удержание Ctrl или двойное нажатие Esc.

Некоторые действия помимо клавиатурных сочетаний доступны по нажатию на функциональные клавиши.
Многие клавиатурные сочетания для выполнения действий можно быстро уточнить, нажав ^G или просто нажав клавишу F1. Там же приводится информация об условных обозначениях.

Стоит отметить, что ряд клавиатурных сочетаний могут не работать, если они конфликтуют с клавиатурными сочетаниями окружения, в котором запущен nano. Например, в эмуляторе терминала konsole уже занята комбинация Alt+6 (т.е. M-6 в nano) для переключения на 6-ю вкладку. Поэтому в данном случае, чтобы использовать именно эту комбинацию (без переобозначения её в nano) можно освободить её использование в konsole. Также некоторые сочетания клавиш могут конфликтовать с сочетаниями клавиш midnight commander, если nano запущен внутри его рабочего окружения. В этом случае придётся использовать альтернативный вариант вызова действия в nano.

Если вы запустили nano без указания имени файла как параметра запуска, то для добавления содержимого файла в текущий буфер экрана используется команда ^R. Чтобы открыть файл в новом буфере (см. также команду set multibuffer), находясь в этом режиме можно воспользоваться командой M-F. Файловый браузер в этом режиме будет открываться по нажатию ^T. Открыть файл можно и нажатием клавиши Insert.

  • Переключаться между буферами экрана можно с помощью команд M-. (или M-▸) к следующему и M-, (или M-◂) к предыдущему.

Не забывайте, если что, посматривать в меню с подсказками в нижней части экрана.

  • Закрыть текущий файл и выйти из редактора можно с помощью команды ^X (или F2), если файл был изменён, то появится запрос на сохранение изменений;
  • Быстро сохранить изменения в текущем файле можно командой ^S.
  • Сохранение текущего файла с запросом на указание имени файла выполняется командой ^O (или F3).

Непосредственно при редактировании текста, помимо прочего, доступны следующие действия:

  • начать/отменить выделение фрагмента теста – M-A (или ^6);
  • копировать текущую строку или выделенный фрагмент в буфер хранения – M-6;
  • вырезать и поместить текущую строку или выделение в буфер хранения – ^K (F9);
  • удалить строку без помещения в буфер хранения – M-Del;
  • вставить содержимое из буфера хранения в позицию курсора – ^U (F10);
  • отменить действие Undo (M-U) и «отменить отмену» действия Redo (M-E);
  • выполнить команду и вставить результат выполнения в текст – ^T;
  • поиск ^W (F6) в тексте, нажатие M-R в этом режиме включает/отключает режим использования регулярных выражений;
  • перейти к следующему следующему (M-W) или предыдущему (M-Q) вхождению искомой строки;
  • поиск с заменой – ^\ (M-R), нажатие или повторное нажатие M-R включает/отключает режим использования регулярных выражений;
  • закомментировать/раскомментировать текущую строку или выделенный блок – M-3.

Дополнительными полезными командами (см. быструю справку F1) могут оказаться:

  • отключение/включение подсветки синтаксиса (M-Y);
  • включение/отключение отображения пробельных символов (M-P);
  • включение/отключение режима преобразования символов табуляции в пробелы (M-O).

Не все об этом подозревают, но у nano есть файл конфигурации, в котором можно указать дополнительные настройки, чтобы они всегда применялись при запуске редактора. Список допустимых команд настроек и описания к ним приводятся в ман-странице man nanorc, там же сообщается, что глобальные настройки хранятся в файле /etc/nanorc, а пользовательские в файлах ~/.nanorc, $XDG_CONFIG_HOME/nano/nanorc или ~/.config/nano/nanorc.

Среди прочих полезных можно выделить несколько из них (в скобках указана команда быстрого включения/отключения соответствующего режима):

  • set constantshow – всегда показывать позицию курсора в строке состояния (M-C);

  • set multibuffer – открывать по умолчанию новый файл в новом буфере;

  • set linenumbers – отображать номера строк в колонке слева (M-N);

  • set indicator – отображать справа индикатор полосы прокрутки, чтобы видеть положение отображаемого текста относительно всего буфера;

  • set tabstospaces – преобразовывать нажатия Tab в пробелы (M-O);

  • set tabsize <column_namber> – задать количество колонок, используемых для символа табуляции (по умолчанию 8);

  • set autoindent – автоматическое выравнивание новой строки (M-I);

  • set smarthome – при нажатии клавиши Home курсор возвращается в позицию перед первым непробельным символом, вместо начала строки (M-H);

  • set guidestripe <column_number> – отображать вертикальную границу в заданной колонке (для задания цветов см. описание команды set stripecolor);

  • set minibar – скрыть заголовок и отображать минибар внизу экрана с информацией об имени файла и положении курсора относительно всего текста.

Update
Небольшое дополнение.
Редактор nano не поддерживает сортировку строк, но её всё равно можно выполнить для выделенных строк. Для это потребуется произвести следующие действия:

  • выделить нужный блок строк командой M-A;
  • вызвать режим «вставки результата выполнения внешней команды» ^T;
  • ввести команду |sort (можно добавить свои параметры) и выполнить её.

Да, это просто передача выделенного текстового блока на вход конвейера для выполнения команды сортировки.

★★★★★

Проверено: Satori ()
Последнее исправление: grem (всего исправлений: 3)

Итак, в вашей жизни случилось так, что вам нужно отредактировать какой-нибудь файл конфигурации, заполнить комментарий коммита git или написать подобную заметку с использованием разметки markdown. И в вашем распоряжении оказался редактор vim или vi.

Для базового взаимодействия с этим мощным редактором нужно знать что:

В редакторе есть два режима. Обычный и режим ввода.

  • esc переводит вас в командный режим из режима ввода.
  • i переводит вас из обычного в режим ввода.

В режиме ввода вы просто редактируете текст как в любом текстовом редакторе.

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

Командный режим делится на

  • клавиатурный, то есть после нажатия esc вся клавиатура превращается в набор хоткеев.
  • режим командной строки, когда вы вводите текстовые команды которые исполняет редактор.

В клавиатурном режиме вы можете например нажать

  • dd тем самым удалив строку на котором есть курсор
  • u отмотать редактирование назад
  • ctrl + v или shift + v выделить текст
  • y скопировать выделенный текст
  • p вставить выделенный текст

В режим командной строки перейти надо так

  • Нажать esc
  • Затем нажать shift + :

Теперь можно ввести команды:

  • e имяфайла создать и открыть для редактирования новый файл
  • set syntax=on включить подсветку кода
  • set mouse=a включить полную поддержку мыши
  • vs разделить окно вертикально
  • sp разделить окно горизонтально

Горизонтальное и вертикальное разделение окон очень удобно если вам нужно писать в одной части файла и что-то почитывать в другом конце или другом файле.

  • q закрыть текущий файл или/и разделённую область редактирования
  • ter открыть терминал прямо в редакторе
  • !command запустить программу прямо из редактора например !ls

Выполнение команд из редактора бывает очень полезным например вам нужен файл со списком факлов в текущем каталоге

  • e list.txt создаём файл
  • !ls > % или !ls > list.txt всё!
  • wq сохраняем и выходим

Ну и самое важное

  • w сохранить файл
  • wq сохранить файл и выйти
  • q! принудительно выйти без сохранения

Любые настройки вы можете внести в свой конфигурационный файл ~/.vimrc

Например set syntax=on и set mouse=a ведь в это не просто конфигурационный файл, а целый исходный файл скриптового языка программирования VimL и описывая настройки редактора, вы программируете его. В прочем, за этим дуйте в интернет.


Если вам лишь изредка нужно править конфигурационные файлы на своём сервере или роутере с предустановленным vim всё что нужно знать это

  • vim /путь/до/файла/имя_файла
  • i вход в режим редактирования. Меняйте текст как вам надо
  • esc выход из режима редактирования
  • shift + : вызов командной строки, то что ниже вписывается именно в неё
  • wq сохранить и выйти
  • wq! если для сохранения нет прав то всё равно выйти (когда забыли sudo перед vim)
  • q! выйти без сохранения (когда что-то напортачили и испугались)

Всё!


LINUX-ORG-RU ★★★★★
()
Последнее исправление: LINUX-ORG-RU (всего исправлений: 2)

Знаю, что статья стало неким ответом на спор в соседней теме, по поводу что nano не нужен. :) В основном из-за «странных клавишных сочетаний» (c), это почти цитата. )

У меня тоже есть маленькая история про сабж. Вообщем, использовал долгое время openwrt на роутере, но не хватало привычного маленького редактора. В итоге выбор пал на nano и с помощью imagebuilder он был добавлен в прошивку.

Но, в конце-концов, мне надоело этим заниматься каждый раз после выхода новой версии прошивки и я обратил внимание на встроенный великий и ужасный vi.
Со скрипом с ним подружился, далее уже было освоение vim на десктопе и теперь не представляю Linux без этого редактора. )

krasnh ★★★
()
Ответ на: комментарий от papin-aziat

Потому что это шутка =) По nano статья тянет на статью, по виму комментарий тянет на только комментарий, если писать то основательней. Напиши ты «vim для самых маленьких», что-бы даже чел нулёвый понял что делать.

LINUX-ORG-RU ★★★★★
()
Последнее исправление: LINUX-ORG-RU (всего исправлений: 2)
Ответ на: комментарий от LINUX-ORG-RU

Напиши ты «vim для самых маленьких», что-бы даже чел нулёвый понял что делать.

Я им пользуюсь раза два, когда систему ставлю с нуля, и на этом всё, дальше gedit или kwrite, в основном последний, потому что умеет править системные файлы без лишних движений по настройке, в отличие от гедита.

papin-aziat ★★★★★
()
Ответ на: комментарий от LINUX-ORG-RU

Мне вот emacs дай и я даже как файл открыть не знаю.

Так и должно быть, если ты выбрал ви.

papin-aziat ★★★★★
()
Ответ на: комментарий от LINUX-ORG-RU

Но она тянет на мини-статью напоминалку часто используемых сочетаний?

Часто ведь что-то можно выставить не только у себя на компе в заметках для памяти, но и на форумах, где легко ищется поиском, при нужде. Особенно, если это будет в шапке раздела статьи.

upd. Или кому-то отсылку дать, при затруднениях. Особенно, что касается выхода из vi/vim. :)

krasnh ★★★
()
Последнее исправление: krasnh (всего исправлений: 1)
Ответ на: комментарий от LINUX-ORG-RU

Да просто там открыть фай C-x C-f, а если вставит текст из другого - тоC-x i. C-x 2 - разделить workspace горизонтально, C-x 3 - разделить вертикально, C-x 1 - развернуть текущий workspace, как основной. С-x o - переключать фокус, между открытыми буферами (это для случая когда все они видны), C-x b или ‘C-x B’ - переключение между буферами. M-x - командный режим

Silerus ★★★★
()
Ответ на: комментарий от krasnh

Лицензия на мой комент выше «Бери и делай что угодно, буквы предоставляются как есть в надежде быть полезными, но без каких либо гарантий, любое использование на ваш страх и риск, копирайт или источник указывать не нужно, общественное достояние»

Копипасть в статьи, исправь ошибки, допиши своё если кажется нужным и всё. Мне лень =) А ты полезное дело сделаешь.

LINUX-ORG-RU ★★★★★
()
Ответ на: комментарий от LINUX-ORG-RU

Со мной все еще хуже, снега не выпросишь зимой, не то что помогать и просвещать других. Я только в плане подсказать, но чтоб палец о палец ударить… (

krasnh ★★★
()
Ответ на: комментарий от LINUX-ORG-RU

Насчёт написания заметки, я на самом деле писал её в nano, иначе бы полезность её была равна нулю ;)

При этом я использую его в основном для коммитов и интерактивного rebase, где из комбинаций мне нужны Ctrl-k и Ctrl-u для удаления или изменения порядка коммитов. Для редактирования ebuild’ов я привык к mcedit из-за того, что там используется табуляция, а я привык к пробелам и мне не хочется менять настройки в других редакторах.

grem ★★★★★
() автор топика
Ответ на: комментарий от grem

У меня тоже раньше по умолчанию нано было и для комитов в него перебрасывало, так и жил ctrl+x ctrl+o большего знать мне не надобно было, это потом я уже vim дефолтом поставил, а сейчас я просто git commit -am "текст коммита" и всё, без всяких редакторов =)

LINUX-ORG-RU ★★★★★
()
Ответ на: комментарий от LINUX-ORG-RU

А ctrl-o для коммитов зачем? Написал и вышел, он сам предложит сохранить. А редактор для коммитов приходится использовать, для упоминания багов для закрытия или просто их упоминания. Или пояснений почему теперь так.

grem ★★★★★
() автор топика
Ответ на: комментарий от grem

Я коммиты только сам себе шлю, поэтому однойстрочкой =)

А ctrl-o для коммитов зачем?

Не помню уже, жал на автомате.

LINUX-ORG-RU ★★★★★
()
Ответ на: комментарий от Silerus

Ой фсё! Спасибо. Пока читал последнюю строчку забыл верхнюю :D

LINUX-ORG-RU ★★★★★
()

Небольшое дополнение:
nano не поддерживает сортировку строк, но её всё равно можно выполнить для выделенных строк:

  • выделить нужный блок строк командой M-A;
  • вызвать режим «вставки результата выполнения внешней команды» ^T;
  • ввести команду |sort и выполнить её.

Да, это просто передача выделенного текстового блока на вход конвейера для выполнения команды сортировки.

grem ★★★★★
() автор топика
Ответ на: комментарий от LINUX-ORG-RU

Спасибо. Добавил как дополнение.

Хм, в редакторе mcedit при поиске «всех вхождений», он выделяет подходящие строки ярко-зелёным. А вот как это выделение снять, непонятно.

Но там много своих приколов, связанных с копированием между файлами; выравниванием отступов. Зато быстрая менюшка смены кодировки, удобное меню замены с запросом.

grem ★★★★★
() автор топика
Ответ на: комментарий от alt-tab-let

На первых двух абзацах можно было б и закончить рассказ ;)

grem ★★★★★
() автор топика

Ура. Подумал что наконец то научусь копировать строку в nano. Как админу часто приходиться редактировать конфиги. А чтобы не забыть что было обычно копируешь строку рядом а оригинал ремишь. (в позиции строки) yy shift+p (vim)

Читаю по доке и делаю.

  1. начать/отменить выделение фрагмента теста – M-A; (прошло)

  2. копировать текущую строку или выделенный фрагмент в буфер хранения – M-6; (прошло)

  3. вставить содержимое из буфера хранения в позицию курсора – ^U; (не катит)

Что не так ?

mx__ ★★★★★
()
Ответ на: комментарий от mx__

Русская раскладка? Если используется konsole, то некоторые комбинации он может использовать (проверить его настройки). Снимать выделение не нужно, оно само снимется при копировании. Выделить можно зажав Shift + стрелки (но у меня это в konsole настроено мной для переключения между вкладками). Вставить скопированное Ctrl+u

grem ★★★★★
() автор топика
Ответ на: комментарий от grem

анг. раскладка, centOS 7x, стандартный gnome-terminal.

Снимать выделение не нужно, оно само снимется при копировании.

Хм. Не снимается … т.е. не катит : M-6

И что делать ?

mx__ ★★★★★
()
Последнее исправление: mx__ (всего исправлений: 1)
Ответ на: комментарий от mx__

В gnome terminal Alt+6 тоже занята под переключение на 6-ю вкладку (https://help.gnome.org/users/gnome-terminal/stable/adv-keyboard-shortcuts.html.en). Нужно либо убрать в gnome terminal это сочетание, либо использовать вместо удержания Alt нажатие Esc и следом нажать 6.

Есть ещё вариант, в /etc/nanorc раскомметировать блок с другими сочетаниями клавиш:

## If you would like nano to have keybindings that are more "usual",
## such as ^O for Open, ^F for Find, ^H for Help, and ^Q for Quit,
## then uncomment these:
#bind ^X cut main
#bind ^C copy main
#bind ^V paste all
#bind ^Q exit all
#bind ^S savefile main
#bind ^W writeout main
#bind ^O insert main
#set multibuffer
#bind ^H help all
#bind ^H exit help
#bind ^F whereis all
#bind ^G findnext all
#bind ^B wherewas all
#bind ^D findprevious all
#bind ^R replace main
#bind ^Z undo main
#bind ^Y redo main
#unbind ^K main
#unbind ^U all
#unbind ^N main
#unbind ^Y all
#unbind M-J main
#unbind M-T main
#bind ^A mark main
#bind ^P location main
#bind ^T gotoline main
#bind ^T gotodir browser
#bind ^T cutrestoffile execute
#bind ^L linter execute
#bind ^E execute main

Но в таком варианте я не пытался использовать его из-за того, что иногда использую nano в termux и лень там переобозначать.

grem ★★★★★
() автор топика
Последнее исправление: grem (всего исправлений: 2)
Ответ на: комментарий от grem

Esc и следом нажать 6

Спасибо. Сработало.

  • Нажать esc
  • нажать а
  • нажать esc
  • нажать 6
  • нажать и держать ctrl
  • нажать u

Постараюсь запомнить.

Почему то только строчное выделение. Как сделать блочное выделение ?

mx__ ★★★★★
()
Ответ на: комментарий от mx__

Блочное выделение в nano не поддерживается. Его можно сделать только средствами терминала: зажать Ctrl+Alt, после зажать левую кнопку мыши и выделить блок текста с произвольной колонки. Перевести курсор в нужную позицию и нажать среднюю кнопку мыши; либо выделенный блок скопировать с помощью контекстного меню правой кнопки мыши и вставить в нужное место по Shift+Ins.

grem ★★★★★
() автор топика
Ответ на: комментарий от grem

Про терминал я в курсе давно, так в МС выделяю то что на панелях …

mx__ ★★★★★
()

в нижней части экрана отображаются подсказки клавиатурных сочетаний для выполнения различных действий в зависимости от контекста и режима работы редактора

Подсказка GNU Nano 2.9.8

^G Get Help       F3 Write Out      ^W Where Is       ^K Cut Text       ^J Justify        ^C Cur Pos        M-U Undo          M-A Mark Text     M-] To Bracket    M-▲ Previous      ^B Back           ^◀ Prev Word      ^A Home
^X Exit           ^R Read File      ^\ Replace        ^U Uncut Text     ^T To Spell       ^_ Go To Line     M-E Redo          M-6 Copy Text     M-W WhereIs Next  M-▼ Next          ^F Forward        ^▶ Next Word      ^E End

Чтобы увидеть F3 в подсказке, пришлось отключить ^O или что там было по умолчанию.

Подсказка часто недоговаривает. Если в текущем режиме с X, W(или /) не связаные какие-либо иные действия, их можно использовать вместо ^X(выход) и ^W(поиск). Вместо ^_ во встроенном браузере можно использовать g для Go to Dir

vM ★★
()
Ответ на: комментарий от vM

О ^J Justify я сначала думал, что это выравнивание, оказалось, что это удаление переносов строк в абзаце, чтобы текст занял побольше места в строке. То есть это удаление wrapping.

grem ★★★★★
() автор топика
Последнее исправление: grem (всего исправлений: 1)
Ответ на: комментарий от grem

А в 6.4 подсказка чуть подлиннее…

^G Help           ^O Write Out      ^W Where Is       ^K Cut            ^T Execute        ^C Location       M-U Undo          M-A Set Mark      M-] To Bracket    M-Q Previous      ^B Back           ^Left Prev Word   ^A Home           ^P Prev Line      M-Up Scroll Up    ^Up Prev Block    M-( Begin of Parag^Y Prev Page      M-\ First Line    M-Left Prev File  ^I Tab            ^H Backspace      M-Bsp Chop Left   M-T Cut Till End  M-D Word Count
^X Exit           ^R Read File      ^\ Replace        ^U Paste          ^J Justify        ^/ Go To Line     M-E Redo          M-6 Copy          ^Q Where Was      M-W Next          ^F Forward        ^Right Next Word  ^E End            ^N Next Line      M-Down Scroll Down^Down Next Block  M-) End of Paragra^V Next Page      M-/ Last Line     M-Right Next File ^M Enter          ^D Delete         ^Del Chop Right   M-J Full Justify  M-V Verbatim
vM ★★
()
23 декабря 2022 г.

Блин, что подразумевается под «буфером экрана»? Не нашел этому термину объяснения.

Xintrea ★★★★★
()
Ответ на: комментарий от LINUX-ORG-RU

вам нужен файл со списком факлов

Со списком чего?

А что за команда "!ls" ? Это встроенная в vi/vim команда получения списка?

Xintrea ★★★★★
()

удалить строку без помещения в буфер хранения – M-Del

Чет у меня не канает. Это надо зажать альт и потом дел, да?

Gonzo ★★★★★
()
Ответ на: комментарий от grem

что действительно смешно, по другому домену пускает :)

aol ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.