obsidian-nvim について
Obsidian vaultをNeovimで管理するプラグイン、obsidian.nvimの設定と使い方を案内するスキルです。主要コマンド、リンク操作、補完、テンプレート、frontmatterの設定とトラブルシューティングを扱います。
主な機能
- 01Obsidianワークスペースの設定
- 02ノートの作成、検索、切り替え
- 03ノートリンクとバックリンクの管理
- 04テンプレートとfrontmatterの設定
- 05補完とピッカーの設定
活用シーン
- 01NeovimでObsidian vaultを管理
- 02テンプレートからデイリーノートを作成
- 03ノートを検索して内部リンクを追加
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ julianobarbosa/ claude-code-skills --skill obsidian-nvimインストール後、Claude Code で/obsidian-nvimを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
references/commands.mdconfiguration.mdexamples.mdtroubleshooting.md詳細
obsidian.nvim スキル
obsidian.nvim(Obsidian の Vault を管理する Neovim プラグイン)の実装と設定に関する包括的なガイドです。
クイックスタート
最小限のインストール(lazy.nvim)
return {
"obsidian-nvim/obsidian.nvim",
version = "*",
ft = "markdown",
opts = {
workspaces = {
{ name = "personal", path = "~/vaults/personal" },
},
},
}
システム要件
- Neovim:>= 0.10.0
- ripgrep:補完と検索に必要です(
brew install ripgrep) - pngpaste(macOS):画像の貼り付けに必要です(
brew install pngpaste) - xclip/wl-clipboard(Linux):画像の貼り付けに必要です
設定
設定オプションの全容については、references/configuration.md を参照してください。
基本的な設定オプション
require("obsidian").setup({
-- Workspace configuration (required)
workspaces = {
{ name = "personal", path = "~/vaults/personal" },
{ name = "work", path = "~/vaults/work" },
},
-- Daily notes
daily_notes = {
folder = "daily",
date_format = "%Y-%m-%d",
alias_format = "%B %-d, %Y",
default_tags = { "daily-notes" },
},
-- Templates
templates = {
folder = "templates",
date_format = "%Y-%m-%d",
time_format = "%H:%M",
},
-- Note ID generation (Zettelkasten-style by default)
note_id_func = function(title)
local suffix = ""
if title ~= nil then
suffix = title:gsub(" ", "-"):gsub("[^A-Za-z0-9-]", ""):lower()
else
for _ = 1, 4 do
suffix = suffix .. string.char(math.random(65, 90))
end
end
return tostring(os.time()) .. "-" .. suffix
end,
-- Completion settings
completion = {
nvim_cmp = true, -- or blink = true for blink.cmp
min_chars = 2,
},
-- UI customization
ui = {
enable = true,
checkboxes = {
[" "] = { char = "", hl_group = "ObsidianTodo" },
["x"] = { char = "", hl_group = "ObsidianDone" },
},
},
})
コマンド
コマンドの全容については、references/commands.md を参照してください。
主なコマンド
| コマンド | 説明 |
|---|---|
:Obsidian | コマンドピッカーを開きます |
:Obsidian today [OFFSET] | デイリーノートを開く/作成します |
:Obsidian new [TITLE] | 新しいノートを作成します |
:Obsidian search [QUERY] | ripgrep で Vault を検索します |
:Obsidian quick_switch | ノートをファジー検索します |
:Obsidian backlinks | 現在のノートへの参照を表示します |
:Obsidian template [NAME] | テンプレートを挿入します |
:Obsidian workspace [NAME] | ワークスペースを切り替えます |
ビジュアルモードのコマンド
| コマンド | 説明 |
|---|---|
:Obsidian link [QUERY] | 選択範囲を既存のノートにリンクします |
:Obsidian link_new [TITLE] | ノートを作成し、選択範囲をリンクします |
:Obsidian extract_note [TITLE] | 選択範囲を新しいノートに切り出します |
キーマップ
スマートアクション(推奨:<CR>)
vim.keymap.set("n", "<CR>", function()
if require("obsidian").util.cursor_on_markdown_link() then
return "<cmd>Obsidian follow_link<CR>"
else
return "<CR>"
end
end, { expr = true })
ナビゲーションリンク
vim.keymap.set("n", "[o", function()
require("obsidian").util.nav_link("prev")
end, { buffer = true, desc = "Previous link" })
vim.keymap.set("n", "]o", function()
require("obsidian").util.nav_link("next")
end, { buffer = true, desc = "Next link" })
ピッカー連携
お好みのピッカーを設定します。
picker = {
name = "telescope", -- or "fzf-lua", "mini.pick", "snacks.picker"
note_mappings = {
new = "<C-x>",
insert_link = "<C-l>",
},
tag_mappings = {
tag_note = "<C-x>",
insert_tag = "<C-l>",
},
},
補完連携
blink.cmp との連携
completion = {
blink = true,
nvim_cmp = false,
min_chars = 2,
},
nvim-cmp との連携
completion = {
nvim_cmp = true,
blink = false,
min_chars = 2,
},
トリガー:
[[- Wiki リンク補完[- Markdown リンク補完#- タグ補完
テンプレート
テンプレート変数
| 変数 | 説明 |
|---|---|
{{title}} | ノートのタイトル |
{{date}} | 現在の日付 |
{{time}} | 現在の時刻 |
{{id}} | ノート ID |
カスタム置換
templates = {
folder = "templates",
substitutions = {
yesterday = function()
return os.date("%Y-%m-%d", os.time() - 86400)
end,
tomorrow = function()
return os.date("%Y-%m-%d", os.time() + 86400)
end,
},
},
Frontmatter の管理
frontmatter = {
enabled = true,
func = function(note)
local out = { id = note.id, aliases = note.aliases, tags = note.tags }
if note.metadata ~= nil and not vim.tbl_isempty(note.metadata) then
for k, v in pairs(note.metadata) do
out[k] = v
end
end
return out
end,
sort = { "id", "aliases", "tags" },
},
トラブルシューティング
包括的なトラブルシューティングについては、references/troubleshooting.md を参照してください。
ヘルスチェック
:checkhealth obsidian
クイック修正
| 問題 | 解決策 |
|---|---|
| 補完が動作しない | ripgrep をインストールします:brew install ripgrep |
| ピッカーが開かない | ピッカー名がインストール済みのプラグインと一致していることを確認します |
| 画像を貼り付けられない | macOS:brew install pngpaste |
| リンクをたどれない | カーソルが [[link]] または [text](link) 上にあることを確認します |
| チェックボックスが表示されない | :set conceallevel=2 を設定します |
| ワークスペースが見つからない | パスが存在し、ファイルが Vault 内にあることを確認します |
デバッグモード
log_level = vim.log.levels.DEBUG,
例
実用的な設定例については、references/examples.md を参照してください。
リソース
注意点
- ライブアップデートには Obsidian の起動が必要です — Neovim からの保管庫の変更は、アプリを起動して保管庫にフォーカスするまで Obsidian のインデックスに反映されません。
- 補完ソースの順序が
cmp-bufferと競合します — バッファーソースの順位が高いと、LSP 補完でノートの候補が表示されない場合があります。sorting.priority_weightを明示的に調整する必要があります。 - デイリーノートのテンプレートパスには、Obsidian の自然言語形式の日付ではなく、Lua の
os.date形式を使用します — nvim では%Y-%m-%d、Obsidian ではYYYY-MM-DDです。 - インデックス未登録のファイルでは、
require("obsidian").get_client():resolve_link()は nil を返します — ファイルが存在していても同様です。プラグイン外でノートを作成した後は、:ObsidianRefreshを実行してください。 lazy.nvimでBufRead時に遅延読み込みする場合、プラグイン仕様の評価前に開いた最初の保管庫ファイルではノート機能が使えません — obsidian.nvim にlazy=falseを設定するか、VeryLazyイベントを使用してください。
コメント
Markdown 対応