传递变量以在vimscript中休眠

时间:2013-02-08 18:13:34

标签: vim

我一直在使用vim计算太多年了,但我从来没有真正学过vimscript。我现在正在尝试。

无论如何,我想将不同的时间传递给睡眠功能。我也希望在传递之前操纵该值。这是一个简单的例子。

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

即使我尝试使用l来为timetowait添加前缀:它说:“无效的参数:l:timetowait”。

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

2 个答案:

答案 0 :(得分:6)

有几个问题:

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

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

function! Wait(mil)
    let timetowait = a:mil . " m"
    exe 'sleep '.timetowait
endfunction 

答案 1 :(得分:3)

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

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

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

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

execute 'sleep' timetowait . 'm'