Edytor tekstowy z wyszukiwaniem wielu wzorców i zamianą jednocześnie?

8

Szukam edytora tekstowego z interfejsem GUI, który jest w stanie przeprowadzić wyszukiwanie wielu wzorców i zastąpić je wszystkie naraz. Jeśli źródłem byłby plik tekstowy, można to zrobić w trybie wiersza poleceń za pomocą sed, ale tekst pochodzi ze schowka (nie ma innej możliwości).

Muszę: wkleić tekst ze schowka (najwyżej 5-50 słów) w edytorze tekstu, nacisnąć przycisk „zamień” zestawem 10 predefiniowanych wzorów zastępowania i skopiować wynik do schowka. Ta sekwencja zostanie wykonana około 3000 razy ...

zawsze pytaj
źródło
Po zastanowieniu, czy nie należy to do Zaleceń dotyczących oprogramowania na stronie Stack Exchange ?
Peter Mortensen
Stworzyłem edytor tekstowy, który robi pełne wyrażenia regularne w stylu Pythona (używając modułu wyrażeń regularnych Python). Pozwala także na używanie grup numerów do zamiany, a nawet pozwala na użycie niestandardowych funkcji do zamiany. Nie wydałem go jeszcze, ale pracuję nad przygotowaniem go do wydania. Przypomnij mi, żebym cię informował, jeśli jesteś zainteresowany, jeśli nic nie powiem. Zastąpi wszystko naraz lub jedną rzecz na raz lub wszystko po lub przed wstawieniem tekstu.
Brōtsyorfuzthrāx
@PeterMortensen Ta sekcja jest wciąż w fazie beta. Z drugiej strony, patrząc na ostatnie 50 pytań w tym czasie (android, gry, MSWord ...) i udzielone odpowiedzi, powiedziałbym, że NIE.
alwaysask
@ user2962794 Czekamy, powodzenia!
alwaysask

Odpowiedzi:

13

... dlaczego nie użyć skryptu? Sprawdź xclip( sudo apt-get install xclip)

 xclip -o -selection clipboard  

wyśle ​​schowek na standardowe wyjście, a -ity możesz go zastąpić. Więc

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

zastosuje zmianę do zaznaczenia, a teraz możesz go wkleić.

Jeśli chcesz coś graficznego, możesz osadzić skrypt w 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

Zostanie wyświetlone takie okno dialogowe:

Przykład YAD

Zauważ, że skrypt zmodyfikuje bufor schowka (wklei) i wydrukuje go. Aby na przykład osadzić to w edytorze, vimmożesz wykonać następujące czynności:

  1. Dodaj do .vimrc:

    nmap <F4> :r ! /path/to/the/script <CR>
    
  2. uruchom na przykład gvim.

  3. Teraz skopiuj tekst, przejdź do edytora i naciśnij F4. Wybierz zmianę, którą chcesz zastosować.

  4. Tekst pojawi się w edytorze. Jeśli wszystko jest w porządku, możesz je wkleić. Inaczej

  5. Edytuj tekst i skopiuj go ponownie. (W gvim, możesz zaznaczyć tekst za pomocą myszy i po prostu wybrać wklej --- lub nauczyć się vimpoleceń, cokolwiek).

Z pewnością można go zoptymalizować (prawdopodobnie możesz łatwo zdefiniować inny klawisz, aby wybrać i wkleić zmodyfikowany tekst, aby mieć jeszcze mniej naciśnięć klawiszy)

Rmano
źródło
To jest właściwie to, czego teraz używam, ale muszę sprawdzić wynik przed skopiowaniem tekstu do schowka, a czasami wprowadzić pewne ręczne zmiany (i zrobić to szybko). Dobra odpowiedź, ale musi to być edytor tekstu.
zawsze zadawaj
Hmmm, tak, rozumiem. Zobaczmy ...
Rzym
Miły. Jest trochę lepszy / szybszy niż obecnie. Dzięki. Głosowałem, ale Q pozostaje - wbudowany edytor tekstu z funkcją zamiany tekstu z wieloma wzorami. Nawet jako wtyczka do gedit lub podobnej.
zawsze zadawaj
5

Możesz to wszystko zrobić w wierszu poleceń, wciąż używając czegoś podobnego xsellub, xclipaby pobrać bieżący schowek, a następnie włożyć do niego wynik. Oto mały przykład, który pokazuje, że sedjest używany do wielokrotnego zastępowania.

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

Zwroty 123

Oli
źródło
Jak powiedziałem w moim komentarzu do drugiej odpowiedzi, wolę edytor tekstu.
alwaysask
3

Przedstawiam wam edytor Vima! (lub Gvim do implementacji graficznej)

# apt-get install gvim

Za pomocą tego edytora tekstu możesz zrobić prawie wszystko. Opiera się na skrótach klawiaturowych, takich jak iwprowadzanie tekstu i ddusuwanie linii tekstu, dwusuwanie słów, d2wusuwanie dwóch słów.

W twoim przypadku: aby wkleić tekst ze schowka, użyj "*p

Aby zamienić tekst, użyj tutaj :s/foo/bar/gzastępując foo paskiem.

Pascal
źródło
1
Można również łańcucha kilka poleceniach |, np :%s/foo/bar/g | %s/brown/fox/g | %s/lorum/ipsun/g. Lub umieść polecenia pojedynczo w pliku i użyj :source commandfile.vimdo uruchomienia poleceń. Lub utwórz makro ...
evilsoup
Vim nigdy nie był dla mnie zbyt pociągający (jestem zepsuty, tak), ale dam mu szansę i zobaczę, czy / jak wykona to zadanie.
alwaysask