我可以在nvi和/或原始vi中多次撤消吗?


13

有时我在没有Vim的系统上,使用默认nvi(BSD系统)或原始vi(Arch Linux)。

有不少差异,但最大的烦恼是,我可以撤消 只有我的最后一次操作。u第二次按下作品是“重做”。

有什么办法可以使它正常工作吗?

Answers:


16

来自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.

因此,按u,然后继续按.以进行更多撤消;如果u再次按,它将“反转”方向,并且按.将重做。

直到昨天我才知道。并以某种方式认为这是一个新功能,但自1996年以来,至少从nvi 1.79起,它似乎一直在这样工作

并不在工作原VI ; 撤消记录为:

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

这实际上是一种复杂的说法,u再次按下将重做您的更改。

这也是Vim :help undo所说的(以及为什么我认为它也不会起作用nvi):

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

1

原始文件最需要vi进行多次撤消(除此之外,U它还可以在一行中还原多个更改)的是编号寄存器,其中包含最近的9个更改或删除。

如果从编号寄存器中放入,则后续的点命令将在重复该命令时递增该寄存器。

例如,以下文本,光标线用表示>

  aaaa
> bbbb
  cccc
  dddd
  eeee

该命令dd..将导致:

  aaaa
> eeee

如果您随后输入"1P,vi将从寄存器中删除最近删除的内容"1

  aaaa
> dddd
  eeee

进行操作时,命中.将放置下一个最近寄存器的内容,再次"2P命中.将放置register的内容"3

简而言之,"P..会将您删除的所有文字放回原处,

  aaaa
> bbbb
  cccc
  dddd
  eeee

没有辉煌,但总比没有好!更有用的是,您可以在缓冲区的开头或结尾使用它来快速检查编号寄存器中的内容。然后,您可以轻松删除不需要的内容。

在vim下有记录:help redo-register


-1

使用原始的vi,按[n] u返回n步。要逐步返回步骤...

  • 按[n] u返回n步
  • 然后按[n] u重做n步
  • 然后按[n + 1] u键返回[n + 1]个步骤
  • 等等

1
我有一些接近原始vi的东西,而且似乎没有退后n步。
muru

同意 原始Vi只能使用还原单个更改u,也可以将单个行还原为开始使用之前的状态U
安东尼
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.