VimL无限打印列表中的值

时间:2017-02-09 20:53:37

标签: vim

我有一个符号列表,并希望使用Vim8定时器API每80ms循环一次符号列表并返回该符号。我做了类似这样的事情:

let s:frames = ['⠋', '⠙', '⠹', '⠸', '⠼', '⠴', '⠦', '⠧', '⠇', '⠏']
let s:numTestimonials = len(s:frames)
let s:start = 0

function! PrintValues()
    return s:frames[s:start]
    let s:start = (s:start) + 1 % s:numTestimonials
endfunction

let timer = timer_start(80, 'PrintValues', {'repeat': -1})

但是一旦到达列表中的最后一个符号,就会抛出错误E684: list index out of range: 10。任何想法如何实现我想要的东西?

2 个答案:

答案 0 :(得分:3)

你需要在mod

之前加上1个括号
let s:start = (s:start + 1) % s:numTestimonials

1 % s:numTestimonials始终为1,在添加s:start

之前进行评估

答案 1 :(得分:2)

对您的代码进行了一些小的更改(在vim 7.4上测试):

let timer = timer_start(500, 'PrintValues', {'repeat': -1})
let s:frames = ['⠋', '⠙', '⠹', '⠸', '⠼', '⠴', '⠦', '⠧', '⠇', '⠏']
let s:numTestimonials = len(s:frames)
let s:start = 0

function! PrintValues(timer)
    execute "normal! i".s:frames[s:start]
    let s:start = (s:start + 1) % s:numTestimonials
endfunction

enter image description here