VimのスワップをVimスクリプトで消してみるかという話

1 min read読了の目安(約1300字

たまにこうなる。

異常終了時のリカバリーをしてくれてるわけなので、非常にうれしい機能だなと思っています。

しかし、コイツは自動で消えません。リカバーしたら消えるのかと思っていました。
まさしくフェイルセーフの精神ですね。角度によって短所も長所もひっくり返ります。

だが面倒

google先生はファイル検索しまくって手あたり次第消すみたいなコマンドがはびこってました。
怖いなーと思ったので、Vimスクリプトを作ります。具体的なリポジトリは以下になります。

https://github.com/kaepa3/swpclear

ちなみにフォルダ構成は以下ぐらいの感じの認識でやっています。詳しくは例の霊長類のサイトを眺めるが吉です。(安いし例の本は買ってもいいと思う。)

  • autoload→関数定義
  • plugin→コマンド定義

# 解説

let s:os_type= system('uname')
let s:path = '~/.local/share/nvim/swap/*'
if has('win64')
    let s:path = '~\AppData\Local\nvim-data\swap\*'
endif

function!  swpclear#execute() abort
    let filelist = glob(s:path)
    let splitted = split(filelist, "\n")
    for file in splitted
        call delete(file)
    endfor
    echo "delete swap file"
endfunction

最初に動作してるシステムを判定してそれぞれのデフォルトパスを取得します。
あとはコマンドである:SwpClearが実行されたとき(plugin\swpclear.vim側に定義)に
swpclear#executeが呼ばれて対象のフォルダ以下を消すわけです。

問題点

  • ファイルパスが決め打ち→変数をグローバルに持っていけばよい
  • .swpで検索してない。
  • Linuxのこと考えてない
  • 消してはいけないタイミングがあるかもしれない。
  • こんなもんありそうなのにない、ということはみんななんか別の方法で回避している。

特に一番最後が問題なのですがとりあえずやってみることは大事ということで。

私はneovim+deinですが、プラグイン設定の云々が面倒でGithubからコピーしたりしちゃいます。
そんなことしても結局動かず、公式とログを頼りにどうにかすることはよくある話です。
コピーするなよって話は置いといて、Vimに関しても「とりあえず、コードを読むか」と思えるレベルまで私も行きたいものです。

本件、なんか不都合なことが発生したらここに追記します。ということで。