📝

【Neovim】memolist.vimを使ってメモをとり、telescope-memo.nvimで検索する

2022/12/06に公開

はじめに

コーディング中に調査した内容や、思いついた課題などをVim上でメモをよく取っています。この記事ではVimを使いながらどのようにメモを取っているかとその環境を作るためのツールを紹介します。

メモを作成・検索する様子

メモを作成している様子です。次のようなkeymapを設定しており、メモの作成、検索(list, grep)が行えています。<leader> にはspaceを利用しています。

key コマンド
<leader>mn :MemoNew<CR>
<leader>ml :Telescope memo list<CR>
<leader>mg :Telescope memo live_grep<CR>

MemoNew.gif

導入しているツールとその関係性

以下の3つを組み合わせて実現できます。導入方法はそれぞれのREADMEを参照してください。

  • Vimプラグイン
  • CLI
    • mattn/memo
    • Vimではなくシェルで memolist.vim と同様のワークフローが行えるCLI

関係性を図解すると、このようになります。

relation

Vimで使えるプラグインとして元々 memolist.vim があり、それをシェルからも使いたいということで memo コマンドを実装された経緯があるとのことです。

https://mattn.kaoriya.net/software/memo.htm

さらには telescope-memo.nvim はTelescopeのextensionとして提供されており、memo コマンドを内部で実行してメモの一覧やlive_grepを実現しています。普段ありとあらゆる検索をTelescopeを介して行っているため、大変ありがたいです。

それぞれのツールがいい塩梅で噛み合っており、素晴らしいですね。

設定方法

前述の通り memomemolist.vim の設定を揃えることで相互運用ができます。

  • memolist_pathmemo_dir
  • memolist_template_dir_pathmemotemplate

を揃えてあげればOKです。私の環境では次のように設定しています。

memolist.vim

vim.g.memolist_path = "~/.memolist/memo"
vim.g.memolist_memo_suffix = "md"
vim.g.memolist_fzf = 1
vim.g.memolist_template_dir_path = "~/.memolist/memotemplates"

memo

memodir = "~/.memolist/memo" # memolist.vimの設定を揃える
editor = "nvim"
column = 20
width = 0
selectcmd = "fzf"
grepcmd = "grep -nH ${PATTERN} ${FILES}"
memotemplate = "~/.memolist/memotemplates/md.txt"
assetsdir = "."
pluginsdir = "~/.config/memo/plugins"

autocmdを作成して保存時にgit commit,pushされるようにする

メモを保管するディレクトリ(memodir)をgit管理し、メモを保存したタイミングで自動でcommit, pushを行うような仕組みを入れて運用しています。普段はauto_saveのプラグインを入れているのですが、メモを書く場合はoffにして保存時のみgit操作が走るようにしています。

mattn/memo では pluginsdir に実行ファイルを置くだけで追加のコマンドを定義できます。(README参照)この機能を利用して plugins_dircommit というシェルスクリプトを置き、 memo commit で叩けるようにしています。

vim.api.nvim_create_augroup("MemoAutoCommit", { clear = true })
vim.api.nvim_create_autocmd("BufEnter", {
	group = "MemoAutoCommit",
	pattern = "*/.memolist/memo/*.md",
	callback = function()
		vim.api.nvim_buf_set_var(0, "auto_save", 0)
	end,
})
vim.api.nvim_create_autocmd("BufWritePost", {
	group = "MemoAutoCommit",
	pattern = "*/.memolist/memo/*.md",
	command = "!(memo commit)",
})
commit
#!/bin/bash

cd ~/.memolist

git pull --no-edit
git add .
git commit -m "auto update"
git push origin main

cd -

まとめ

Vimでメモの作成と検索、プラスαでgit操作の自動化について紹介しました。今のところ快適に運用できています。memolist.vimとmattn/memoの噛み合わせ(?)がすごいですね。興味ある方はぜひお試しください!

参考

https://blog.glidenote.com/blog/2012/03/26/memolist.vim/

Discussion