2020年1月10日金曜日

Vim の colorscheme をランダムに変えて保存する

Vim 9 で Vim Script が Python より早くなりそうなので、以前作った vimの配色を起動時刻ごとにランダムに変える のコードを少し書き変えて、Vim Script にしてみました。 初めてまともに Vim Script を書いた気がする。

機能としては、F5 でランダムに colorscheme を変え、cs で設定を保存する。これだけです。 変更した colorscheme を保存する機能が、一番作りたかったところです。
function ColorSchemeChange()
  function! RandInt(Low, High) abort
      let l:milisec = str2nr(matchstr(reltimestr(reltime()), '\v\.\zs\d+'))
      return l:milisec % (a:High - a:Low + 1) + a:Low
  endfunction
  let schemes = globpath(&rtp, "colors/*.vim")
  let filelist = split(schemes, "\n")
  let filepath = filelist[RandInt(0, len(filelist))]
  let filename = split(filepath, '/')[-1]
  let colorscheme = split(filename, '\.')[0]
  exec 'colorscheme ' . colorscheme
endfunction
function ColorSchemeSave()
  let colorscheme = execute('colorscheme')[1:]
  let config = ['set background=' . &background, "colorscheme " . colorscheme]
  call writefile(config, expand('~/.vimrc.colorscheme'))
endfunction
nnoremap cs :call ColorSchemeSave()
nnoremap <F5> :call ColorSchemeChange()<CR>:colorscheme<CR>
nnoremap bd :set background=dark<CR>
nnoremap bl :set background=light<CR>

" colorscheme monokai
execute ':source ' . '~/.vimrc.colorscheme'
このスクリプトと、colorscheme のリストをまとめたプラグインを併用すると、colorscheme を気軽に変更できます。 colorscheme のリストは以下が有名ですが、他にもあります。 私は flazz/vim-colorschemes を vim-plug から利用しています。
ところで colorscheme を変更するプラグインは、ランダムではなく一つずつチェックしながら変更するものがいくつかあります。 ただ変更したものを保存できないため不満だったのと、 flazz/vim-colorschemes くらい colorscheme が多くなってくると一つ一つ選ぶ気が起きないので、ランダムなものが欲しかった。


話は変わりますが、Vim Script って arr[1:] みたいな Numpy 表記ができるんですね。 Vim で Deep Learning もできなくはないんだなあ…。

0 件のコメント: