我没有时间再维护这个项目了。如果您有兴趣接手,请在 GitHub issues 中与我联系。
放松记录信息的心理障碍。刮掉阻碍其恢复的习俗牙垢。
--- 符号速度主页
Notational Velocity 是一款笔记应用程序,其中搜索笔记和创建笔记是相同的操作。
您搜索一个查询,如果没有注释匹配,它会创建一个以该查询作为标题的新注释。
请参阅以下 GIF 或观看此 asciinema:
" with vim-plug
Plug 'https://github.com/alok/notational-fzf-vim'
阅读CHANGELOG.md
。
Vim 非常适合写作。但它并没有针对笔记进行优化,您经常会创建大量小笔记,并经常在与您正在工作的目录不同的目录中更改较大的笔记。多年来,每当我必须进行认真的编辑时,我都会使用 nvALT ,我会在 Vim 中打开该文件。
但有关 nvALT 的一些事情困扰着我。
它不适用于大型文本文件,打开它们会导致它严重滞后。
我无法使用拆分
我的大部分工作都是在 Vim 中完成的,为什么还要打开另一个窗口,因为它的编辑功能较差,浪费了宝贵的屏幕空间。抱歉 Brett,但 nvALT 无法匹配 Vim 的编辑速度。
我也不同意符号速度哲学的某些部分。
像 vim-pad 这样的插件也不适合我,因为:
README.md
。当 Junegunn 创建fzf
时,我意识到我可以在 Vim 中拥有这一切。
该插件允许您定义要搜索的目录列表。列表中的第一个目录用作主目录,除非您设置g:nv_main_directory
。如果您在输入一些单词后按control-x
,它将使用这些单词作为文件名在主目录中创建一个文件。然后它将以垂直分割方式打开该文件。如果该文件已经存在,请不用担心,它不会覆盖它。该插件在任何时候都不会修改您的文件。它只能读取、打开和创建它们。
您可以定义相对链接,因此添加./docs
和./notes
就可以了。请记住,它是相对于您当前的工作目录的(如 Vim 所解释的)。
rg
是快速搜索所必需的。
fzf
。
fzf
Vim 插件。安装fzf
自带的 Vim 插件,如果你使用 vim-plug 的话可以这样做。
Plug 'junegunn/fzf', { 'dir': '~/.fzf', 'do': './install --all' }
Python 3.5 或更高版本,用于预览窗口和文件路径缩短。
您必须定义要搜索的目录或文件列表(全部必须是字符串)。此设置名为g:nv_search_paths
。
请记住,这些可以是相对链接。
" example
let g:nv_search_paths = ['~/wiki', '~/writing', '~/code', 'docs.md' , './notes.md']
该插件将搜索和文件创建结合在一起。它定义了一个命令:NV
,它可以接受 0 个或多个参数,这些参数被解释为正则表达式。
输入:NV
或将其绑定到映射以显示模糊搜索菜单。输入您的搜索词,它会模糊搜索它们。在命令中添加感叹号( :NV!
),将全屏运行它。
您可以输入:NV
查看所有结果,然后使用 FZF 过滤它们。您可以输入:NV python
将初始搜索限制为包含短语python
行。 :NV [0-9] [0-9]
将查找所有由空格分隔的数字。你知道,正则表达式。
它不会以完全模糊的方式进行搜索,因为这对于散文来说不太有用。它会查找完整的单词,但它们不必彼此相邻,只需在同一行即可。您可以使用箭头键或cp
和cn
滚动搜索结果,然后按以下键之一打开文件:
请注意,以下选项可以自定义。
cx
:使用搜索字符串作为文件名并以垂直分割打开。cv
:垂直分割打开cs
:水平分割打开ct
:在新选项卡中打开cy
: 提取选定的文件名<Enter>
: 打开当前缓冲区中突出显示的搜索结果所选文件周围的线条将在预览窗口中可见。
这个插件只定义了一个命令:NV
,如果你想要它的映射,你可以自己定义它。默认情况下故意不这样做。您应该使用最适合您的映射。
例如,
nnoremap <silent> <c-s> :NV<CR>
您可以通过设置g:nv_use_short_pathnames = 0
显示完整路径。
您可以通过按alt-p
来切换显示预览窗口。这在较小的屏幕上很方便。如果您不想默认显示预览,请设置g:nv_show_preview = 0
。
" String. Set to '' (the empty string) if you don't want an extension appended by default.
" Don't forget the dot, unless you don't want one.
let g:nv_default_extension = '.md'
" String. Default is first directory found in `g:nv_search_paths`. Error thrown
"if no directory found and g:nv_main_directory is not specified
"let g:nv_main_directory = g:nv_main_directory or (first directory in g:nv_search_paths)
" Dictionary with string keys and values. Must be in the form 'ctrl-KEY':
" 'command' or 'alt-KEY' : 'command'. See examples below.
let g:nv_keymap = {
'ctrl-s': 'split ',
'ctrl-v': 'vertical split ',
'ctrl-t': 'tabedit ',
})
" String. Must be in the form 'ctrl-KEY' or 'alt-KEY'
let g:nv_create_note_key = 'ctrl-x'
" String. Controls how new note window is created.
let g:nv_create_note_window = 'vertical split'
" Boolean. Show preview. Set by default. Pressing Alt-p in FZF will toggle this for the current search.
let g:nv_show_preview = 1
" Boolean. Respect .*ignore files in or above nv_search_paths. Set by default.
let g:nv_use_ignore_files = 1
" Boolean. Include hidden files and folders in search. Disabled by default.
let g:nv_include_hidden = 0
" Boolean. Wrap text in preview window.
let g:nv_wrap_preview_text = 1
" String. Width of window as a percentage of screen's width.
let g:nv_window_width = '40%'
" String. Determines where the window is. Valid options are: 'right', 'left', 'up', 'down'.
let g:nv_window_direction = 'down'
" String. Command to open the window (e.g. `vertical` `aboveleft` `30new` `call my_function()`).
let g:nv_window_command = 'call my_function()'
" Float. Width of preview window as a percentage of screen's width. 50% by default.
let g:nv_preview_width = 50
" String. Determines where the preview window is. Valid options are: 'right', 'left', 'up', 'down'.
let g:nv_preview_direction = 'right'
" String. Yanks the selected filenames to the default register.
let g:nv_yank_key = 'ctrl-y'
" String. Separator used between yanked filenames.
let g:nv_yank_separator = "n"
" Boolean. If set, will truncate each path element to a single character. If
" you have colons in your pathname, this will fail. Set by default.
let g:nv_use_short_pathnames = 1
"List of Strings. Shell glob patterns. Ignore all filenames that match any of
" the patterns.
let g:nv_ignore_pattern = ['summarize-*', 'misc*']
" List of Strings. Key mappings like above in case you want to define your own
" handler function. Most users won't want to set this to anything.
let g:nv_expect_keys = []
如果bat
在 PATH 中,则将使用它。如果已设置,它将使用$BAT_THEME
。
您还可以定义自己的处理函数,以防您不喜欢此插件处理输入的方式,但喜欢它包装其他所有内容的方式。它必须被称为NV_note_handler
。
~/notes
和~/wiki
这样您的笔记只需一键绑定即可。./notes
、 ./doc
等相关链接添加到g:nv_search_paths
中,以便您始终可以查看/更新当前项目的文档并保持最新的个人笔记。 引用斯劳德的话,
Notational Velocity 目前缺乏多数据库支持的原因是,将笔记存储在单独的数据库中将 1) 需要基于类别/文件夹的组织者强加给用户的相同类型的决策(例如,“此笔记是否有效”) -特定的还是特定于家庭的?”),以及 2)最终要求用户对正在使用的每个数据库重复每次搜索,从而破坏了即时搜索的目的。
通过提供默认目录,我们为第一个问题提供了(一个)修复。
通过同时搜索整个目录集,我们处理第二个。
它还处理多个数据库的符号速度问题。 UNIX 不允许在同一文件夹中出现重复的文件名,但父文件夹通常会提供上下文,例如workout/TODO.md
和coding/TODO.md
中。
该插件尝试将记笔记的操作抽象化到您记下的所有笔记中,并优先考虑一个主笔记目录。
总是受到欢迎。如果您有任何想法或问题,请告诉我,我会尽力解决。并非所有内容都会被实现,但如果它们符合这个插件的理念或者看起来确实有用,我会尽力而为。
阿帕奇2