清除所有当前定义的vim宏

13

我有一个vim宏,但我经常打错,特别是当我尝试快速保存内容时。我无法确定自己按下了哪些按键,结果就会把一些不相关的bash代码粘贴到我的文件中,这很烦人。我不得不撤销错误的粘贴操作,这也会撤销我想要保留的最后一件事情。

我想知道如何列出当前定义的宏(这样我就可以重新定义有问题的宏),或者完全清除它们的方法。我只在非常短的时间内使用宏,所以失去它们也无妨。

谢谢

2个回答

25

Vim中的宏通常以@和一个字母开头。它会执行该字母作为名称的寄存器内容。

列出寄存器内容

:reg

您可以通过以下方式清除寄存器 a 的内容:

:let @a = ''


有时,映射或缩写会被误认为是宏,因此这里提供有关它们的一些信息。

列出映射

所有映射

:map

以 \ 开头的所有映射

:map \

正常模式

:nmap

插入模式

:imap

可视化模式

:vmap

命令模式

:cmap

列出缩写

所有缩写

:abbr

以 email 开头的所有缩写

:abbr email

插入模式

:iabbr

命令模式

:cabbr

您可以在上述命令之前使用:verbose来获取有关映射/缩写最后设置位置的更多信息,例如::verbose nmap。这些命令还显示由插件和其他配置文件设置的所有映射。

删除映射/缩写

(这里只列出了几种模式,您应该能够像上面的列表命令一样仅删除某个模式下的映射/缩写。)

插入模式,删除定义为 \ 的映射:

:iunmap \\

正常模式:

:nunmap \\

删除定义为 email 的缩写:

:unabbr email

取消单词缩写,使“email”不再自动替换为之前定义的缩写。

插入模式:

:iunabbr email

清除映射/缩写

我不建议清除所有映射/缩写,因为这样会导致你失去所有插件已映射/缩写的内容。但是,你可以通过在上述列表命令后添加字母c来清除映射,例如,在插入模式下清除映射: :imapc。 缩写可以使用:abclear清除,或者仅清除插入模式:iabclear和仅清除命令模式:cabclear


谢谢,最后发现是宏 (@w),在保存时很容易输入!我已经清除了,谢谢。 - Simon Walker
只是出于好奇,如果您可能会误输入@w,那么您如何保存呢?对于我假设您意思不同的问题,我很抱歉。即使是vim帮助指南,如果您搜索:h macro,也会引导您到键映射部分。我编辑了回复,以便将宏部分放在答案开头。 - Heikki Naski
我用 :w 在 vim 中保存文件,你是怎么保存文件的?正如你发现的那样,vim 帮助指向了错误的位置,因此才有这个问题。 - Simon Walker
我觉得很奇怪,因为虽然我经常打错其他字符,但我极少意外地打出@。编码时,我通常会为<BS>w设置映射,以保存文件并在其上运行语法检查器。 - Heikki Naski
1
我使用的是英式键盘,因此@键紧挨着:键。 - Simon Walker

5

清除单个宏 - 录制一段空内容覆盖原有宏录制。

在正常模式下,您只需键入“qwq”即可。

  • q 开始录制宏
  • w 设置缓冲区为w
  • 再次按q保存(此时为空)的宏

用 :reg[ister] w 命令验证。

这种方法比 :let @w = '' 稍微快一点,但对我来说更容易记住。


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