如何在Vim/Vi文本编辑器中撤消操作
如何撤消vim文本编辑器中的最新更改?
Vim/vi文本编辑器会记住所有最近的更改,例如添加或者删除文本或者代码块。
您可以使用撤消模式快速还原vim中的所有更改。
该页面显示了如何撤消最近的更改以及如何在Linux或者类似Unix的系统上运行的Vim/vi文本编辑器中进行编辑。
如何在Vim中撤消
以下命令用于撤消文本以及在vim中进行编辑或者删除。
语法为:
u
或者
:u
或者
:undo :undo N :undo 3
要撤消一行上的所有最新更改,请运行:
U
撤消vim/Vi中的更改
- 按Esc键返回正常模式" ESC"
- 执行" u"撤消上一次更改。
- 要撤消最后两个更改,请执行2u。
- 按Ctrl-r重做撤消的更改。换句话说,撤消撤消。通常,称为重做。
例子
启动一个新文件:
vim demo.txt
通过按" i"追加以下文本
Linux macOS Unix theitroad
通过按五次" x"来删除第二个单词:
Linux Unix theitroad
现在,通过按五次" u"来撤销该操作:
Linux macOS Unix theitroad
列出变更树
以下命令在Vi中不起作用,仅在Vim中起作用。
也可以在撤销分支。
当您撤消一些更改然后进行新更改时,会发生这种情况。
撤消的更改将成为分支。
执行以下命令以列出更改树中的叶子:
:undolist
其中:
- "编号"列是变更编号。这个数字不断增加,可用于识别特定的可撤消更改
- " changes"列是从树的根开始对该叶子进行更改的次数。
- "时间"列是进行此更改的日期和时间。例如,8秒前或者时,分,秒。
- "保存"列指定此更改是否写入磁盘以及写入哪个文件。可以和
:later
和:earlier
vim命令一起使用。
:earlier,:later,g-和g +命令
语法如下。
:earlier {count} Go to older text state {count} times. :earlier {N}s Go to older text state about {N} seconds before. :earlier {N}m Go to older text state about {N} minutes before. :earlier {N}h Go to older text state about {N} hours before. :earlier {N}d Go to older text state about {N} days before. :later {count} Go to newer text state {count} times. :later {N}s Go to newer text state about {N} seconds later. :later {N}m Go to newer text state about {N} minutes later. :later {N}h Go to newer text state about {N} hours later. :later {N}d Go to newer text state about {N} days later. g- Go to older text state. With a count repeat that many times. g+ Go to newer text state. With a count repeat that many times.
例如,使用此命令返回十分钟:
:earlier 10m
有时您进行了几次更改,然后发现您想回到上一次写入文件的时间。
您可以使用以下命令执行此操作:
:earlier 1f
f在这里代表文件。
您可以重复此命令以回溯过去。
或者使用不同于1的计数来更快地返回。
如果您退后太远,请再次执行以下操作:
:later 1f
在Vim中使用撤消分支的示例
启动一个新文件:
vim demo.txt
按i
进入插入模式并输入Linux:
Linux
按esc
。
现在再次进入插入模式并输入Unix:
Linux Unix
最后,再次按esc
并通过输入i
并输入macOS返回插入模式。
我的缓冲区现在将包含
Linux Unix macOS
:echo changenr()命令
要列出最新更改的数量,请执行:
:echo changenr()
输出示例:
3
由于您进行了三处更改,因此将输出三处。
还记得我们按了三下i键进入插入模式吗?
接下来,我将按u
撤消一个更改,再次启动插入模式并更改缓冲区,使其看起来像这样:
Linux Unix FreeBSD
现在,您从缓冲区的先前版本分支,并创建了一个新的撤消分支:
:echo changenr()
输出示例:
4
如果在正常模式下按u,您将返回到
Linux Unix
使用u进一步撤消会将缓冲区更改为
Linux
如果您最后一次按u,您将再次有一个空缓冲区,因为这是您开始的状态。
您现在在变更1和之前回来了
:echo changenr()
输出示例:
0
如果您使用Ctrl-R重做更改,则将移至
Linux
然后(按Ctrl-R键)
Linux Unix
最后(按Ctrl-R键)
Linux Unix FreeBSD
注意,您从未遇到过其中缓冲区包含Linux Unix macOS的更改词macOS。
但是,您可以使用g-
和:earlier
命令返回到该更改。
因此,如果您现在按g-
或者:earlier
,则缓冲区如下所示:
Linux Unix macOS
当然,如果您知道要跳转到哪个更改,也可以使用:undo跳转到指定的更改。
:undo 1
会将缓冲区放回:
Linux