3

我使用 vim 的时间已经数不胜数了,但我从来没有真正学好 vimscript。我现在正在努力。

无论如何,我想将可变的时间传递给 sleep 函数。我还想在传递它之前操纵该值。这是一个简单的例子。

function! wait(mil)
    let timetowait = mil . "m"
    sleep timetowait
endfunction

即使我尝试在 timetowait 前加上 l: 前缀,它也会显示“无效参数:l:timetowait”。

将变量的值传递给睡眠的正确方法是什么?

4

2 回答 2

7

有几个问题:

  • 您的方法应以大写名称开头
  • 你需要访问你的论点a:
  • 你必须在睡觉和睡觉之间留出空间m
  • 您必须使用间接执行睡眠execute

这是一个如何做到这一点的例子:

function! Wait(mil)
    let timetowait = a:mil . " m"
    exe 'sleep '.timetowait
endfunction 
于 2013-02-08T19:48:54.060 回答
3

大安的回答是正确的;这里有一些更多的背景信息:

Vimscript 的评估与在:命令行中键入的 Ex 命令完全一样。中没有变量ex,因此无法指定它们。当以交互方式键入命令时,您可能会使用<C-R>=插入变量内容:

:sleep <C-R>=timetowait<CR>m<CR>

...但在脚本中,:execute必须使用。Ex 命令的所有文字部分都必须用引号引起来(单引号或双引号),然后与变量连接:

execute 'sleep' timetowait . 'm'
于 2013-02-08T20:14:38.013 回答