Função VIM para criar um novo arquivo com um cabeçalho incluindo o nome do arquivo e um timestamp

1

Eu criei uma função VIM que gera um novo arquivo com base nos argumentos passados para ele e em algumas variáveis zsh que eu configurei.

É possível estender essa função para inserir um cabeçalho nesse arquivo imediatamente à medida que ele é criado? Estou tentando inserir o nome do arquivo na linha 1, um registro de data e hora na linha 2 e "Instrutor:" na linha 3.

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

1 resposta

1

Sua função pode se tornar algo assim:

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

A primeira linha é sua. Em seguida, cria 3 variáveis:

  • O primeiro usa bufname("%") para obter o nome do buffer atual ( :h bufname() ).
  • O segundo usa a função strftime para obter a hora atual. Cuidado, é uma chamada direta para a função C, portanto, pode não ser portátil, consulte o documento para obter mais detalhes :h strftime() (É claro que você pode alterar o formato do timestamp cf. doc)
  • O terceiro simplesmente contém algum texto.

As 3 últimas linhas usam a função put ( :h put ):

  • O ! é usado para inserir antes da linha atual (do contrário, quando você inicia na primeira linha e put insere após a linha atual, você obtém uma primeira linha vazia).
  • O = é usado para chamar o registro de expressão, permitindo obter o conteúdo das variáveis.

Bônus Você pode tornar a função mais atraente usando uma lista e iterando por ela:

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
    
por 11.09.2015 / 06:47

Tags