Někdy používám systém bez Vim a používám výchozí nvi
(systémy BSD) nebo original vi
(Arch Linux).
Existuje několik rozdílů, ale největší nepříjemností je, že mohu vrátit pouze můj poslední operace. Stisknutím u podruhé jsou práce „redo“.
Existuje nějaký způsob, jak to fungovat?
Odpověď
Z nvi(1)
:
u Undo the last change made to the file. If repeated, the u command alternates between these two states. The . command, when used immediately after u, causes the change log to be rolled forward or backward, depending on the action of the u command.
Takže stiskněte u a poté pokračujte stisknutím . ; pokud stisknete u znovu, „obrátí“ směr a stisknutí . bude opakováním.
Nikdy jsem o tom nevěděl až do včerejška; a myslel jsem si, že je to nějak nová funkce, ale vypadá to, že to fungovalo minimálně od nvi 1.79 z roku 1996 .
Toto nefunguje pracovat v původní vi ; kde je undo dokumentováno jako:
u Undoes the last change made to the current buffer. If repeated, will alternate between these two states, thus is its own inverse. When used after an insert which inserted text on more than one line, the lines are saved in the numeric named buffers (3.5).
Což je opravdu komplikovaný způsob, jak říci, že opětovným stisknutím u provedete změny znovu.
Což také říká Vim „s :help undo
(a proč jsem předpokládal, že také nebude fungovat v nvi
):
u Undo [count] changes. {Vi: only one level}
Odpověď
Nejbližší věc původní vi
musí se vrátit více (kromě U
, které mohou vrátit více změn v jednom řádku) jsou očíslované registry, které obsahují devět posledních změn nebo smazání.
Pokud vložíte z očíslovaného registru, následné tečkové příkazy tento registr zvýší, když příkaz zopakuje.
Např. s následujícím textem, přičemž kurzorový řádek je označen >
,
aaaa > bbbb cccc dddd eeee
příkaz bude:
aaaa > eeee
Pokud zadáte "1P
, vi umístí nejnovější výmaz z registru "1
:
aaaa > dddd eeee
Hitting .
vloží obsah nejnovějšího registru provedením "2P
a opětovným stisknutím .
vloží obsah registru "3
.
Stručně řečeno, "P..
vloží veškerý text, který jste smazali, a ponechá vám
aaaa > bbbb cccc dddd eeee
Není to skvělé, ale lepší než nic! Užitečnější je použít jej na začátku nebo na konci vyrovnávací paměti k rychlé kontrole toho, co je ve vašich očíslovaných registrech. Poté můžete snadno odstranit, co nepotřebujete.
Je to zdokumentováno ve vimu pod :help redo-register
.
Odpověď
Pomocí původní verze vi stiskněte [n] u vrátit se o n kroků zpět. Postupně se vrátit krok za krokem …
- stisknout [n] u vrátit se o n kroků
- poté stisknout [n] u opakovat n kroků
- poté stisknutím [n + 1] u vrátit [n + 1] kroky
- atd
u
nebo obnovit jeden řádek, jak bylo předtím, než jste jej začali upravovat pomocíU
.