Às vezes, estou em um sistema sem Vim e uso o nvi
padrão (sistemas BSD) ou o original vi
(Arch Linux).
Existem algumas diferenças, mas o maior aborrecimento é que posso desfazer apenas meu última operação. Pressionar u na segunda vez funciona é um “refazer”.
Existe alguma maneira de fazer isso funcionar?
Resposta
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.
Então pressione u e continue pressionando . para desfazer mais; Se você pressionar u novamente, ele irá “inverter” a direção e pressionar . será um refazer.
Eu nunca soube disso até ontem; e pensei que era de alguma forma um novo recurso, mas parece que funcionou assim desde pelo menos nvi 1.79 de 1996 .
Isso não trabalhar na original vi ; onde desfazer é documentado como:
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).
O que é realmente uma maneira complicada de dizer que pressionar u novamente irá refazer suas alterações.
Que é também o que diz o Vim “s :help undo
(e por que presumi que também não funcionaria em nvi
):
u Undo [count] changes. {Vi: only one level}
Resposta
O mais próximo do original vi
tem que desfazer múltiplos (além de U
que pode reverter várias alterações em uma única linha) são os registros numerados, que contêm as nove alterações mais recentes ou exclusões.
Se você colocar a partir de um registro numerado, os comandos de ponto subsequentes irão incrementar aquele registro quando ele repetir o comando.
Ex. com o seguinte texto, com a linha do cursor indicada com >
,
aaaa > bbbb cccc dddd eeee
o comando dd..
resultará em:
aaaa > eeee
Se você digitar "1P
, o vi colocará a exclusão mais recente do registro "1
:
aaaa > dddd eeee
Batendo .
colocará o conteúdo do próximo registro mais recente, fazendo "2P
e pressionando .
novamente, colocará o conteúdo do registro "3
.
Então, em resumo, "P..
colocará de volta todo o texto que você excluiu, deixando-o com
aaaa > bbbb cccc dddd eeee
Não é brilhante, mas é melhor do que nada! Mais útil, você pode usá-lo no início ou no final do buffer para inspecionar rapidamente o que está em seus registros numerados. Então você pode excluir facilmente o que você não precisa.
Está documentado no vim em :help redo-register
.
Resposta
Usando o vi original, pressione [n] u para voltar n passos. Para voltar progressivamente passo a passo …
- pressione [n] u para voltar n passos
- e depois pressione [n] u para refazer as etapas
- em seguida, pressione [n + 1] u para voltar [n + 1] etapas
- etc
u
, ou restaurar uma única linha para como estava foi antes de você começar a editá-lo comU
.