我有一个符号列表,希望使用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。有什么办法可以实现我想要的东西吗?
发布于 2017-02-10 05:04:43
您需要在mod之前使用1内括号
let s:start = (s:start + 1) % s:numTestimonials1 % s:numTestimonials始终为1,并在添加s:start之前进行计算
发布于 2017-02-10 05:21:30
对你的代码做了一些小的修改(在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

https://stackoverflow.com/questions/42146659
复制相似问题