VIM:如何检查当前脚本是否在宏中运行?

VIM:如何检查当前脚本是否在宏中运行?

在许多情况下,我有一些 vim 脚本,我只希望在它不在宏中运行时执行它。例如,在某些情况下,我会闪烁光标来提醒自己它现在在哪里(这在宏中运行时毫无意义,只会导致宏花费 10 倍的时间)。

因此,对于这些情况,我想检查它是否作为宏运行,并避免在这种情况下执行不必要的操作。我搜索了帮助,但找不到检测这一点的标志。这可能吗?

答案1

没有类似的函数mode()或特殊v:macro_running变量,许多人认为这些只会鼓励不良做法。

你可以使用 的行为feedkeys(),其传递的键通常在命令 / 映射之后立即执行,但仅在宏执行的最后执行。如果你将长时间运行的命令放入其中,它们会像往常一样直接减慢正常命令的速度,但只会在宏执行后(累积地)减慢速度(通常你可以用 中止它<C-C>)。

例子

let @q = ',a,b'

代替:

nnoremap ,a aHello<Esc>2gs
nnoremap ,b aWorld<Esc>2gs

使用

nnoremap ,a aHello<Esc>:call feedkeys('2gs', 'n')<CR>
nnoremap ,b aWorld<Esc>:call feedkeys('2gs', 'n')<CR>

这会立即将整个HelloWorld文本插入宏中。

相关内容