Cofnij w trybie wstawiania

23

Czy istnieje polecenie cofnięcia ostatniej operacji wykonanej w trybie wstawiania?

Właśnie wkleiłem tekst z niewłaściwego rejestru <C-r>i mam dwie opcje:

  1. Usuń ręcznie to, co właśnie wkleiłem i zacznij od nowa.
  2. Przełącz się do trybu normalnego, uderzaj ui gubię tekst, który wpisałem przed uderzeniem <C-r>.

Czy jest lepszy sposób?

zool
źródło

Odpowiedzi:

16

Vim oferuje ograniczoną możliwość określenia zakresu niemożliwej do cofnięcia zmiany za pomocą Ctrl-G upolecenia, które przerywa sekwencję cofania. Widzieć

:help i_CTRL-G_u

W twoim przypadku rozwiązaniem byłoby ponowne mapowanie w <C-R>następujący sposób:

:inoremap <C-R> <C-G>u<C-R>

Następnie wpisanie <C-O>uspowoduje cofnięcie tylko zmian dokonanych od momentu wpisania <C-R>. Widzieć

:help i_CTRL-O
garyjohn
źródło
1
To wspaniale, nie wiedziałem o tym poleceniu. Pomiędzy pisaniem <C-O>ua wyświetlaniem wyniku na ekranie jest dość długie opóźnienie (około 4 sekund), masz pomysł, jak się go pozbyć?
zool
Też to zauważyłem. Nie wiem; Spróbuję się dowiedzieć.
garyjohn
Hej, czy to możliwe, że miałeś na myśli <CR> (powrót karetki) zamiast <CR> (ctrl-r)?
Derwent,
Nie. Pierwotne pytanie dotyczyło zachowania <CR>, więc tego używa mapowanie. Można jednak zastąpić <CR> przez <CR> w tym odwzorowaniu, aby zamiast tego sekwencja cofania była przerywana przez <CR>. Więcej przykładów można znaleźć na stronie :help i_CTRL-G_u.
garyjohn
6

Z trybu wstawiania:

  1. Jeśli wklejony tekst jest mniejszy niż jedna linia (co sugeruje drugi punkt), po prostu naciśnij, <C-u>aby usunąć wszystkie znaki przed kursorem w bieżącej linii.

  2. Jeśli wklejony tekst jest więcej niż jeden wiersz, Twój 2-te rozwiązanie będzie działać lepiej, dostosowuje się w następujący sposób: <C-o>u.

Oba powyższe punkty zaczną się i pozostaną - lub zakończą - w trybie wstawiania; w rzeczywistości są takie same z proponowanymi przez Ciebie rozwiązaniami, po prostu skrócone :)

VanLaser
źródło
6

Możesz spróbować <C-w>(usuwa słowo po lewej stronie) lub <C-u>(usuń znaki przed kursorem po jednokrotnym naciśnięciu, usuwa łamanie linii po drugim naciśnięciu). Zobacz :help i_CTRL-Wi :help i_CTRL-U.

Jeśli dużo wkleisz z rejestru, cofnięcie zmian jest oczywiście szybsze, możesz w tym celu użyć trybu wstawiania-normalnego <C-o>(wykonaj jedno polecenie w trybie normalnym, a następnie wróć do trybu wstawiania).

Zasadniczo pomocne jest dzielenie edycji na małe części, często wracając do trybu normalnego, aby mieć drobnoziarniste możliwości cofania.

cbaumhardt
źródło