gpt4 book ai didi

vim - 如何从:command to function?传递参数

转载 作者:行者123 更新时间:2023-12-04 12:59:13 25 4
gpt4 key购买 nike

我想编写一个命令,该命令将具有以下格式:

[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,当我们使用这些命令时,我们可以同时给出rangecount。另外我发现如果{count}[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是计数吗?或arg?
  • g是arg还是标志?
  • 或'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
    -------------------------------------

    谢谢。

    最佳答案

    对于复杂的自定义命令,您不能仅依赖Vim有限的解析选项;您可以使用-range来处理范围,但必须自己解析参数组合。

    :command! -nargs=* -range -bang MyCMD <line1>,<line2>call MyFUNC(<bang>0, <q-args>)

    MyFUNC(可能应该用 :function MyFUNC( ... ) range定义,只能被调用一次)内部, split()空格上的参数。另外,您可以定义函数以使用可变数量的参数并使用 <f-args>,但是请注意,函数参数的数量是有限的(最多20个IIRC)。
    <bang>0是一个很好的技巧,可以将爆炸转变为 bool 值,这通常是您所需要的。

    关于vim - 如何从:command to function?传递参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15844810/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com