Editor de texto com pesquisa de vários padrões e substituir de uma só vez?

8

Estou procurando um editor de texto da GUI capaz de fazer uma pesquisa de vários padrões e substituir tudo de uma vez. Se a fonte for um arquivo de texto, isso pode ser feito no modo de linha de comando sed, mas o texto vem da área de transferência (nenhuma outra maneira possível).

Eu preciso: colar o texto da área de transferência (no máximo de 5 a 50 palavras) no editor de texto, pressionar o botão 'substituir' com um conjunto de 10 padrões de substituição predefinidos e copiar o resultado para a área de transferência. Esta sequência será realizada cerca de 3000 vezes ...

sempre pergunte
fonte
Pensando bem, isso não pertence às recomendações de software do site Stack Exchange ?
Peter Mortensen
Eu criei um editor de texto que faz expressões regulares completas no estilo Python (usando o módulo regex do Python). Ele também permite o uso de grupos de números para substituições e até o uso de funções personalizadas para substituições. Ainda não o liberei, mas estou trabalhando para prepará-lo para o lançamento. Lembre-me de mantê-lo informado se estiver interessado, se eu não disser nada. Ele substituirá tudo de uma vez, ou uma coisa de cada vez, ou tudo depois ou antes da inserção do texto.
Brōtsyorfuzthrāx 24/10
@PeterMortensen Essa seção ainda está na versão beta. Por outro lado, analisando as 50 perguntas mais recentes no momento (android, jogos, MSWord ...) e as respostas dadas, eu diria NÃO.
alwaysask
@ user2962794 Ansioso, boa sorte!
alwaysask

Respostas:

13

... por que não usar um script? Marque xclip( sudo apt-get install xclip)

 xclip -o -selection clipboard  

enviará a área de transferência para a saída padrão e, com -ivocê, poderá substituir a área de transferência. assim

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

aplicará a alteração à seleção e agora você poderá colá-la.

Se você quer algo gráfico, pode incorporar o script com 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

Isso mostrará uma caixa de diálogo como esta:

Exemplo YAD

Observe que o script modifica o buffer da área de transferência (cola) e o imprime. Para incorporar isso em um editor, por exemplo vim, você pode fazer o seguinte:

  1. Adicione ao seu .vimrc:

    nmap <F4> :r ! /path/to/the/script <CR>
    
  2. execute, por exemplo, gvim.

  3. Agora você copia o texto, vá para o editor, pressione F4. Escolha a alteração que você deseja aplicar.

  4. O texto aparecerá no editor. Se estiver tudo bem, você pode colá-lo. De outra forma

  5. Edite o texto e copie-o novamente. (Em gvim, você pode selecionar o texto com o mouse e simplesmente escolher colar --- ou aprender os vimcomandos, o que for).

Isso poderia ser otimizado com certeza (você provavelmente pode definir facilmente outra tecla para selecionar e colar o texto modificado para ter ainda menos pressionamento de tecla para usar)

Rmano
fonte
Isso é basicamente o que uso agora, mas preciso verificar o resultado antes de copiar o texto para a área de transferência e, algumas vezes, fazer algumas alterações manuais (e rápido). Boa resposta, mas precisa ser um editor de texto.
alwaysask
Hmmm, sim, eu entendo. Vamos ver ...
Rmano 24/10
Agradável. É um pouco melhor / mais rápido do que atualmente. Obrigado. Votei no voto, mas o Q permanece - um editor de texto com capacidade de substituição de texto com vários padrões. Mesmo como um plug-in para o Gedit ou similar.
alwaysask
5

Você pode fazer isso tudo na linha de comando ainda usando algo como xselou xclippara recuperar a área de transferência atual e, em seguida, inserir o resultado nela. Aqui está um pequeno exemplo que mostra o seduso de várias substituições.

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

Devoluções 123

Oli
fonte
Como eu disse no meu comentário sobre a outra resposta, eu prefiro um editor de texto.
alwaysask
3

Eu apresento a você o editor Vim! (ou Gvim para a implementação gráfica)

# apt-get install gvim

Com este editor de texto, você pode fazer praticamente tudo. Baseia-se em atalhos de teclado, como idigitar texto e ddexcluir linhas de texto , dwexcluir palavras e d2wexcluir duas palavras.

No seu caso: para colar seu texto da área de transferência, use "*p

E para substituir o texto, use :s/foo/bar/gfoo por barra aqui.

Pascal
fonte
1
Você também pode encadear um monte de comandos usando |, por exemplo: :%s/foo/bar/g | %s/brown/fox/g | %s/lorum/ipsun/g. Ou coloque os comandos uma linha de cada vez em um arquivo e use-os :source commandfile.vimpara executar os comandos. Ou crie uma macro ...
evilsoup
O Vim nunca foi muito atraente para mim (sou mimado, sim), mas vou tentar o mais rápido possível e ver se / como ele faz o trabalho.
alwaysask