如何区分vim中的行地址和行范围?

kev*_*kev 6 vim

这是一个简单的用户定义函数:

fun! Foo() range
    echo a:firstline a:lastline
endfun
Run Code Online (Sandbox Code Playgroud)
  • :5call Foo():5,5call Foo()给我相同的结果.
  • 然而,:5j:5,5j给我不同的结果.

我可以写一个表现得像的函数join吗?
如何join区分行地址和行范围?

Ing*_*kat 4

通过定义自定义、和属性:command,您可以更好地控制范围的使用方式。但是,我认为即使这样也不允许您完全复制 的行为。自定义 Vim 命令的界面不如内置命令丰富。-range-count:join

作为解决方法,您可以使用histget('cmd', -1)获取调用命令的命令行,并解析确切的命令调用,包括原始范围(然后可以通过将其传递给另一个命令来重新使用,但用它进行行算术)是有问题的,因为它是原始范围,而不是实际的行号)。该解决方法仅适用于交互式命令,很脆弱,并且需要一些努力。也许您可以通过定义两个不同的命令来完全避免该问题。