我创建了一个 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