Często mam sytuację, w której muszę zastosować tekst w całym regionie. W przypadku HTML i prostych przypadków istnieją już biblioteki do tego. Ale co z ogólnym przypadkiem? Chciałbym zapytać, co wstawię na początku i na końcu regionu.
elisp
text-editing
nperson325681
źródło
źródło
<?php
...?>
, a następnie, po wybraniu regionu i typu<?php
(lub skrótu klawiszowego), zawiń go w parę. Ale afaik, nie ma łatwego sposobu korzystania z tych bibliotek, jeśli masz wiele pojedynczych par.Odpowiedzi:
Przeszukałem go i znalazłem ten post Johna D. Cooka . Demonstruje, jak zbudować prostą funkcję interaktywną, aby łatwo przesuwać tagi HTML / XML wokół regionu. Od tego czasu zmodyfikowałem funkcję, by pytać dwukrotnie.
Co ważniejsze, ta funkcja może być również używana jako narzędzie pomocnicze, na przykład, gdy chcesz powiązać klawisze, aby zmapować określone fragmenty tekstu.
źródło
evil
, że użyję tego, że to przeszkadza. Być może funkcja typuinteractive "r"
działała solidniej?Sugerowałbym inne podejście. Gdy istnieje region, z definicji
point
musi znajdować się na początku (lub końcu) regionu imark
będzie na końcu (lub początku). Co oznacza, że możesz wpisać tekst, który chcesz w punkcie, a następnie użyćexchange-point-and-mark
, tj.C-x C-x
Przeskoczyć na drugi koniec regionu. Wprowadź drugą połowę opakowania i gotowe.Nie pojawia się wyraźne pytanie o tekst do wstawienia, ale nie wyobrażam sobie, aby byłby sposób na osiągnięcie tego samego przy mniejszym wysiłku.
źródło
multiple-cursors
można by ulepszyć, aby wstawiać tekst jednocześnie na początku i na końcu aktywnego regionu.C-x C-x
. Po otrzymaniu odpowiedzi musisz wywołać swoją funkcję (C-c something
), a także nacisnąćreturn
po każdym wpisie. Bez względu na to, co robisz, masz jeszcze dwa naciśnięcia klawiszy. To powiedziawszy, to nie pomaga, jeśli chcesz zadzwonić z elisp.Ze względu na różnorodność:
Innym sposobem na zrobienie tego z dowolnym tekstem początkowym i końcowym byłoby użycie
replace-regexp
w regionie: dopasuj.+
i zamień nabefore \& after
lub dowolny tekst, którego chcesz użyć dlabefore
iafter
.Możesz napisać polecenie do tego, ale myślę o przypadku, w którym w danym pliku chcesz zastosować ten sam tekst początkowy / końcowy w wielu miejscach. Możesz nagrać makro lub po prostu użyć historii minibufora, aby powtórzyć w innym regionie.
Oczywiście, jeśli tekst, który chcesz zawinąć, może być wyrażony jako wyrażenie regularne, nie musisz nawet wybierać regionu i możesz zrobić to
query-replace-regexp
w buforze, ale prawdopodobnie tekst, który chcesz zawinąć, nie jest tak spójny.źródło