2017-02-09 3 views
2

私はシンボルのリストを持っており、Vim8タイマAPIを使用して80msごとにシンボルリストをループし、そのシンボルを返すことを望みます。私はこのような何か働い:リスト内のVimLの値を無制限に

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がスローされます。どのように私が欲しいものを達成するための任意のアイデア?あなたはMOD

let s:start = (s:start + 1) % s:numTestimonials 

1 % s:numTestimonials前に括弧内の1を持っている必要があります

答えて

3

は常に1であるとsを追加する前に評価される:あなたのコードに行われたいくつかの小さな変更は(VIM 7.4でテスト

+0

ドールああ... Iもともとそれを持っていたが、それは私にいくつかの他の構文エラーに関する問題を与えていた。答えをありがとう!ステータスラインセグメントに返された値を出力する方法を理解する – mhartington

2

を開始します):

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

関連する問題