Pot anula de mai multe ori în nvi și / sau vi-ul original?

Uneori mă aflu pe un sistem fără Vim și folosesc nvi implicit (sistemele BSD) sau vi original (Arch Linux).

Există destul de multe diferențe, dar cea mai mare enervare este că pot anula numai ultima operație. Apăsând u a doua oară când funcționează este o „refacere”.

Există vreo modalitate de a face acest lucru să funcționeze?

Răspuns

From 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. 

Așadar, apăsați u , apoi continuați să apăsați . pentru a anula mai mult; Dacă apăsați u din nou, va „inversa” direcția și apăsând . va fi o refacere.

Nu am știut niciodată despre asta până ieri; și am crezut că este cumva o caracteristică nouă, dar se pare că a funcționat așa din cel puțin nvi 1.79 din 1996 .

Acest nu „t lucrați în original vi ; unde anularea este documentată ca:

 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). 

Ceea ce este într-adevăr un mod complicat de a spune că apăsând din nou u vă va reface modificările.

Care este, de asemenea, ceea ce spune Vim „s :help undo (și de ce am presupus că nu ar funcționa și în nvi):

 u Undo [count] changes. {Vi: only one level} 

Răspuns

Cel mai apropiat lucru

trebuie să anuleze mai multe (în afară de U care poate reveni la mai multe modificări într-o singură linie) sunt registrele numerotate, care dețin cele mai noi nouă modificări sau ștergeri.

Dacă puneți dintr-un registru numerotat, comenzile de puncte ulterioare vor crește acel registru atunci când repetă comanda.

De ex. cu textul următor, cu linia cursorului indicată cu >,

 aaaa > bbbb cccc dddd eeee 

comanda dd.. va avea ca rezultat:

 aaaa > eeee 

Dacă tastați apoi "1P, vi va pune cea mai recentă ștergere din registru "1:

 aaaa > dddd eeee 

Apăsare . va pune conținutul următorului cel mai recent registru, făcând "2P și apăsând din nou pe . va pune conținutul registrului "3.

Deci, pe scurt, "P.. va readuce tot textul pe care l-ați șters, lăsându-vă cu

 aaaa > bbbb cccc dddd eeee 

Nu strălucitor, dar mai bun decât nimic! Mai util îl puteți folosi la începutul sau la sfârșitul bufferului pentru a inspecta rapid ce este în registrele numerotate. Apoi puteți șterge cu ușurință ceea ce nu aveți nevoie.

Este documentat în vim sub :help redo-register.

Răspuns

Folosind vi-ul original, apăsați [n] u pentru a reveni n pași. Pentru a reveni progresiv pas cu pas …

  • apăsați [n] u pentru a reveni n pași
  • apoi apăsați [n] u pentru a reface n pași
  • apoi apăsați pe [n + 1] u pentru a reveni la [n + 1] pași
  • etc

Comentarii

  • Am ceva apropiat de originalul vi și nu ' t pare să se întoarcă n pași.
  • De acord. Vi original poate reveni doar o singură modificare cu u sau poate restabili o singură linie la modul în care a fost înainte de a începe să îl editați cu U.

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *