Neovimでinit.luaからコマンド登録で日誌(Journal)を作る

公開日:
目次

普段Logseqを使っているので、Neovimdでも日誌(Journal)を作成したいと思いコマンドを作成してみました。

備忘録として残します。

Neovimに日誌を導入するスクリプト

基本的にNeovimでコマンドを登録する場合はinit.luaを利用します。

Neovimでユーザコマンドを作るときは、nvim_create_user_command()を使ってコマンドを作成して、vim.keymap.set()でキーに登録します。

init.lua
vim.api.nvim_create_user_command(
  'Journal',
  function ()
    local baseJournalPath = '~/notes/journal/'
    local todayJournalPath = baseJournalPath .. os.date('%Y-%m-%d') .. '.md'
    vim.cmd('e ' .. todayJournalPath)
  end,
  {}
)
vim.keymap.set('n','<leader>jt','<cmd>Journal<cr>')

これを実行すると jtと入力するだけで特定のディレクトリにファイルが作成され、そのファイルをバッファで開くことができます。

コード解説

簡単にコードを解説します。

ユーザーコマンドの作成

vim.api.nvim_create_user_command()

vim.api.nvim_create_user_commandは、新しいユーザーコマンドを作成するためのNeovim API関数です。

コマンド名の指定

'Journal',

コマンドの名前を「Journal」に指定しています。このコマンドは:Journalと入力することで呼び出せます。

コマンド実行時の処理

function ()
  local baseJournalPath = '~/notes/journal/'
  local todayJournalPath = baseJournalPath .. os.date('%Y-%m-%d') .. '.md'
  vim.cmd('e ' .. todayJournalPath)
end,

コマンドが実行されたときに動作する無名関数を定義しています。

local baseJournalPath = '~/notes/journal/'では、日誌を保存するディレクトリのパスを指定しています。

local todayJournalPath = baseJournalPath .. os.date('%Y-%m-%d') .. '.md'では今日の日付をフォーマットし(YYYY-MM-DD形式)、それをディレクトリパスに追加して今日の日誌ファイルのパスを作成します。

vim.cmd('e ' .. todayJournalPath)ではNeovimのコマンドを実行し、指定されたファイルパスをvimの編集モードで開きます。

キーマッピングの設定

vim.keymap.set('n','<leader>jt','<cmd>Journal<cr>')

ノーマルモードで<leader>jtを押したときにJournalコマンドを実行するようにキーマッピングを設定しています。

  • 'n':
    • ノーマルモードでのキーマッピングを示します。
  • '<leader>jt':
    • キーマッピングのトリガーとなるキーシーケンスを指定します。私はリーダーキーに (スペース)を設定しています。
  • '<cmd>Journal<cr>':
    • キーシーケンスが押されたときに実行されるコマンドを指定します。この場合、先に作成したJournalコマンドを実行します。