🗒️

Vimで自動保存メモ

2024/10/18に公開

この記事はVim駅伝の2024-10-17の記事です。
前回の記事はhokorobiさんのCtrlP に PR したです。


「Vimでメモ」は何番煎じのネタかわかりませんが、備忘録として。

ここ数年、エディ太郎というアプリを使っています。
「既存のファイルを編集できない」「書いた内容は独自領域に自動保存される」というミニマルなエディタです。

https://editaro.com/

使う前はこんなに機能を絞っていて大丈夫なのか不安でしたが、想像以上に便利に使っています。独立したファイルで自動保存されるので、保存先やファイル名を考える必要がなく、「書き残す」だけに集中できる作りです。
これでVimの設定を使えたらいいなぁ…と思っていたのですが、それならVimで作ったらいいじゃんと気づきました。

ということで設定の紹介です。
メモファイル自体はローカルの適当なパスに保存します。

" 保存先
let s:memo_path = expand('~/.local/share/memo.md')

" メモを開閉する関数
function! s:memo_toggle() abort
  " 既に開いていた場合はメモを閉じる
  if expand('%') ==# s:memo_path
    write
    bdelete
    return
  endif

  " ファイル編集開始 & ローカルオプション設定
  execute 'edit' s:memo_path
  setlocal bufhidden=wipe noswapfile

  " 自動保存設定
  autocmd InsertLeave,TextChanged,BufLeave <buffer> silent update
endfunction

" コマンド
command! Memo call s:memo_toggle()

" マッピング
nnoremap mo <Cmd>Memo<CR>

マッピングがmeではなくmoなのは、moは右手だけでサッと入力できるためです。
また、コマンドを定義しているのはシェルから vim -c Memo で直接起動できるようにするためです。

autocmd TextChangedを使っているので、マクロを使ったりすると連続で発火して重くなる懸念はあるのですが、簡易メモであればあまりそういう編集はしないだろうと考えています。必要ならdebounceを挟むかも。

https://zenn.dev/vim_jp/articles/9b1db46217a27d

自動保存のアイデアは以下を参考にしました。

https://github.com/907th/vim-auto-save

Discussion