Vim“显示我的最后一条命令”命令?

69

有没有一条命令可以显示普通模式下最后执行的命令是什么?

假设我不小心按了某个键,并得到了一些意外的结果。 我可以撤消它,但是我能否揭示按下了哪个键以及它如何被解释?


1
我能想到的最好的东西是这个::echo v:count . v:operator - sehe
5个回答

98

按下冒号 (:) 并使用向上箭头开始浏览之前的命令。您也可以使用上/下箭头在列表中移动。


5
由于某些原因,这个方法对我无效。后来发现历史记录设为了0。解决方法是运行 :set history=100,然后我就能使用向上箭头查看以前的命令了。 - Jim
1
多年来,我一直在努力想弄清如何退出这种模式。按Esc键没有用。似乎有时候冒号可以起作用,但并不总是有效的。我总是被困在这种模式中。 - devios1
5
while (:)和上下箭头显示命令历史记录,(/)上下箭头则显示搜索模式历史记录。我发现这非常有用。 - Jack Chan
@devios1:你现在解决了吗?它必须能够工作,你的问题细节是什么? - VimNing

79

q: 会显示Vim中的命令历史记录。
q/ 会显示搜索历史记录。
而最重要的是,:q 可以退出模式。


31
这就是为什么这个功能会不时地突然出现。这与 :q 的相反。否则我不会知道它的存在而去寻找它。 - felwithe
5
我总是陷入这种模式,该如何退出呢?按Esc键不起作用,这让我很困扰。 - devios1
@devios1:Vim 是由神鬼编写的。 - VimNing
1
@devios1 :q 可以让你退出那个模式。我知道,这非常不直观,我们很可能永远不会尝试,因为我们习惯于使用 :q 退出编辑器本身,而且并不明显这个模式实际上是 vim 中的一个单独窗口/分屏,它将拦截下一个 :q - mtraceur

15

最近的命令文本被存储在.寄存器中。你可以通过:display查看所有寄存器。不幸的是,它没有显示正常命令的启动方式。

要查看来自:(命令模式)的命令,您可以使用:histq:,默认只显示最后20个命令。

另一个功能是保存撤销缓冲区:wundo undo.bin--但是撤销缓冲区是二进制的。

但这些都没有真正回答你的问题。我很好奇是否可以做到。


1
该寄存器存储最后插入的文本(在 I,A,i,a,s,S,c,C 之后)。 - Benoit

14

输入冒号:然后再按ctrl+p可以显示你之前的命令,即通过vim命令历史向后移动。使用ctrl+n则可以向前移动。

如果你习惯于使用命令行且不想改变键盘手位以使用箭头键,则此功能非常方便。


8

这很难理解。你可以尝试调整变量来实验:

v:operator
v:count (and v:prevcount)
v:register

但是,您无法完全获取发出的最后一个正常模式命令。

然而,如果您想在Vim中系统记录您输入的所有内容,可以启动vim -W ~/.vim-last-scriptout(Windows版本:vim -W "%HOMEPATH%\Vim\.last-scriptout)。您可以在UNIX机器上为其设置别名。每个按键或控制键都将记录在该文件中。请注意,如果您使用gvimvim -g(GUI),您可能会遇到此错误

如果您想重新运行此文件,可以使用:source!(带有感叹号)或从命令行使用-s选项。

在Windows上,我已将gvimportable.exe -W gvim_directory\last_scriptout设置为我的Commander程序(FreeCommander)中的默认编辑器。这样,我就可以始终记住自己输入的内容并重复执行一系列命令。当然,我还有另一个快捷方式来打开Vim并播放脚本。

请注意,该文件可能仅在Vim退出时编写,因此您必须丢失会话才能知道自己做了什么。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接