NoahOrblog

某・福島にある大学のコンピュータ理工学部の大学生のお話。

自作NeoVimプラグインの軌跡

Noahです。

この記事はVimAdventCalendar2018 16日目の記事です

qiita.com

先日Publishした他アドベントカレンダーの記事が「〜〜の軌跡」なので、それにあやかります。

本当はVimに最近パッチで入った開発中のテキストプロパティを触ってみた話を記事にしたかったのですが、少し時間がなかったので、自作のNeoVimプラグインについて少し話します。

NeoVimのRemotePlugin関係(主にGolang)のスライドや記事はたくさん書いているのでそちらもみていただけると嬉しいです。

noahorberg.hatenablog.com

noahorberg.hatenablog.com

noahorberg.hatenablog.com

noahorberg.hatenablog.com

www.slideshare.net

最近

NoahOrberg/diesirae.nvim

github.com

実装したのはかなり前なのですが、Aizu Online Judge をNeoVimから操作できるようにしたこのプラグインがローカルでテストを回せるようになりました

以前までは提出、結果取得をしなければならず、サーバー側で提出のログに残ってしまったのですが、予め用意されているテスト用のInput, Outputを取得して内部で回せます

その際に、実行するコマンドを自分で指定する必要があります。

READMEにも書いてあるのですが、

let g:diesirae_config = {
\  'commands': {
\    'py': {
\      'build_command': [], 
\      'exec_command': ['python3', '*source*']
\    },
\    'go': {
\      'build_command': ['go', 'build', '-o', '*bin*', '*source*'], 
\      'exec_command': ['*bin*']
\    }
\  }
\}

このように、ファイル拡張子をキーにして build_commanmd, exec_command の二種類を定義します。

*bin*, *source* はそれぞれバイナリとソースファイルのプレースホルダーです。

pythonのようなスクリプト言語には build_command に空の配列を指定し、 exec_command だけ定義します。

NoahOrberg/AYUNiS.nvim

github.com

AYUNiS.nvim では、Spotify.appを操作するためにAppleScriptを内部で利用しています。

そのため、AppleScriptスクリプトの場所を知るためにRuntimePathを内部で定義していて、以前は自分が GitHub - Shougo/dein.vim: Dark powered Vim/Neovim plugin manager を使っていたので、deinからRuntimePathを取得していたのですが、PlugなどもサブPCで使用していたので、プラギンマネージャに左右されないようにRuntimePathをVimscriptで注入できるようにしました。

少しだけ煩わしいですね。

lightline.vim などで以下のように設定するとtablineで現在の再生曲タイトルが見れるのでいい感じです。

ちなみにAppleScriptを使ってるのでMacでしか動かないです。

" use lightline (show in the tabline
let g:lightline = {
      \ 'component_function': {
      \   'ayunis': 'AYUNiSGetNowPlaying'
      \ },
      \ }
let g:lightline.tabline          = {
      \ 'left': [['ayunis', 'buffers']],
      \ 'right': [['close']]
      \ }

最後に

時間がなかったので、今まで開発したプラグインや記事たちの紹介になっちゃったけど、もっとちゃんとした記事を書きたかった...