Текстовый редактор с многократным поиском и заменой сразу?

8

Я ищу текстовый редактор с графическим интерфейсом, который способен выполнять поиск по нескольким шаблонам и заменять все сразу. Если источником является текстовый файл, это можно сделать в режиме командной строки с помощью sed, но текст поступает из буфера обмена (другой путь невозможен).

Мне нужно: вставить текст из буфера обмена (максимум 5-50 слов) в текстовом редакторе, нажать кнопку «заменить» с набором из 10 предопределенных шаблонов замены и скопировать результат в буфер обмена. Эта последовательность будет сделана около 3000 раз ...

всегда спрашивай
источник
Если подумать, не относится ли это к рекомендациям по программному обеспечению сайта Stack Exchange ?
Питер Мортенсен
Я сделал текстовый редактор, который выполняет полные регулярные выражения в стиле Python (используя модуль регулярных выражений Python). Это также позволяет использовать группы номеров для замен, и даже позволяет использовать пользовательские функции для замен. Я еще не выпустил его, но работаю над тем, чтобы подготовить его к выпуску. Напомни мне держать тебя в курсе, если тебе интересно, если я ничего не скажу. Он заменит все сразу, или одну вещь за раз, или все после или до вставки текста.
Brōtsyorfuzthrāx
@PeterMortensen Этот раздел все еще находится в бета-версии. С другой стороны, глядя на последние 50 вопросов (андроид, игры, MSWord ...) и ответы, я бы сказал, что нет.
Alwaysask
@ user2962794 Ждем, удачи!
Alwaysask

Ответы:

13

... почему бы не использовать скрипт? Проверить xclip( sudo apt-get install xclip)

 xclip -o -selection clipboard  

отправит буфер обмена на стандартный вывод, а вместе с ним -iвы сможете заменить буфер обмена. Так

 xclip -o -selection clipboard | sed "s/change this/to this/" | xclip -i -selection clipboard 

применит изменение к выбору, и теперь вы можете вставить его.

Если вам нужна графическая вещь, вы можете встроить скрипт с помощью yad :

#! /bin/bash 
#
yad --title Choose --button One:1 --button Two:2 --button Three:3
choice=$?
case $choice in
        1) 
        xclip -o -selection clipboard | 
                sed "s/one/uno/" | 
                xclip -i -selection clipboard
        xclip -o selection clipboard
        ;;
        2)      
        xclip -o -selection clipboard | 
                sed "s/two/dos/" | 
                xclip -i -selection clipboard
        xclip -o selection clipboard
        ;;
        3)
        echo "executing 3 --- well, you got the idea"
        ;;
esac

Это покажет вам такой диалог:

ЯД пример

Обратите внимание, что скрипт будет изменять буфер буфера обмена (вставлять) и печатать его. Например vim, чтобы встроить это в редактор , вы можете сделать следующее:

  1. Добавьте к вашему .vimrc:

    nmap <F4> :r ! /path/to/the/script <CR>
    
  2. запустить например гвим.

  3. Теперь вы скопируете текст, зайдите в редактор, нажмите F4. Выберите изменение, которое вы хотите применить.

  4. Текст появится в редакторе. Если все хорошо, как есть, вы можете вставить его. В противном случае

  5. Отредактируйте текст и скопируйте его снова. (В gvim, вы можете выделить текст с помощью мыши и просто выбрать вставить --- или изучить vimкоманды, что угодно).

Он может быть оптимизирован наверняка (вы можете легко определить другую клавишу для выбора и вставки измененного текста, чтобы иметь еще меньше нажатий клавиш)

Rmano
источник
Это в значительной степени то, что используется сейчас, но мне нужно проверить результат перед копированием текста в буфер обмена и иногда делать некоторые ручные изменения (и делать это быстро). Хороший ответ, но это должен быть текстовый редактор.
Alwaysask
Хм, да, я понимаю. Давайте посмотрим ...
Rmano
Ницца. Это немного лучше / быстрее, чем я в настоящее время. Спасибо. Я проголосовал, но вопрос остается - текстовый редактор со встроенной возможностью замены текста по нескольким шаблонам. Даже в качестве плагина для gedit или тому подобного.
AlwaysSK
5

Вы можете сделать все это в командной строке, все еще используя что-то вроде xselили, xclipчтобы извлечь текущий буфер обмена и затем вставить результат обратно в него. Вот небольшой пример, который показывает, sedкак использовать несколько замен.

echo -n abc | xsel -bi                               # write to clipboard
xsel -bo | sed 's/abc/def/;s/def/123/' | xsel -bi    # process it
echo $(xsel -bo)                                     # output it for testing

Возвращает 123

Оли
источник
Как я сказал в своем комментарии к другому ответу, я бы предпочел текстовый редактор.
Alwaysask
3

Представляю вам редактор Vim! (или Gvim для графической реализации)

# apt-get install gvim

С этим текстовым редактором вы можете делать практически все. Он основан на сочетаниях клавиш, таких как iввод текста и ddудаление текстовых строк, dwудаление слов,d2w удаление двух слов.

В вашем случае: чтобы вставить свой текст из буфера обмена используйте "*p

А для замены текста используйте :s/foo/bar/gзамену foo на bar здесь.

паскаль
источник
1
Вы можете также приковать кучу команд , используя |, например: :%s/foo/bar/g | %s/brown/fox/g | %s/lorum/ipsun/g. Или поместите команды по одной строке в файл и используйте их :source commandfile.vimдля запуска команд. Или создайте макрос ...
evilsoup
Vim никогда не был слишком привлекательным для меня (я избалован, да), но я сделаю это как можно скорее и посмотрю, если / как он справится с работой.
Alwaysask