VIM 函数用于创建新文件,其标头包括文件名和时间戳

VIM 函数用于创建新文件,其标头包括文件名和时间戳

我创建了一个 VIM 函数,它根据传递给它的参数和我设置的一些 zsh 变量生成一个新文件。

是否可以扩展此函数以在创建文件时立即将标头插入到该文件中?我尝试在第 1 行插入文件名,在第 2 行插入时间戳,在第 3 行插入“讲师:”。

fu! CreateNote(subject, title)
   exe "e! " . fnameescape($NOTES_DIR . "/MS" . g:year . "/" . a:subject
   . "/" . a:title . ".txt")
endfunction

答案1

你的函数可能会变成这样:

function! CreateNote(subject, title)
    exe "e! " . fnameescape($NOTES_DIR . "/MS" . g:year . "/" . a:subject . "/" . a:title . ".txt")

   let l:filename=bufname("%")
   let l:timestap=strftime("%c")
   let l:text="Instructor: "

   put! =l:filename
   put! =l:timestap
   put! =l:text

endfunction

第一行是你的。然后它创建 3 个变量:

  • 第一个使用bufname("%")获取当前缓冲区的名称(:h bufname())。
  • 第二个使用该功能strftime来获取当前时间。请注意,它是对 C 函数的直接调用,因此可能不可移植,请参阅文档了解更多详细信息:h strftime()(您当然可以更改时间戳的格式参见doc)
  • 第三个仅包含一些文本。

然后最后 3 行使用该函数put(:h put):

  • 用于!在当前行之前插入(否则当您从第一行开始并put在当前行之后插入时,您将得到一个空的第一行)。
  • 用于=调用表达式寄存器来获取变量的内容。

奖金您可以通过使用列表并迭代它来使函数更性感:

function! CreateNote(subject, title)
    exe "e! " . fnameescape($NOTES_DIR . "/MS" . g:year . "/" . a:subject . "/" . a:title . ".txt")

    let l:header=[ bufname("%"), strftime("%c"), "Instructor: " ]

    for l:line in l:header
        put! =l:line
    endfor
endfunction

相关内容