¿Puedo deshacer varias veces en nvi y / o el vi original?


13

A veces estoy en un sistema sin Vim, y uso el predeterminado nvi(sistemas BSD) o el original vi(Arch Linux).

Hay bastantes diferencias, pero la mayor molestia es que solo puedo deshacer mi última operación. Presionar ulas obras por segunda vez es un "rehacer".

¿Hay alguna manera de hacer que esto funcione?

Respuestas:


16

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.

Entonces presione u, y luego siga presionando .para deshacer más; Si presiona unuevamente, se 'invertirá' la dirección y presionar .será rehacer.

Nunca supe de esto hasta ayer; y pensé que era de alguna manera una nueva característica, pero parece que ha funcionado así desde al menos nvi 1.79 de 1996 .

Esto no funciona en el vi original ; donde el deshacer se documenta 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).

Lo cual es realmente una forma complicada de decir que presionar unuevamente rehacerá sus cambios.

Lo que también es lo que :help undodice Vim (y por qué supuse que tampoco funcionaría nvi):

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

1

Lo más cercano que tiene el original via deshacer múltiples (además de Uque puede revertir múltiples cambios dentro de una sola línea) son los registros numerados, que contienen los nueve cambios o eliminaciones más recientes.

Si coloca desde un registro numerado, los comandos de punto posteriores incrementarán ese registro cuando repita el comando.

Por ejemplo, con el siguiente texto, con la línea del cursor indicada con >,

  aaaa
> bbbb
  cccc
  dddd
  eeee

el comando dd..resultará en:

  aaaa
> eeee

Si luego escribe "1P, vi pondrá la eliminación más reciente del registro "1:

  aaaa
> dddd
  eeee

Al presionar .se colocará el contenido del siguiente registro más reciente, al hacerlo "2P, y al presionar .nuevamente se colocará el contenido del registro "3.

En resumen, "P..volverá a colocar todo el texto que eliminó, dejándolo con

  aaaa
> bbbb
  cccc
  dddd
  eeee

¡No brillante, pero mejor que nada! De manera más útil, puede usarlo al principio o al final del búfer para inspeccionar rápidamente lo que hay en sus registros numerados. Luego puede eliminar fácilmente lo que no necesita.

Está documentado en vim debajo :help redo-register.


-1

Usando el vi original, presione [n] u para retroceder n pasos. Para volver progresivamente paso a paso ...

  • pulsa [n] u para retroceder n pasos
  • luego presiona [n] u para rehacer n pasos
  • luego presione [n + 1] u para retroceder [n + 1] pasos
  • etc.

1
Tengo algo parecido al vi original , y no parece retroceder n pasos.
muru

Convenido. Vi original solo puede revertir un solo cambio uo restaurar una sola línea a como estaba antes de comenzar a editarlo U.
Antony
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.