Como posso construir um mapeamento de teclado vim que insira a data atual?

3

Estou tentando criar um keymapping vim que iniciará a criação de um novo arquivo, com o nome do arquivo prefixado com a data atual, esperando que eu termine de digitar o nome do arquivo.

Coloque mais precisamente, eu quero acertar <Leader>n e ter o vim entrando para mim na linha de comando:

:new 2014-08-05- ... esperando que eu complete o nome do arquivo e clique em <CR> .

Como posso fazer isso? Eu tentei isso, mas não fez exatamente o que eu esperava, pois apenas ecoou a data. Como posso obter o vim para inserir dinamicamente caracteres na linha de comando? Estou sentindo falta de algo simples?

function! NewNotesFile()
    echon ":new " . strftime("%F")
endfunction

nnoremap <Leader>n :call NewNotesFile()<CR>
    
por Andrew Ferrier 05.08.2014 / 09:28

2 respostas

4

Existem duas maneiras. Você pode simplesmente inserir o resultado de uma expressão na linha de comando via :help c_CTRL-R :

:nnoremap <Leader>n :new <C-r>=strftime('%F')<CR>

Esse mapeamento reflete como você faria isso interativamente. Como alternativa, você pode avaliar o lado direito do mapeamento por meio de :help map-expr :

:nnoremap <expr> <Leader>n ':new ' . strftime('%F')
    
por 05.08.2014 / 10:25
3

Usando c_CTRL-\_e (é uma tag de ajuda, por isso, veja :h c_CTRL-\_e se algo parecer incerto), por exemplo:

nnoremap <Leader>n :<C-\>e"new " . strftime("%F")<CR>
    
por 05.08.2014 / 10:22