Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/vim/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Macros 有没有类似于在Vim中显示映射的方法来显示宏列表?_Macros_Vim_Vi - Fatal编程技术网

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'