有没有办法显示类似于在Vim中显示映射的宏列表?

时间:2009-11-19 19:51:35

标签: macros vim vi

我知道有一种方法可以通过:map(或:imap:cmap等)列出映射,但我找不到列出已存储的宏的方法在我的vimrc文件中(如let @a = 'blahblah')。

有没有办法在不必手动查看内部(通过:split [myvimrcfile]或其他任何方式)的情况下执行此操作?

另外,如果有可能,是否有办法附加某些文档,这些文档将与宏一起显示以解释它的用途?我有一把,我用了很多,但相隔约6周。很快就能快速列出它们以及一条评论,告诉我宏的作用(甚至只是一个名称,所以我确保使用正确的名称)。

由于

4 个答案:

答案 0 :(得分:64)

在vim中,宏只存储在registers中。您可以调用任何寄存器的内容并将其作为宏执行(这是@所做的)。要查看注册表中的内容列表,请使用:reg

答案 1 :(得分:4)

您可以使用

查看所有寄存器的内容
:reg

命令。或者像这样的参数字符串

:reg ahx

将显示寄存器a,h和x的内容。

通过这种方式,你至少可以看到将运行哪些命令序列,并希望这些命令能够清晰地告诉彼此。

寄存器只包含文本。您可以将命令序列粘贴为文本,也可以将文本复制到寄存器中,然后将其作为命令运行,具体取决于您访问寄存器的方式。

我没有找到任何编辑寄存器内容的直接方法,但您可以将其粘贴到文件中,进行编辑,然后将其保存回同一个寄存器。

IHTH。

答案 2 :(得分:2)

正如/u/jheddings所写,宏存储为寄存器,重要的是将代码分配给寄存器(通常在带有let @a=blahblah的vimrc文件中完成 为了简化显示您在vimrc文件中定义的宏的方式(在我的情况下,它位于〜/ .vimrc路径中),您可以使用此vim函数:

function! ShowMacros() 10new exe 'r!' . 'grep -B 1 -E "^\s*let @" ~/.vimrc' call cursor(1,1) endfunction

它的作用:

10new - 打开一个十行大小的新vim窗口

exe ... - 执行命令并放入窗口

致电... - 转到第一行第一栏

您可以通过正常模式进行操作来执行此功能 :call ShowMacros

您还可以创建一个键映射或一个命令来固定调用该函数的方法:

:cnoremap sm call ShowMacros()<CR> command! sm call ShowMacros()

This是我编写类似上述功能的原始帖子。

答案 3 :(得分:1)

OP询问:“是否可以附加某种与宏一起显示的文档,以解释其用途?”

我发现即使在编写VI / VIM宏一周后,它们仍然非常难以理解,所以我衷心支持文档的想法。我对此有两个建议。

首先是在您的read_csv中记录宏的过程。我开发了以下.vimrc注释格式,可以帮助我在一周或一年或更长时间之后了解宏应该做什么。例如:

.vimrc

第二,我在想可以将Jakub的" "= GENERIC CLIPBOARD YANK <F2>y (Y for Yank) "= Yank the entire contents of the file into the clipboard; quit without saving. " "define F2 followed by y to be: "| Go to line 1. "| | From there, into the * buffer (system clipboard), "| | | yank to the end of the file. "| | | | Go to sleep for 1 second (to allow the clipboard to be updated). "| | | | | Quit without saving the file. "| | | | | | map #2y 1G"*yG1gs:q!<CR> "-------"-"-"-"--"------ 函数修改为ShowMacros(),该定义是针对每个宏的一组特定的帮助行以及与定义一起存在的文件,这与上面的命令行细目附加到该定义中,该定义将提供所需的用户帮助。

我在每行的开头用grep标记了两行,以便它们可以成为用户帮助。然后Jakub的"=命令将搜索grep。这是我使用的命令。我不确定是否需要用于扩展正则表达式的"^\"= ",并且-E是否适合在匹配序列之前添加一行,因此这里的注释行明显为空。 / p>

在我的-B 1中,对于初始定义的解析,我只需要一个反斜杠。这是一行,替换了上面的Jakub函数定义中的代码:

vimrc

多亏了雅库布(Jakub)的提示,我现在可以以{OP1所要求的完全准确的方式,从我的 exe 'r!' . 'grep -B 1 -E "^\"= " ~/.vimrc' 中获得帮助。自1983年以来,我一直在使用.vimrc,所以我很高兴。

感谢雅各布!

IHTH,

八月