1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【私用】Neovim保存時に日付(タイムスタンプ)を自動更新

Posted at

概要

【私用】なので私的なメモです.少々役立つかもしれないと思い,公開する範囲を拡大することにしました.

Neovimを利用して,ファイル保存時にユーザー名や日時が挿入・更新されると便利なことがあります.コメント行に Time-Stamp: <> と書いておけば,保存(:w)するタイミングで,Time-Stamp: <ユーザー名や日時> の部分が更新される私的に利用しているTipsとなります.他の方法もたくさんあると思います.そこがvimのいいところですね.

OS: Ubuntu 22.04, 24.04で検証

タイムスタンプ更新関数

init.luaへ次の内容を追記します.関数名はちょっとあれですが,適宜好みの名称に変更してください:sweat_smile:

init.luaへ追記
-- 保存時にタイムスタンプを更新する関数 
--   Time-Stamp: <>と書いてある最初の行が更新される
-- 
local function update_timestamp()
    -- ユーザー名と日付を取得 <ユーザー名: タイムスタンプ>
    local username = os.getenv("USER") or os.getenv("USERNAME") or "anonymous"
    local timestamp = os.date("%Y-%m-%d %H:%M:%S")
    local replacement = "Time-Stamp: <" .. username .. ": " .. timestamp .. ">"

    -- バッファ全体を取得
    local buf = vim.api.nvim_get_current_buf()
    local lines = vim.api.nvim_buf_get_lines(buf, 0, -1, false)

    local found = false
    -- 各行をチェックして、Time-Stampを含む最初の行を置き換え
    for i, line in ipairs(lines) do
        if line:match("%s*Time%-Stamp: <.*>$") then
            lines[i] = line:gsub("Time%-Stamp: <.*>$", replacement)
            found = true
            break  -- 該当行が見つかったら、ループを抜ける
        end
    end

    -- 該当行が見つかった場合のみバッファに変更を反映
    if found then
        vim.api.nvim_buf_set_lines(buf, 0, -1, false, lines)
    end
end

-- ファイル保存時にupdate_timestamp関数を呼び出す
vim.api.nvim_create_autocmd("BufWritePre", {
    pattern = "*",
    callback = update_timestamp
})

冒頭部分にあるコメント行に Time-Stamp: <> と書いておけば,保存(:w)するタイミングで,Time-Stamp: <ユーザー名や日時> の部分が更新されるはこびとなります.

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?