Нано вставить новую строку в поиске и заменить
По сути, мне нужно дважды вставить часть текста. Я знаю, что могу сделать это с:
sed G
но было бы здорово, если бы я мог сделать это прямо в Нано.
Я пытался найти конец строки ($
), а затем заменить его такими вещами, как \n
или же [:newline:]
но кажется, что RegExp распознается только для поиска, а не для замены - он всегда вставляет буквенное выражение.
Однако этот вопрос говорит о том, что это возможно. Хотя я не могу понять, как. И да, у меня есть:
set regexp
в моем.nanorc
5 ответов
set regexp
в вашем конфигурационном файле будет:
Выполните расширенный поиск по регулярному выражению по умолчанию.
Вы также можете активировать его в интерактивном режиме с Meta + R *
Но это все! Поиск с использованием RegEx, но в качестве замены Nano принимает только строки, кроме ссылочных захваченных групп \1
в \9
,
Редакция Nano RegEx является реализацией POSIX, и для того, что бы вас заинтересовало, она не вычисляет [:newline:]
но принимает \s
, [:cntrl:]
(Управляющие символы) и [:space:]
(Все пробельные символы, включая разрывы строк) также отменяют классы POSIX: [^[:graph:]]
Ответ
Это не может быть сделано, ничего не работает, попробовал:
- Отображение пробелов Meta + P - без видимых изменений
- Дословный ввод Meta + Shift + V, затем нажатие Enter переведет в видимый
^M
кодировка (но работает для ввода Tab) - " Специальные функции " Esc + Esc, затем трехзначная последовательность - управляющие символы не принимаются (но допускаются видимые символы)
013
будет интерпретировать это как пользователь нажал Enter) - Ввод Unicode Ctrl + Shift + U - управляющие символы не принимаются (но принимает видимые символы)
ASCII коды для некоторых управляющих символов:
DEC HEX (\t) 9 0x09 Horizontal Tab (\n) 10 0x0a New Line (\r) 13 0x0d Carriage Return ( ) 32 0x20 Space
Нано команды:
- Поиск Ctrl + W
- Найти следующую мету + W *
- Переключить замену при поиске Ctrl + R
- Поиск и замена Ctrl + \
* Мета обычно является клавишей Alt
PS: "Иногда неудача - это ответ, или кто-то должен доказать, что я неправ"
PPS: пожалуйста
Мало того, что в настоящее время это невозможно сделать в nano, но мой запрос функции также помечен как "wontfix, too hard" в трекере ошибок.
- Выберите текстовый блок.
- Нажмите команду вставки.
- Нажмите команду flipexecute.
- Нажмите команду flippipe.
- Нажмите команду flipnewbuffer.
- Выполните любую внешнюю команду, которую вы хотите. Команда передаст выборку в стандартный ввод, а выбор будет заменен на стандартный вывод команды.
Кроме того, вы можете автоматизировать это путем записи и запуска макросов. Вы также можете привязать ключи к макропоследовательностям.
В Nano 6.4 вы можете сделать это так (или подобным образом, если вам не нравится мой конкретный метод):
Откройте файл ~/.nanorc с помощью Nano (а не какого-либо другого редактора).
Типbind F7 "|reg "" """ main
Затем поместите курсор между
Сохраните и закройте файл .nanorc.
Затем создайте этот скрипт Python (назовите его ; вам не нужно добавлять
#!/usr/bin/env python3
import re, sys
text=sys.stdin.read()
reg=""
if len(sys.argv)==3:
#Usage: ctrl+t; |reg.py "my regex" "my replacement" (don't forget the quotes, or some such)
reg=sys.argv[1]
rep=sys.argv[2]
result=re.sub(reg, rep, text)
elif len(sys.argv)==2:
reg=sys.argv[1]
result="\n".join(re.findall(reg, text))
else:
result=re.sub(r"", r"", text) #Edit the regular expression here.
print(result)
Закройте Nano, если он открыт.
Откройте Нано.
Теперь каждый раз, когда вы нажимаете F7, будет запускаться командное меню/подсказка с текстом по умолчанию.
Если вы просто сделаете один набор кавычек с регулярным выражением, он заменит ваш документ или выделение каждым из совпадений (вы можете отменить это, нажав Alt+u).
Если у вас нет кавычек, а просто сделайте
Если у вас нет Nano 6.4 и вы используете Ubuntu или что-то подобное, вы можете довольно легко скомпилировать его. Добавьте репозитории исходного кода для вашего средства обновления, если вы еще этого не сделали. Затем сделайте
Информацию о перепривязке клавиш для выполнения внешних команд см. в документации Nanorc , в частности, в этой цитате:
привязать ключ "строка" меню
Заставляет данную клавишу производить заданную строку в заданном меню (или во всех меню, где эта клавиша существует, когда используются все). Строка может состоять из текста или команд или их сочетания. (Чтобы ввести команду в строку, перед нажатием клавиши нажмите M-V.)
Вы можете более эффективно фильтровать текст из nano, передав его через исполняемую команду:
- При желании выберите текст для фильтрации (переместите курсор в начало, снова Alt Aпереместите курсор в конец Alt A)
- Выполнять:Ctrl T
- Новый буфер: Alt F(необязательно, иначе выделенный текст в текущем буфере заменяется)
- Введите команду с вертикальной чертой перед ней, например: '
|sed G
'
(обратите внимание, вы можете использовать Alt \при наборе текста для переключения добавления/удаления трубы)
Выделенный текст (или весь документ, если ничего не выбрано) будет передан через данную команду и заменен выходными данными.
(Или с выходными данными будет создан новый буфер, если вы выбрали этот вариант.)
Примечание: Ctrl Tработает только с nano 5.0. Ctrl RВместо этого для более старых версий вы можете сделать Ctrl X.