mcpField
O
obsidian-nvim

obsidian-nvim

github.com/julianobarbosa生产力14114 次安装2 天前更新
代码仓库

关于 obsidian-nvim

这是 obsidian.nvim 的配置与使用指南,面向在 Neovim 中管理 Obsidian vault 的用户。内容涵盖常用命令、链接操作、补全、模板和 frontmatter 设置,并提供配置与故障排查参考。

主要功能

  1. 01配置 Obsidian 工作区
  2. 02创建、搜索和切换笔记
  3. 03管理笔记链接与反向链接
  4. 04设置模板和 frontmatter
  5. 05配置补全与 picker

适用场景

  1. 01在 Neovim 中管理 Obsidian vault
  2. 02创建每日笔记并套用模板
  3. 03搜索笔记并建立内部链接

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/julianobarbosa/claude-code-skills --skill obsidian-nvim

安装后在 Claude Code 中输入/obsidian-nvim确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

references/
commands.md
configuration.md
examples.md
troubleshooting.md

详细介绍

obsidian.nvim 技能

用于实现和配置 obsidian.nvim 的综合指南——这款用于管理 Obsidian 知识库的 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 搜索知识库
: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
找不到工作区确认路径存在,且文件位于知识库内
调试模式
log_level = vim.log.levels.DEBUG,

示例

实用配置示例请参阅 references/examples.md。

资源


注意事项

  • 该插件需要 Obsidian 正在运行才能实时更新——Neovim 中的 vault 更改不会同步到 Obsidian 的索引,除非应用已打开且当前聚焦于该 vault。
  • 补全源排序与 cmp-buffer 冲突——如果缓冲区源的优先级更高,LSP 补全可能不会显示笔记建议;需要显式调整 sorting.priority_weight。
  • 每日笔记模板路径使用 Lua 的 os.date 格式,而不是 Obsidian 的自然语言日期格式——nvim 中使用 %Y-%m-%d,Obsidian 中使用 YYYY-MM-DD。
  • 对于未编入索引的文件,require("obsidian").get_client():resolve_link() 会返回 nil——即使文件确实存在。在插件外创建笔记后,请强制执行 :ObsidianRefresh。
  • lazy.nvim 在 BufRead 时延迟加载:在插件配置求值前打开的第一个 vault 文件不会启用笔记功能——将 obsidian.nvim 设置为 lazy=false,或使用 VeryLazy 事件。

评论

支持 Markdown