这是一个简单的用户定义函数:
fun! Foo() range
echo a:firstline a:lastline
endfun
:5call Foo()
并:5,5call Foo()
给我同样的结果。- 但是,
:5j
并:5,5j
给我不同的结果。
我可以编写一个行为类似的函数join
吗?
如何join
区分线路地址和线路范围?
这是一个简单的用户定义函数:
fun! Foo() range
echo a:firstline a:lastline
endfun
:5call Foo()
并:5,5call Foo()
给我同样的结果。:5j
并:5,5j
给我不同的结果。我可以编写一个行为类似的函数join
吗?
如何join
区分线路地址和线路范围?
通过定义 custom :command
,-range
and-count
属性可以让您更好地控制范围的使用方式。但是,我认为即使这样也不允许您完全复制:join
. 自定义 Vim 命令的界面不如内置命令的丰富。
作为一种解决方法,您可以使用histget('cmd', -1)
获取调用命令的命令行,并解析确切的命令调用,包括原始范围(然后可以通过将其传递给另一个命令来重新使用它,但使用它进行行算术是有问题的,因为它是原始范围,而不是实际的行号)。该解决方法仅适用于交互式命令,很脆弱,并且需要一些努力。也许您可以通过定义两个不同的命令来完全避免这个问题。