我想写一个命令,这个命令的格式是这样的:
[range]MyCMD[!] [count] [oneArg] [flags]
或者
[range]MyCMD[!] [oneArg] [count] [flags]
类似于
:[range]P[rint] [count] [flags]
或者
:[range]d[elete] [x] {count}
该命令MyCMD
最终将调用一个函数来完成一些工作。我写了这一行(行不通)
command! -nargs=+ -range -bang -count=0 MyCMD <line1>,<line2>call MyFUNC(<q-args>, "<bang>","<count>", .... ..)
这里的问题是,如何处理这些论点:
问题1我读到了帮助,
-range
不能-count
同时使用,但我需要它们。我还看了一些 vim 命令,比如 :delete、:print,当我们使用这些命令时,我们可以同时给出range
和count
。我还发现如果 a{count}
or[count]
可用,vim doc 有两个相同命令的条目。像::[range]d[elete] [x] :[range]d[elete] [x] {count}
或者
:[range]p[rint] [flags] :[range]p[rint] {count} [flags]
这是为什么?为什么不只是用
[count]
?(这将是另一个小问题)我的设计中的问题 2,所有这些参数都是可选的,它们具有默认值(见下表)。如何将这些参数传递给函数(我已检查
<q-args> and <f-args>
)以及如何区分哪些用户输入用于哪个参数?例如用户给出:MyCMD 5 g
- 5是数?还是参数?
- g是arg还是flag?
- 或'5 g'是arg?
这是 args 的默认值:
argName | Default value | description ------------------------------------- range | current line | this could be get by function xxx ( ) range count | 0 | this could be get by <count> bang | "" | this is easy too, with <bang> arg | " " | this argument could have space flags | "" | no space allowed for flags -------------------------------------
谢谢。