2012-10-16 26 views
6

這是一個簡單的用戶定義函數:如何區分vim中的行地址和行範圍?

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

我可以編寫一個類似於join的函數嗎?
join如何區分行地址和行範圍?

回答

4

通過定義自定義:command-range-count屬性可讓您更好地控制範圍消耗的方式。不過,我認爲即使這樣也不會讓你完全重複:join的行爲。自定義Vim命令的界面並不像內置命令可用的那樣豐富。

作爲解決方法,您可以使用histget('cmd', -1)來獲取調用您的命令的命令行,並解析確切的命令調用,包括原始範圍(然後可以通過將其傳遞給另一個命令來重新使用它)用它進行線算術是有問題的,因爲它是原始的範圍,而不是實際的線數)。解決方法只適用於交互式命令,易碎,需要一些努力。也許你可以通過定義兩個不同的命令來完全避免這個問題。