Melhor maneira de inserir carimbo de data / hora no Vim?

90

O EditPad Lite possui um bom recurso ( CTRL- E, CTRL- I) que insere um carimbo de hora, por exemplo, "2008-09-11 10:34:53" em seu código.

Qual é a melhor forma de obter essa funcionalidade no Vim?

(Estou usando o Vim 6.1 em um servidor Linux via SSH. Na situação atual, vários de nós compartilhamos um login, portanto, não quero criar abreviações no diretório inicial se houver outra maneira integrada de obter um carimbo de data / hora. )

Edward Tanguay
fonte

Respostas:

87

http://kenno.wordpress.com/2006/08/03/vim-tip-insert-time-stamp/

Tentei, funciona no meu mac:

:r! date

produz:

Thu Sep 11 10:47:30 CEST 2008

Este:

:r! date "+\%Y-\%m-\%d \%H:\%M:\%S"

produz:

2008-09-11 10:50:56
Daren Thomas
fonte
1
Apenas uma pequena nota, o espaço não parece ser necessário - ": r! Date" também funciona.
Jon Bringhurst,
@AB, passando rapidamente por esta questão: stackoverflow.com/questions/15394572/… , parece que você pode escapar com uma barra invertida. Você pode tentar isso para mim?
Daren Thomas,
3
Funciona totalmente. Outras maneiras de escrever são :r!date "+\%F \%T"ou :r!date +\%F\ \%T.
chrisfargen
Fui colocar isso no meu vimrc ... aí percebi que já coloquei lá faz séculos. Funciona bem.
mgjk
Funciona como um encanto no meu fedora 31. Obrigado.
rchrd
114

Para que funcione em várias plataformas, basta colocar o seguinte em vimrc:

nmap <F3> i<C-R>=strftime("%Y-%m-%d %a %I:%M %p")<CR><Esc>
imap <F3> <C-R>=strftime("%Y-%m-%d %a %I:%M %p")<CR>

Agora você pode simplesmente pressionar F3 a qualquer momento dentro do Vi / Vim e você obterá um carimbo de data / hora, como 2016-01-25 Mo 12:44inserido no cursor.

Para uma descrição completa dos parâmetros disponíveis, verifique a documentação da função C strftime () .

Swaroop CH
fonte
existe um método para fazer isso em todo o sistema (no Linux)?
nilon
Existe um método para criar ou salvar um arquivo com este carimbo de data / hora como um nome de arquivo?
nilon
Obrigado, uma vez que F3 já é usado para outra coisa. I definido um comando personalizado no modo normal :Date, adicionando a seguinte para o meu ~/.vimrcarquivo de configuração: command! Date put =strftime('%Y-%m-%d'). Ele insere a data em uma nova linha. não consegui fazer uma versão sem nova linha.
Paul Rougieux,
13

Por que todo mundo está usando :r!? Encontre uma linha em branco e digite !!dateno modo de comando. Salve um pressionamento de tecla!

[nb Isso canalizará a linha atual em stdin e, em seguida, substituirá a linha pela saída do comando; daí a parte "encontre uma linha em branco".]

luser droog
fonte
9

Como uma extensão da resposta de @Swaroop CH,

^R=strftime("%FT%T%z")

é uma forma mais compacta que também imprimirá o fuso horário (na verdade, a diferença do UTC, em uma forma compatível com ISO-8601).

Se você preferir usar uma ferramenta externa por algum motivo,

:r !date --rfc-3339=s

fornecerá um carimbo de data / hora compatível com RFC-3339 completo; use em nsvez de spara a precisão de Spock, e canalize tr ' ' Tpara usar um T maiúsculo em vez de um espaço entre data e hora.

Além disso, você pode achar útil saber que

:source somefile.vim

irá ler os comandos de somefile.vim: desta forma, você pode configurar um conjunto personalizado de mapeamentos, etc., e então carregá-lo quando estiver usando o vim nessa conta.

intuído
fonte
strftime () é uma função do vim. Você também pode usar:put=strftime(""%FT%T%z")
Antonios Hadjigeorgalis
Na minha máquina (Windows 7, gvim 8.0.69), os especificadores% F e% T não funcionaram, mas% Y-% m-% d e% H:% M:% S sim. (De acordo com cplusplus.com/reference/ctime/strftime,% F e% T vieram com uma versão atualizada do strftime para C99.) Além disso, o especificador% z produziu uma descrição prolixo do fuso horário.
Ed Wynn de
8

: r! encontro

Você pode então adicionar o formato ao comando de data (data de manual) se quiser exatamente o mesmo formato e adicioná-lo como um alias do vim também

: r! data + "\% Y - \% m - \% d \% H: \% M: \% S"

Isso produz o formato que você mostrou em seu exemplo (data no shell não usa \%, mas apenas%, o vim substitui% pelo nome do arquivo atual, então você precisa escapar dele).

Você pode adicionar um mapa em seu .vimrc para que ele coloque o comando automaticamente, por exemplo, cada vez que você pressiona F3:

:map <F3> :r! date +"\%Y-\%m-\%d \%H:\%M:\%S"<cr>

(Editado acima :)) (Editar: alterar parte do texto para código, de modo que

<F3> 

pode ser exibido)

Vinko Vrsalovic
fonte
4

Para um carimbo de data / hora Unix:

: r! data + \% s

Você também pode mapear este comando para uma tecla (por exemplo, F12) no VIM se você o usa muito:

Coloque isso em seu .vimrc:


map  <F12> :r! date +\%s<cr>
fijter
fonte
4

Do Vim Wikia .

Eu uso isso em vez de mover minha mão para apertar uma tecla F:

:iab <expr> tds strftime("%F %b %T")

Agora no modo Inserir basta digitar tds e assim que clico na barra de espaço ou retorno, obtenho a data e continuo digitando.

Eu coloquei %blá, porque gosto de ver o nome do mês. A %Fme dá algo para classificar por data. Eu posso mudar isso para %Y%m%dque não haja caracteres entre as unidades.

user3449771
fonte
1

Unix, use:

!!date

Windows, use:

!!date /t

Mais detalhes: veja Insert_current_date_or_time

pirata de byte
fonte
0

Outra forma rápida não incluída nas respostas anteriores: digite-

!!encontro

lukmac
fonte
0

Eu queria um comando personalizado :Date(não um mapeamento de teclas) para inserir a data na posição atual do cursor.

Infelizmente, comandos diretos como r!dateresultam em uma nova linha. Então, finalmente, descobri o seguinte:

command Date execute "normal i<C-R>=strftime('%F %T')<CR><ESC>"

que adiciona a string de data / hora na posição do cursor sem adicionar nenhuma nova linha (altere para normal aadicionar após a posição do cursor).

luator
fonte
Enquanto isso está funcionando, o comando parece excessivamente complicado para mim e sinto que deveria haver uma maneira melhor de fazer isso. Se você conhece um, por favor me avise :)
luator