Mohu vrátit zpět vícekrát v nvi a / nebo původní vi?

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

komentáře

  • Mám něco blízkého původnímu vi a ' Zdá se, že se vrací zpět o n kroků.
  • Souhlasím. Původní Vi může vrátit pouze jednu změnu pomocí u nebo obnovit jeden řádek, jak bylo předtím, než jste jej začali upravovat pomocí U.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *