Jak pozbyć się „domyślnego” (ostatnio używanego) ciągu w niektórych funkcjach emacsa?


12

Mam następujący problem: kiedy używam „Cx rt” (string-prostokąt), pojawia się monit o wprowadzenie ciągu znaków w celu zastąpienia wybranego prostokąta. Powiedzmy, że piszę „;;” (aby skomentować prostokąt). Działa to dobrze, ale następnym razem wywołuję tę samą funkcję i chcę zastąpić nic (pusty ciąg), nie mogę tego zrobić, ponieważ istnieje „domyślny” ciąg „;”; którego wcześniej użyłem, a jeśli tylko uderzę, wpisz polecenie, które użyje tego „;;” ciąg zamiast pustego. Jak ustawić pusty ciąg znaków?

Podobny problem miałem z niektórymi funkcjami wyszukiwania / zamiany. Zasadniczo, kiedy pamięta ostatni użyty ciąg i ustawia go jako domyślny, jak zamiast tego „wprowadzić” pusty ciąg?

EDYTOWAĆ :

Kill-rectangle, wspomniany przez YoungFrog, rozwiązuje konkretny problem, ale miałem na myśli jeszcze jedną rzecz: w zasadzie, w jakiejkolwiek funkcji emacs pamięta ostatnią wprowadzoną wartość i używa jej jako „domyślnej”, kiedy tylko naciskasz klawisz Enter, powinieneś być w stanie wyczyścić to „domyślne” na cokolwiek, co było prawdziwym domyślnym przed pierwszym użyciem tej funkcji. Oto inny przykład:

W trybie dired, jeśli „Mx rgrep” prosi o 3 dane wejściowe:

1) Czego szukać: cokolwiek tu wpiszesz, zostanie użyte domyślnie przy następnym użyciu rgrep. Jak ktoś zauważył, wyszukiwanie pustych ciągów nie ma sensu, więc wyczyszczenie tej „domyślnej” wartości naprawdę nigdy nie jest potrzebne.

2) Następnie zapyta w jakich plikach szukać. Domyślnie są to „wszystkie” pliki. Jeśli wprowadzę * .txt i rozpocznę wyszukiwanie, następnym razem, gdy użyję rgrep, * .txt zostanie użyty jako „domyślny”. Teraz chcę wyczyścić to „domyślne” * .txt i powrócić do pierwotnego domyślnego „wszystkie”, tak jak chciałem wyczyścić „;;” „default” w funkcji string-prostokąt to jego prawdziwy domyślny, pusty ciąg.

Oczywiście ten konkretny problem dla wszystkich plików można prawdopodobnie rozwiązać, wpisując *? Ale ten ogólny problem potencjalny pozostaje w przypadku innych poleceń, które zapamiętują ostatnio używaną wartość.

3) Następnie poprosi o katalog podstawowy, bez problemu.

Tak więc, jak to widzę, za każdym razem, gdy emacs próbuje mi pomóc, pamiętając moją ostatnią używaną wartość w jakimś poleceniu (co uważam za bardzo pomocne przez większość czasu), powinien istnieć sposób na wyczyszczenie tej użytej wartości, tak jakby nigdy jej nie użyłem polecenie wcześniej.

PS Nadal jestem nowy w emacsie i być może potrzebna funkcjonalność nie jest potrzebna, ponieważ zawsze jest jakieś obejście?


1
Wierzę, że to trudne, ponieważ w większości przypadków odczyt i zamiana wartości domyślnej na pusty ciąg nie odbywają się w tej samej funkcji. W tym konkretnym przypadku delete-rectanglejest opcja.
politza

Jeśli chcesz wstawić spacje w wybranym prostokącie, możesz użyć clear rectangle.
Kaushal Modi,

Jeśli chcesz po prostu zablokować komentarz / komentarz, dlaczego nie użyć comment-dwim? Również wpisanie „pustego” ciągu do wyszukiwania nie ma sensu, ale możesz wprowadzić pusty ciąg dla części zamiennej. Jestem ciekawy, aby zobaczyć więcej przykładów, w których użytkownik może potrzebować wprowadzenia pustego ciągu.
Kaushal Modi

3
Szybko przejrzałem twój opis, ale wygląda na to, że może być problem z projektem polecenia string-rectangle. Ilekroć pusty ciąg znaków ma sens jako możliwe wejście, powinien istnieć sposób na jego wprowadzenie, w odróżnieniu od akceptowania wartości domyślnej. Przyjrzyj się bliżej dokumentowi polecenia (i jego kodowi źródłowemu, jeśli nie masz nic przeciwko), aby sprawdzić, czy w tym przypadku istnieje wada konstrukcyjna. Jeśli uważasz, że jest, to proszę zgłosić go: M-x report-emacs-bug.
Drew

Dla 2)The można dosłownie wejść all, który różni się nieco od *: pasuje .*też.
npostavs,

Odpowiedzi:


3

Nie używaj C-x r t( string-rectangle), zamiast tego użyj C-x r k( kill-rectangle).


1
Odpowiedziałem tylko na podany konkretny przykład, ponieważ IMO w ogólnym przypadku (pytanie w tytule) nie przyznaje (ogólnej) odpowiedzi. Nadal chcę wspomnieć, że C-j(zamiast RET) może pomóc w niektórych przypadkach, np. W trybie ido.
YoungFrog,

3

W ogólnym przypadku nie można osiągnąć tego, czego chcesz. Wynika to z faktu, że kilka narzędzi i trybów w Emacsie przechowuje historię ukończenia odczytu w różnych zmiennych, a nie w jednej lokalizacji. Możesz ręcznie ustawić te zmienne historii na nil(na C-x r tprzykład (setq string-rectangle-history nil)), ale nie skaluje się. Nie jest też łatwo odkryć nazwy zmiennych historii bez czytania kodu.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.