cover

vim-zettel 文档中文翻译

zettelkasten 是一种旨在通过文件的链接建立知识的链接的笔记方法。目前已经有许多基于该方法实现的应所有,比如 Obsidian、Logseq 之类的。如果你的主力编辑器时 vim,同时希望尝试该方法,则可以通过 vim-zettel 插件进行尝试,本文是对 vim-zettel 文档的粗浅翻译,如有疏漏可以通过邮件(jferroal@gmail.com)联系我。

2022-10-07

英文原文请在 vim 中使用

:help vim-zettel
查看。

heading

介绍(ntro)

这是一个实现了 https://zettelkasten.de/ 中描述的 zettelkasten 笔记法的 Vim 插件。是 Vimwiki 的扩展插件,支持 Vimwiki 和 Markdown 语法。

主要功能:

  • 可自定义的文件名(日期和时间、标题、连续编号、随机字符)
  • 无论实际文件名如何,链接始终显示标题
  • 使用 fzf 进行全文搜索和超链接支持
  • 从 LaTeX 或 Markdown 文档中搜索 Zettelkasten 并将选定的注释插入到文档
  • 模板
  • 自动更新标签索引
  • 反向链接
heading

安装(Installation)

默认使用 Silver Searcher 作为搜索工具。

Using Vundle:

Plugin 'vimwiki/vimwiki' Plugin 'junegunn/fzf' Plugin 'junegunn/fzf.vim' Plugin 'michal-h21/vim-zettel'
heading

配置(Configuration)

因为 Vim-Zettel 是基于 Vimwiki 工作的,所以先配置 Vimwiki。如果您只有一个 wiki,则可以直接使用 Vim-Zettel,无需进一步配置。但是,如果你想要自定义 Vim-Zettel 配置或有多个 wiki,则必须进行如下的配置。

" Settings for Vimwiki let g:vimwiki_list = [\ {'path':'~/scratchbox/vimwiki/markdown/','ext':'.md',\ 'syntax':'markdown'}, \ {"path":"~/scratchbox/vimwiki/wiki/"} \ ]

你可以在 .vimrc 文件中配置以下选项以使 Vim-Zettel 符合你的喜好:

  • g:zettel_options
  • g:zettel_format|
  • g:zettel_default_mappings|
  • g:zettel_fzf_command|
  • g:zettel_fzf_options|
  • g:zettel_backlinks_title|
  • g:zettel_backlinks_title_level|
  • g:zettel_unlinked_notes_title|
  • g:zettel_unlinked_notes_title_level|
  • g:zettel_generated_tags_title|
  • g:zettel_generated_tags_title_level|

你还可以提供用于创建新 zettels 的自定义模板。参见模板

heading

命令(Commands)

安装 Vim-Zettel 后,使用

:VimwikiIndex
命令打开 wiki 的主文件。从此页面链接到你的笔记。

Vim-Zettel 在 Vimwiki 之上实现了以下命令。

  • :ZettelNew
    命令——它将创建一个名为 %y%m%d-%H%M.wiki 的新 wiki 文件(可以使用
    g:zettel_format
    变量更改文件名格式)。该文件使用如下模板
%title Note title %date current date

其中 title 是

:ZettelNew
的第一个参数。

如果您使用

Vim-Zettel
提供的默认映射,可以通过在可视模式下按
z
字符来调用此命令。所选文本将用作新笔记的标题。 新创建的 wiki 文件将按照给定的顺序保存在:

(1) 如果当前目录在

g:vimwiki_list
中,则保存在当前目录 (2) 具有非空
g:zettel_options
的第一个
g:vimwiki_list
的目录路径 (3) 第一个
g:vimwiki_list
条目给出的目录路径 (4) vimwiki 的默认目录

with the given order.

  • :ZettelOpen
    命令:使用 fzf 执行全文搜索。它保留打开页面的历史记录。
  • :ZettelInsertNote
    :使用 fzf 选择笔记并将它们插入当前文档。可以使用
    <TAB>
    键选择多个笔记。它们会使用 Pandoc 自动转换为文档语法格式。
  • :ZettelCapture
    命令:将当前文件的内容转换为 zettel。这是一个在 Vim 中可用的全局命令。警告:此命令具有破坏性。仅用于临时文件。您可以在查看要转换为 zettel 的文件时从 vim 中运行它,或者从命令行运行它:
vim -c ZettelCapture filename

如果有多个 wiki,可以指定 wiki 编号(从 0 开始)。默认打开第一个声明的 wiki:

vim -c "ZettelCapture 1" filename
  • :ZettelSetActiveWiki
    命令:为在 Vimwiki 不活动时可以运行的命令选择默认 wiki,例如
    :ZettelOpen
    :ZettelInsertNote
  • :ZettelBackLinks
    命令:插入链接到当前笔记的笔记列表。
  • :ZettelInbox
    命令:插入无法从索引文件访问的笔记列表(您可以使用
    :VimwikiIndex
    命令打开索引文件)。
  • :ZettelGenerateLinks
    命令:在当前页面中插入所有 wiki 页面的列表。需要更新的标签数据库(
    :VimwikiRebuildTags!
    )。
  • :ZettelGenerateTags
    命令:在当前页面中插入标签列表和使用这些标签的页面。需要更新的标签数据库(
    :VimwikiRebuildTags!
    )。只支持 :tag1:tag2 形式的 Vimwiki 样式标签(在 Markdown 模式下也能工作)。
  • :ZettelSearch
    命令:搜索你的 zettelkasten 的内容并在当前的笔记中插入一个指向所选 zettel 的链接。在插入模式下映射到
    [[
  • :ZettelSelectBuffer
    命令:从最近打开的笔记列表中选择。
  • :ZettelTitleSelected
    命令:使用 fzf 选择笔记并使用实际选择的文本作为标题。
  • :ZettelYankName
    命令:将当前 zettel 的格式化链接复制到寄存器。在正常模式下映射到
    T

有用的 Vimwiki 命令 ~

  • :VimwikiBacklinks
    命令:显示链接到当前页面的文件
  • :VimwikiCheckLinks
    - 显示没有其他文件链接的文件
heading

键盘映射(Mappings)

Vim-zettel
默认设置了一些映射。你可以禁用默认映射并定义自己的映射。更多细节见
g:zettel_default_mappings

  • 可视模式下的“z”命令:使用选定的文本作为笔记标题创建一个新的 wiki 文件; — [[ 插入模式下的命令:创建一个笔记的链接。使用 fzf 进行笔记搜索;
  • g[ 用于可视模式下的选择命令:创建一个到注释的链接,以选定的文本作为标题;
  • 正常模式下的 T 命令:将当前笔记文件名和标题作为 Vimwiki 链接;
  • 正常模式下的 gZ 命令:将光标下的文件路径替换为 Wiki 链接。

或者可以通过映射

ZettelNew
以提示输入笔记标题:

nnoremap <leader>zn :ZettelNew<space>
heading

变量(Variables)

g:zettel_options
变量对应于 g:vimwiki_list 变量。如果有多个 vimwiki,并且
g:vimwiki_list
变量中列出的第二个 wiki 是你的 zettelkasten,那么必须将
g:zettel_options
列表中的第一个 wiki 表示为一组空括号:

let g:zettel_options = [\ {}, \ { \ "front_matter" : [["tags", ""], ["type","note"]], \ "template" : "~/mytemplate.tpl" \ } \ ]

front_matter
包含要插入到新注释标题中的附加字段。这个的值应该是列表的列表,其中第一项包含键,第二项包含值。

第二项可以包含 funcref。配置后每次使用此

front_matter
选项时,都会执行该函数。可以用来插入当前的 Zettel ID,例如:

function! s:insert_id() if exists("g:zettel_current_id") return g:zettel_current_id else return "unnamed" endif endfunction let g:zettel_options = [{"front_matter" : [["tags" , ":hello:"], [ "id" , function("s:insert_id")]] }]

你可以通过将

disable_front_matter
选项设置为 0 以外的其他值来完全禁用前端显示的问题。

template
字段在 Vim-Zettel-Templates 中讨论。

默认情况下,Vim-Zettel 以 YYMMDD-HHMM 的形式创建文件名。可以使用 g:zettel_format 变量更改此格式。

strftime()
函数支持的任何日期和时间格式。

也可以使用其他格式字符串:

  • %title -- insert sanitized title
  • %raw_title -- insert raw title
  • %file_no -- sequentially number files in wiki
  • %file_alpha -- sequentially number files in wiki, but use characters instead of numbers
  • %random -- use random characters. Their number can be configured using
    g:zettel_random_chars
    option, eight is used by default.

若要要使用基于当前时间和注释标题的文件名,可以使用以下格式:

let g:zettel_format = "%y%m%d-%H%M-%title"

对于顺序命名的文件,请使用:

let g:zettel_format = "%file_no"

如果生成的文件名存在(若使用默认格式且在一分钟内同时创建了两个笔记时),则会在文件名中添加字母后缀(比如

200622-1114
200622- 1114a
)。 当您在一分钟内创建两个音符时。

Vim-Zettel 遵循 vimwiki 定义的

link_space_char
设置(参见
:h links_space_char
),这个选项允许你指定用于代替文件名的分隔符。

你可以使用 Vimwiki 变量

g:vimwiki_markdown_link_ext
来要求在 Vim-zettel 创建的链接中包含
.md
扩展名(例如使用
z
T
键)。

let g:vimwiki_markdown_link_ext = 1

如果未提供标题,则用于新 Zettel 文件名中的“%title”格式字符串的文本。

用于新 zettel 前端的日期元数据的日期格式。需要由

strftime()
函数支持。

For example:

let g:zettel_date_format = "%y/%m/%d"

可以通过将 g:zettel_default_mappings 变量设置为 0 来更改 Vim-Zettel 使用的默认映射,然后提供自己的键映射。下面的代码可以作为开始的模板。

let g:zettel_default_mappings = 0 " This is basically the same as the default configuration augroup filetype_vimwiki autocmd! autocmd FileType vimwiki imap <silent> [[ [[<esc><Plug>ZettelSearchMap autocmd FileType vimwiki nmap T <Plug>ZettelYankNameMap autocmd FileType vimwiki xmap z <Plug>ZettelNewSelectedMap autocmd FileType vimwiki nmap gZ <Plug>ZettelReplaceFileWithLink augroup END

Vim-Zettel 在搜索文件时默认使用 Silver Searcher(ag)。 g:zettel_fzf_command 可用于覆盖默认设置。

" command used for VimwikiSearch " default value is "ag". To use other command, like ripgrep, pass the " command line and options: let g:zettel_fzf_command = "rg --column --line-number --ignore-case --no-heading --color=always "

请注意,如果要使用 Ripgrep,则需要一定要添加

--column
选项。

用于

fzf
命令的选项。

let g:zettel_fzf_options = ['--exact', '--tiebreak=end']

用作生成的索引部分的文本。

let g:zettel_generated_index_title = "Generated Index"

生成生成的索引部分时要使用的标题等级。

let g:zettel_generated_index_title_level = 1

用作反向链接部分的文本。

let g:zettel_backlinks_title = "Backlinks"

生成反向链接部分时要使用的标题级别。

let g:zettel_backlinks_title_level = 1

用作未链接注释部分的文本。

let g:zettel_unlinked_notes_title = "Unlinked Notes"

生成未链接的注释部分时要使用的标题级别。

let g:zettel_unlinked_notes_title_level = 1

用作生成标签部分的文本。

let g:zettel_generated_tags_title = "Generated Tags"

生成已生成的标签部分时要使用的标题级别。

let g:zettel_generated_tags_title_level = 1

用于生成链接的格式。如果你对默认格式不满意,可以更改此变量。

let g:zettel_link_format="[%title](%link)"

%random
zettel 名称格式中使用的字符数。

ZettelSelectBuffer
中使用的格式。可用的变量是
%filename
%title
。注意,对于找不到标题的笔记,将使用文件名作为标题,文件名部分留空。

let g:zettel_bufflist_format = "%filename - %title
heading

模板(Templates)

可以使用模板填充具有基本结构的新笔记。可以使用 g:zettel_options 变量声明模板:

let g:zettel_options = [{"template" : "~/path/to/mytemplate.tpl"}]

模板样例:

= %title = Backlink: %backlink ---- %footer

以 % 开头部分表示可填充的便利店。支持的变量有:

  • %title - 新笔记的标题 - %id - 新笔记的文件名 - %backlink - 到父笔记的反向链接 - %date - 新笔记的日期和时间。格式基于
    g:zettel_date_format
    变量。 - %footer - 来自父笔记页脚的文本。页脚通过水平线 (----) 与正文分开。它可以包含一些笔记共享的信息。例如,关于出版物的注释可以共享该出版物的引用。

其他的还有所有在

front_matter
中设置的变量。

heading

相关包(Related Packages)

以下软件包也可以配合 Vimwiki 及 Vim-Zettel 一起使用:

  • Notational FZF - 带有预览窗口的快速搜索笔记。要在 Zettelkasten 中搜索,请将以下变量设置为 .vimrc 中 Zettelkasten 目录的路径:
let g:nv_search_paths = ['/path/to/zettelkasten/dir']
  • Vimwiki-sync - 自动提交 wiki 中的更改并将它们与外部 Git 存储库同步。