如何在循环函数中执行Vim命令

我试图编写一个函数来简化在Vim中切换窗口的命令。 我设法使其像:W <argument>一样工作:

function! s:winswitch(...)
          let i = 0
          while i < argc()
                  let command = ":wincmd ".a:1
                  execute command
                  let i = i + 1
          endwhile
  endfunction
  command! -nargs=+ W call s:winswitch(<f-args>)

这可以使:W l用作:wincmd l

我正在寻找一种基于任意数量的参数执行命令的方法,例如我可以使用:W j h来充当:wincmd j|wincmd h

sunliuser 回答:如何在循环函数中执行Vim命令

您的代码中的问题出在argc()中-它不计算函数的参数,而是计算命令行中的文件参数。运行代码时,argc()很可能为1,因此循环仅执行一次。

要计算该函数的参数,请使用a:0而不是argc()

while i < a:0
    let command = ":wincmd " . a:000[i]
,

除了单独的(...)a:1,...

外,列表a:000中还提供了可选的函数参数a:2

实际上,如果从a:0切换到argc()循环,则实际上不需要使用长度(通过:while,而不是:for!)和显式索引:

for arg in a:000
    let command = 'wincmd ' . arg

如果出于某些原因需要使用索引,我仍然希望使用:for

for i in range(a:0)
    let command = 'wincmd ' . a:000[i]
本文链接:https://www.f2er.com/3163751.html

大家都在问