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

时间:2012-10-16 04:14:19

标签: vim

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

fun! Foo() range
    echo a:firstline a:lastline
endfun
  • :5call Foo():5,5call Foo()给了我相同的结果。
  • 但是,:5j:5,5j会给我不同的结果。

我可以编写一个类似join的函数吗? join如何区分行地址和行范围?

1 个答案:

答案 0 :(得分:4)

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

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