Parfois, je « m sur un système sans Vim, et utilise la valeur par défaut nvi
(systèmes BSD) ou le original vi
(Arch Linux).
Il y a pas mal de différences, mais le plus gros désagrément est que je ne peux annuler que mon dernière opération. Appuyez sur u la deuxième fois que les travaux sont une « refaire ».
Y a-t-il un moyen de faire fonctionner cela?
Réponse
De 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.
Alors appuyez sur u , puis continuez dappuyer sur . pour plus dannulation; Si vous appuyez sur u encore une fois, il « inversera » la direction et en appuyant sur . sera une refonte.
Je nen ai jamais su jusquà hier; et jai pensé que cétait en quelque sorte une nouvelle fonctionnalité, mais il semble que cela fonctionne comme ça depuis au moins nvi 1.79 à partir de 1996 .
Ceci ne « t travailler dans le original vi ; où lannulation est documentée comme suit:
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).
Ce qui est vraiment une manière compliquée de dire quen appuyant à nouveau sur u , vos modifications seront rétablies.
Cest aussi ce que dit Vim « s :help undo
(et pourquoi jai supposé que cela ne fonctionnerait pas non plus dans nvi
):
u Undo [count] changes. {Vi: only one level}
Answer
La chose la plus proche de loriginal vi
doit annuler plusieurs annulations (à part U
qui peut annuler plusieurs changements sur une seule ligne) se trouvent les registres numérotés, qui contiennent les neuf changements les plus récents ou des suppressions.
Si vous mettez à partir dun registre numéroté, les commandes de point suivantes incrémenteront ce registre quand il répète la commande.
Par exemple avec le texte suivant, avec la ligne du curseur indiquée par >
,
aaaa > bbbb cccc dddd eeee
la commande dd..
donnera:
aaaa > eeee
Si vous tapez ensuite "1P
, vi mettra la suppression la plus récente du registre "1
:
aaaa > dddd eeee
Frapper .
mettra le contenu du registre suivant le plus récent, en faisant "2P
, et en appuyant à nouveau sur .
mettra le contenu du registre "3
.
Donc, en bref, "P..
remettra tout le texte que vous avez supprimé, vous laissant avec
aaaa > bbbb cccc dddd eeee
Pas génial, mais mieux que rien! Plus utilement, vous pouvez lutiliser au début ou à la fin du tampon pour inspecter rapidement ce qui se trouve dans vos registres numérotés. Ensuite, vous pouvez facilement supprimer ce dont vous navez pas besoin.
Cest documenté dans vim sous :help redo-register
.
Réponse
En utilisant le vi dorigine, appuyez sur [n] u pour revenir en arrière de n étapes. Pour revenir progressivement en arrière étape par étape …
- appuyez sur [n] u pour revenir en arrière de n étapes
- puis appuyez sur [n] u pour refaire les étapes
- puis appuyez sur [n + 1] u pour revenir en arrière [n + 1] étapes
- etc
u
, ou restaurer une seule ligne comme il était avant que vous ne commenciez à le modifier avecU
.