¿Editor de texto con búsqueda multipatrón y reemplazo a la vez?

8

Estoy buscando un editor de texto GUI que sea capaz de hacer una búsqueda de patrones múltiples y reemplazarlo todo a la vez. Si la fuente sería un archivo de texto, se puede hacer en modo de línea de comando sed, pero el texto proviene del portapapeles (no es posible de otra manera).

Necesito: pegar el texto del portapapeles (5-50 palabras como máximo) en el editor de texto, presionar el botón 'reemplazar' con un conjunto de 10 patrones de reemplazo predefinidos y copiar el resultado al portapapeles. Esta secuencia se realizará unas 3000 veces ...

pregunta siempre
fuente
Pensándolo bien, ¿no pertenece esto a las Recomendaciones de software del sitio de Stack Exchange ?
Peter Mortensen el
Hice un editor de texto que hace expresiones regulares completas al estilo de Python (usando el módulo de expresiones regulares de Python). También permite usar grupos de números para reemplazos, e incluso permite usar funciones personalizadas para reemplazos. Todavía no lo he lanzado, pero estoy trabajando para prepararlo para el lanzamiento. Recuérdame que te mantenga informado si estás interesado, si no digo nada. Reemplazará todo a la vez, o una cosa a la vez, o todo después o antes de la inserción de texto.
Brōtsyorfuzthrāx
@PeterMortensen Esa sección todavía está en beta. Por otro lado, mirando las 50 preguntas más recientes en este momento (android, juegos, MSWord ...) y las respuestas dadas, diría que NO.
preguntar
@ user2962794 Mirando hacia adelante, ¡buena suerte!
preguntar

Respuestas:

13

... ¿por qué no usar un script? Comprobar xclip( sudo apt-get install xclip)

 xclip -o -selection clipboard  

enviará el portapapeles a la salida estándar, y con -iusted puede reemplazar el portapapeles. Entonces

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

aplicará el cambio a la selección, y ahora puede pegarlo.

Si quieres algo gráfico, puedes incrustar el script con 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

Eso te mostrará un diálogo como este:

Ejemplo de YAD

Tenga en cuenta que el script modificará el búfer del portapapeles (pegar) y lo imprimirá. Para incrustar esto en un editor, por ejemplo vim, puede hacer lo siguiente:

  1. Añadir a tu .vimrc:

    nmap <F4> :r ! /path/to/the/script <CR>
    
  2. ejecutar por ejemplo gvim.

  3. Ahora copia el texto, ve al editor, presiona F4. Elija el cambio que desea aplicar.

  4. El texto aparecerá en el editor. Si está bien como está, puede pegarlo. De otra manera

  5. Edite el texto y cópielo nuevamente. (En gvim, puede seleccionar el texto con el mouse y simplemente elegir pegar --- o aprender los vimcomandos, lo que sea).

Podría optimizarse con seguridad (probablemente pueda definir fácilmente otra tecla para seleccionar y pegar el texto modificado de modo que tenga aún menos pulsación de tecla para usar)

Rmano
fuente
Esto es más o menos lo que uso ahora, pero necesito verificar el resultado antes de copiar el texto en el portapapeles y algunas veces hacer algunos cambios manuales (y hacerlo rápido). Buena respuesta, pero debe ser un editor de texto.
pregunte el
Hmmm, sí, lo entiendo. A ver ...
Rmano
Agradable. Es un poco mejor / más rápido que lo que hago actualmente. Gracias. He votado pero el Q sigue siendo un editor de texto con capacidad de reemplazo de texto multipatrón incorporado. Incluso como un complemento para gedit o similar.
pregunte el
5

Puede hacer todo esto en la línea de comandos usando algo como xselo xclippara recuperar el portapapeles actual y luego guardar el resultado en él. Aquí hay un pequeño ejemplo que muestra que sedse usa para hacer reemplazos múltiples.

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

Devoluciones 123

Oli
fuente
Como dije en mi comentario sobre la otra respuesta, preferiría un editor de texto.
pregunte el
3

¡Te presento el editor de Vim! (o Gvim para la implementación gráfica)

# apt-get install gvim

Con este editor de texto puedes hacer casi todo. Se basa en métodos abreviados de teclado, como iingresar texto y ddeliminar líneas de texto, dweliminar palabras, d2weliminar dos palabras.

En su caso: para pegar su texto desde el portapapeles use "*p

Y para reemplazar el texto, use :s/foo/bar/greemplazar foo con barra aquí.

Pascal
fuente
1
También puede encadenar un montón de comandos utilizando |, por ejemplo: :%s/foo/bar/g | %s/brown/fox/g | %s/lorum/ipsun/g. O coloque los comandos línea por línea en un archivo y úselos :source commandfile.vimpara ejecutar los comandos. O cree una macro ...
evilsoup
Vim nunca fue demasiado atractivo para mí (estoy malcriado, sí) pero lo intentaré lo antes posible y veré si / cómo hace el trabajo.
pregunte el