我有一个符号列表,并希望使用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
。任何想法如何实现我想要的东西?
答案 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