Vim:将自动字母和/或数字索引添加到当前文件名?

Vim:将自动字母和/或数字索引添加到当前文件名?,vim,numbers,sequence,Vim,Numbers,Sequence,我想实现一个松散版本的 在维姆。他的方法的核心是注释片段,它们继续当前的 记下或从中抽离,介绍一个稍微不同的主题或 概念。在注释名称中,字母表示分支和数字 表示延续。像这样: note100 note101 note101a # branches off from note100 (related topic) note101b # also branches off from note100 (related topic) note1

我想实现一个松散版本的 在维姆。他的方法的核心是注释片段,它们继续当前的 记下或从中抽离,介绍一个稍微不同的主题或 概念。在注释名称中,字母表示分支和数字 表示延续。像这样:

note100
note101
    note101a        # branches off from note100 (related topic)
    note101b        # also branches off from note100 (related topic)
        note101b01  # continues note101b (same topic)
        note101b02  # also continues note101b (same topic)
    note101c
note102
为了在Vim中实现这一点,我需要一个新文件 自动枚举为“延续”或 当前缓冲区中注释的“分支”。作为在Vimscript中执行第一个“真正”步骤的非编码人员,这就是我使用分支注释函数的地方:

function! ZettelkastenNewBranchingNote()
    let b:current_note_name = expand('%:t:r')
    let b:new_branching_note = call(BranchingFunctionThatReturnsNewNoteName)
    silent execute 'edit' b:new_branching_note
    echomsg 'New branching note ' b:new_branching_note 'created.'
endfunction
返回snownotame()的
分支函数应为
b:当前注释名称
并用自动字母顺序(!)扩展它 索引(按字母顺序向上计数)。我怎样才能做到这一点

还有,对于我的新的连续音符函数:我怎么能用数字 从当前文件名的最后一个数字部分向上计数?(例如
100a01>100a02

谢谢你的建议

(有点关联, 建议使用Nexus插件,但我更愿意保留我的脚本
独立的。)

您提供了大量的上下文(这很好),但对所需的算法却很了解。在我看来,它是这样的:如果当前文件以字母结尾,则增加它,否则(它是一个数字),添加一个
a
以开始字母顺序

使用正则表达式在Vim中执行检查
\a
[a-Za-z]
的缩写形式(您也可以编写
[[:alpha:][]
;是的,它非常灵活),并且
$
将其固定在名称的末尾:

if b:current_note_name =~ '\a$'
    ...
使用
matchstr()
提取最后一个字符

要“增加”字母字符,请先将其转换为数字,再增加,然后再返回:

    let newAlpha = nr2char(char2nr(lastAlpha) + 1)
要替换,请再次使用相同的regexp使用
substitute()

    let b:new_branching_note = substitute(b:current_note_name, '\a$', newAlpha, '')
附加很简单:

else
    let b:new_branching_note = b:current_note_name . 'a'
endif

非常感谢,也感谢您的解释;这些对我的学习过程很有帮助。(我特别喜欢nr2char内置文件-非常好!)这个解决方案确实正确地创建了文件,但我也得到了“E121:Undefined variable:b:new\u分支\u note”。为什么?变量还没有定义(在缓冲区中)。您可能需要在某处进行检查:
if!存在('b:new\u note
)…`谢谢!使用
让b:current\u note\u name=存在('b:current\u note\u name')解决问题?当前注释名称:展开('%:t:r')
。我还必须将一些变量类型从
b:
修改为
s:
else
    let b:new_branching_note = b:current_note_name . 'a'
endif