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 ...


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)


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


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.


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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.