Macros 有没有类似于在Vim中显示映射的方法来显示宏列表?
我知道有一种方法可以通过Macros 有没有类似于在Vim中显示映射的方法来显示宏列表?,macros,vim,vi,Macros,Vim,Vi,我知道有一种方法可以通过:map(或:imap,:cmap,等等)列出映射,但我找不到一种方法来列出我存储在vimrc文件中的宏(如let@a='blahblah') 有没有一种方法可以做到这一点而不必手动查看内部(通过:split[myvimrcfile]或其他方式) 此外,如果可能的话,是否有一种方法可以附加一些文档,这些文档将与宏一起显示,以解释它的用途?我有一把我经常用的,但大约相隔6周。如果能快速列出它们,并附上一条注释,告诉我宏的作用(甚至只是一个名称,这样我就可以确保使用正确的名称
:map
(或:imap
,:cmap
,等等)列出映射,但我找不到一种方法来列出我存储在vimrc文件中的宏(如let@a='blahblah'
)
有没有一种方法可以做到这一点而不必手动查看内部(通过:split[myvimrcfile]
或其他方式)
此外,如果可能的话,是否有一种方法可以附加一些文档,这些文档将与宏一起显示,以解释它的用途?我有一把我经常用的,但大约相隔6周。如果能快速列出它们,并附上一条注释,告诉我宏的作用(甚至只是一个名称,这样我就可以确保使用正确的名称)
感谢vim中的宏,宏只存储在中。您可以调用任何寄存器的内容,并将其作为宏执行(这就是
@
的作用)。要查看寄存器中的内容列表,请使用。您可以使用
:reg
指挥部。或者像这样的参数字符串
:reg ahx
将显示寄存器a、h和x的内容
这样,您至少可以看到将要运行的命令序列,并且希望这些命令序列足够清晰,可以让您区分不同的命令
寄存器只包含文本。您可以将命令序列粘贴为文本,也可以将文本复制到寄存器中,然后将其作为命令运行,具体取决于访问寄存器的方式
我还没有找到任何直接的方法来编辑寄存器的内容,但是您可以将它粘贴到文件中,编辑它,然后将它保存回同一个寄存器
IHTH.写入时,宏存储为寄存器,重要的是将代码分配给寄存器(通常在vimrc文件中使用let@a=blahblah
要简化显示vimrc文件中定义的宏的方式(在我的例子中,它位于~/.vimrc路径中),可以使用以下vim函数:
function!showmocros()
10新的
exe'r!'.'grep-b1-E^\s*let@~/.vimrc'
调用游标(1,1)
endfunction
它的作用是:
10新-打开一个新的vim窗口,窗口大小为10行
exe…-执行命令并放入窗口
呼叫…-转到第一行第一列
您可以通过在正常模式下倾斜来执行此功能
:调用ShowMacros
您还可以创建一个键映射或命令,以加快调用函数的方式:
:cnoremap sm调用ShowMacros()
命令!sm调用ShowMacros()
我写函数的原始帖子与上面的类似。OP问,“有没有办法附加一些文档,与宏一起显示,以解释它的用途?”
我发现VI/VIM宏非常迟钝,即使在我编写它们一周后也无法理解,因此我衷心支持文档化的想法
首先是在.vimrc
中记录宏的过程。我开发了以下.vimrc
注释格式,帮助我在一周或一年或更长时间后了解宏应该做什么。例如:
"
"= 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>
"-------"-"-"-"--"------
多亏了Jakub的提示,我现在可以从我的.vimrc
中生成帮助,几乎完全符合OP的要求。我从1983年开始使用vi
,所以我非常兴奋
谢谢Jakub
IHTH
八月不幸的是,除非我先回忆起它,否则它不会在寄存器中列出宏。我想在运行它之前知道我映射到该寄存器的宏是什么(这样我就知道要运行哪个)。真的吗?对于我在
.vimrc
中的东西(如let@a=blah
),我可以在第一次启动时看到它们(gVim 7.2)。你有设置宏必须执行的函数或脚本吗?我也在使用gVim7.2。我只是直接在我的vimrc文件中键入了我的宏…尽管它在c:\program files\vim\vimfiles\vimrc_Jay.vim中,它是通过源$vim/vimfiles/vimrc_Jay.vim加载到我的_vimrc文件中的。你认为这是问题吗?我只是尝试移动它们进入我的vimrc文件而不是我的另一个vimrc_Jay文件,但这似乎没有什么区别。它们现在似乎正在工作(在将所有内容切换回我的原始设置后).我不知道发生了什么变化,我也没有运行所有这些,所以我知道这不是因为我首先回忆了那个寄存器。哦,好吧。你的答案确实有效。谢谢。这可能对编写映射有用。:s/tipping/typing/|:s/faster/speed up/(或“hasten”,但那是过时的)
exe 'r!' . 'grep -B 1 -E "^\"= " ~/.vimrc'