Il modo migliore per inserire il timestamp in Vim?


90

EditPad Lite ha una bella funzione ( CTRL- E, CTRL- I) che inserisce un timestamp, ad esempio "2008-09-11 10:34:53" nel codice.

Qual è il modo migliore per ottenere questa funzionalità in Vim?

(Sto usando Vim 6.1 su un server Linux tramite SSH. Nella situazione attuale molti di noi condividono un login quindi non voglio creare abbreviazioni nella directory home se c'è un altro modo integrato per ottenere un timestamp. )

Risposte:


87

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

Provato, funziona sul mio Mac:

:r! date

produce:

Thu Sep 11 10:47:30 CEST 2008

Questo:

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

produce:

2008-09-11 10:50:56

1
Solo una piccola nota, lo spazio non sembra essere necessario - anche ": r! Date" funziona.
Jon Bringhurst

@AB, sfogliando questa domanda: stackoverflow.com/questions/15394572/… , sembra che tu possa scappare con una barra rovesciata. Puoi provarlo per me?
Daren Thomas

3
Funziona totalmente. Altri modi per scriverlo sono :r!date "+\%F \%T"o :r!date +\%F\ \%T.
chrisfargen

Sono andato a metterlo nel mio vimrc ... poi ho notato che l'ho già messo lì molto tempo fa. Funziona alla grande.
mgjk

Funziona a meraviglia sul mio fedora 31. Grazie.
rchrd

114

Per farlo funzionare su più piattaforme, inserisci quanto segue nel tuo 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>

Ora puoi semplicemente premere F3 in qualsiasi momento all'interno di Vi / Vim e otterrai un timestamp come 2016-01-25 Mo 12:44inserito nel cursore.

Per una descrizione completa dei parametri disponibili controllare la documentazione della funzione C strftime () .


c'è un metodo per fare questo a livello di sistema (in Linux)?
zero

Esiste un metodo per creare o salvare un file con questo timestamp come nome file?
zero

Grazie, poiché F3 è già utilizzato per qualcos'altro. Ho definito un comando personalizzato in modalità normale :Dateaggiungendo la seguente al mio ~/.vimrcfile di configurazione: command! Date put =strftime('%Y-%m-%d'). Inserisce la data su una nuova riga. non è riuscito a fare una versione senza newline.
Paul Rougieux

13

Perché tutti usano :r!? Trova una riga vuota e digita !!datedalla modalità di comando. Salva una sequenza di tasti!

[nb Questo reindirizzerà la riga corrente in stdin, quindi sostituirà la riga con l'output del comando; da qui la parte "trova una riga vuota".]


9

Come estensione alla risposta di @Swaroop CH,

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

è una forma più compatta che stamperà anche il fuso orario (in realtà la differenza dall'UTC, in una forma conforme a ISO-8601).

Se preferisci utilizzare uno strumento esterno per qualche motivo,

:r !date --rfc-3339=s

ti fornirà un timestamp completo conforme a RFC-3339; usa nsinvece di sper la precisione di Spock, e pipe attraverso tr ' ' Tper usare una T maiuscola invece di uno spazio tra data e ora.

Inoltre potresti trovare utile saperlo

:source somefile.vim

leggerà i comandi da somefile.vim: in questo modo potresti impostare un set personalizzato di mappature, ecc., e quindi caricarlo quando usi vim su quell'account.


strftime () è una funzione all'interno di vim. Puoi anche usare:put=strftime(""%FT%T%z")
Antonios Hadjigeorgalis

Sulla mia macchina (Windows 7, gvim 8.0.69), gli specificatori% F e% T non funzionavano, ma% Y-% m-% d e% H:% M:% S sì. (Secondo cplusplus.com/reference/ctime/strftime,% F e% T avevano una versione aggiornata di strftime per C99.) Inoltre, l'identificatore% z ha prodotto una descrizione verbosa del fuso orario.
Ed Wynn

8

: r! Data

Puoi quindi aggiungere il formato al comando date (man date) se vuoi lo stesso identico formato e aggiungerlo anche come alias vim

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

Questo produce il formato che hai mostrato nel tuo esempio (la data nella shell non usa \%, ma solo%, vim sostituisce% con il nome del file corrente, quindi devi uscire da esso).

Puoi aggiungere una mappa nel tuo .vimrc in modo che inserisca automaticamente il comando, ad esempio, ogni volta che premi F3:

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

(Modificato da sopra :)) (Modifica: cambia la parte di testo in codice, in modo che

<F3> 

può essere visualizzato)


4

Per un timestamp unix:

: r! data + \% s

Puoi anche mappare questo comando a un tasto (ad esempio F12) in VIM se lo usi molto:

Metti questo nel tuo .vimrc:


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

4

Da Vim Wikia .

Lo uso invece di dover muovere la mano per premere un tasto F:

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

Ora in modalità di inserimento digita semplicemente tds e non appena premo la barra spaziatrice o ritorno, ottengo la data e continuo a digitare.

L'ho inserito %bperché mi piace vedere il nome del mese. Il %Fmi dà qualcosa da ordinare per data. Potrei cambiarlo in %Y%m%dcosì non ci sono personaggi tra le unità.



0

Un altro modo rapido non incluso nelle risposte precedenti: digita-

!!Data


0

Volevo un comando personalizzato :Date(non una mappatura dei tasti) per inserire la data nella posizione corrente del cursore.

Sfortunatamente comandi semplici come il r!daterisultato in una nuova riga. Quindi alla fine ho pensato a quanto segue:

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

che aggiunge la stringa di data / ora nella posizione del cursore senza aggiungere alcuna nuova riga (modifica per normal aaggiungere dopo la posizione del cursore).


Mentre funziona, il comando mi sembra eccessivamente complicato e sento che dovrebbe esserci un modo migliore per farlo. Se ne conosci uno, fammelo sapere :)
luator
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.