Vim布尔函数

alf*_*eza 5 vim boolean function

我正在尝试在Vim中实现布尔函数,并且遇到了一些麻烦,并且我确定我缺少某些东西。

只是要清楚一点,我正在寻求实现一个函数,当调用!它时,它会起到相反的作用。

Vim有很多布尔函数,例如listpaste。就我而言,如果我说一个函数,则打开一个缓冲区,例如:

:call MyFunction()
Run Code Online (Sandbox Code Playgroud)

然后我想在用a调用时关闭缓冲区!

:call MyFunction()!
Run Code Online (Sandbox Code Playgroud)

不知道这是否有可能,我不希望找到如何打开或关闭缓冲区,而是真正的布尔实现。

编辑:

如果我们谈论用户定义的命令,这似乎更可行:

:MyCommand action
Run Code Online (Sandbox Code Playgroud)

也可以称为:

:MyCommand action!
Run Code Online (Sandbox Code Playgroud)

sid*_*yll 6

创建命令时,为其提供-bang选项,然后使用<bang>,它将扩展为爆炸状或不显示任何内容。然后,要将其重定向到您的函数,请创建一个特殊的参数并对其进行分析,以查看其是否包含爆炸。这样的事情:(包括ZyX建议的内容)

function! Bang(bang)
    echo "With".((a:bang)?"":"out")." bang."
endfunction

command! -bang Bg call Bang(<bang>0)
Run Code Online (Sandbox Code Playgroud)

当然,我没有在这里进行正确的测试来检查是否a:bang真的很不错,但是您知道了。

:Bg
Without bang.  
Run Code Online (Sandbox Code Playgroud)

:Bg!
With bang.
Run Code Online (Sandbox Code Playgroud)