La meilleure façon d'insérer un horodatage dans Vim?

90

EditPad Lite a une fonctionnalité intéressante ( CTRL- E, CTRL- I) qui insère un horodatage, par exemple "2008-09-11 10:34:53" dans votre code.

Quelle est la meilleure façon d'obtenir cette fonctionnalité dans Vim?

(J'utilise Vim 6.1 sur un serveur Linux via SSH. Dans la situation actuelle, nous sommes nombreux à partager un login, donc je ne veux pas créer d'abréviations dans le répertoire personnel s'il existe un autre moyen intégré pour obtenir un horodatage. )

Edward Tanguay
la source

Réponses:

87

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

Je l'ai essayé, cela fonctionne sur mon mac:

:r! date

produit:

Thu Sep 11 10:47:30 CEST 2008

Ce:

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

produit:

2008-09-11 10:50:56
Daren Thomas
la source
1
Juste une petite note, l'espace ne semble pas nécessaire - ": r! Date" fonctionne également.
Jon Bringhurst
@AB, parcourant cette question: stackoverflow.com/questions/15394572/… , il semble que vous pouvez vous échapper avec une barre oblique inverse. Pouvez-vous essayer ça pour moi?
Daren Thomas
3
Fonctionne totalement. D'autres façons de l'écrire sont :r!date "+\%F \%T"ou :r!date +\%F\ \%T.
chrisfargen
Je suis allé mettre cela dans mon vimrc ... puis j'ai remarqué que je l'avais déjà mis il y a longtemps. Fonctionne très bien.
mgjk
Fonctionne comme un charme sur mon fedora 31. Merci.
rchrd
114

Pour le faire fonctionner multi-plateforme, il suffit de mettre ce qui suit dans votre 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>

Maintenant, vous pouvez simplement appuyer sur F3 à tout moment dans Vi / Vim et vous obtiendrez un horodatage comme 2016-01-25 Mo 12:44inséré au niveau du curseur.

Pour une description complète des paramètres disponibles, consultez la documentation de la fonction C strftime () .

Swaroop CH
la source
existe-t-il une méthode pour faire ce système à l'échelle du système (sous Linux)?
nilon le
Existe-t-il une méthode pour créer ou enregistrer un fichier avec cet horodatage comme nom de fichier?
nilon le
Merci, puisque F3 est déjà utilisé pour autre chose. Je définissais une commande personnalisée en mode normal :Dateen ajoutant ce qui suit à mon ~/.vimrcfichier de configuration: command! Date put =strftime('%Y-%m-%d'). Il insère la date sur une nouvelle ligne. n'a pas réussi à faire une version sans nouvelle ligne.
Paul Rougieux le
13

Pourquoi tout le monde utilise- :r!t-il? Trouvez une ligne vide et tapez à !!datepartir du mode commande. Enregistrez une frappe!

[nb Ceci conduira la ligne courante dans stdin, puis remplacera la ligne par la sortie de la commande; d'où la partie "trouver une ligne vide".]

Luser droog
la source
9

En prolongement de la réponse de @Swaroop CH,

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

est une forme plus compacte qui imprimera également le fuseau horaire (en fait la différence avec UTC, sous une forme conforme à la norme ISO-8601).

Si vous préférez utiliser un outil externe pour une raison quelconque,

:r !date --rfc-3339=s

vous donnera un horodatage complet conforme à la RFC-3339; utilisez nsau lieu de spour une précision semblable à Spock, et indiquez tr ' ' Tun T majuscule au lieu d'un espace entre la date et l'heure.

Vous trouverez peut-être également utile de savoir que

:source somefile.vim

lira les commandes de somefile.vim: de cette façon, vous pouvez configurer un ensemble personnalisé de mappages, etc., puis le charger lorsque vous utilisez vim sur ce compte.

intuité
la source
strftime () est une fonction dans vim. Vous pouvez également utiliser:put=strftime(""%FT%T%z")
Antonios Hadjigeorgalis
Sur ma machine (Windows 7, gvim 8.0.69), les spécificateurs% F et% T ne fonctionnaient pas, mais% Y-% m-% d et% H:% M:% S l'ont fait. (Selon cplusplus.com/reference/ctime/strftime,% F et% T étaient livrés avec une version mise à jour de strftime pour C99.) De plus, le spécificateur% z a produit une description verbeuse du fuseau horaire.
Ed Wynn
8

: r! Date

Vous pouvez ensuite ajouter un format à la commande date (man date) si vous voulez exactement le même format et l'ajouter également en tant qu'alias vim

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

Cela produit le format que vous avez montré dans votre exemple (la date dans le shell n'utilise pas \%, mais seulement%, vim remplace% par le nom du fichier actuel, vous devez donc l'échapper).

Vous pouvez ajouter une carte dans votre .vimrc pour qu'il place automatiquement la commande, par exemple, chaque fois que vous appuyez sur F3:

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

(Modifié ci-dessus :)) (Edit: changez la partie de texte en code, de sorte que

<F3> 

peut être affiché)

Vinko Vrsalovic
la source
4

Pour un horodatage unix:

: r! date + \% s

Vous pouvez également mapper cette commande à une clé (par exemple F12) dans VIM si vous l'utilisez beaucoup:

Mettez ceci dans votre .vimrc:


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

À partir de Vim Wikia .

J'utilise ceci au lieu d'avoir à déplacer ma main pour appuyer sur une touche F:

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

Maintenant, en mode Insertion, il suffit de taper tds et dès que j'appuie sur la barre d'espace ou que je reviens, j'obtiens la date et je continue à taper.

J'ai mis le %blà-dedans, car j'aime voir le nom du mois. Le %Fme donne quelque chose à trier par date. Je pourrais changer cela pour %Y%m%dqu'il n'y ait pas de caractères entre les unités.

user3449771
la source
1

Unix, utilisez:

!!date

Windows, utilisez:

!!date /t

Plus de détails: voir Insert_current_date_or_time

octet-pirate
la source
0

Un autre moyen rapide non inclus dans les réponses précédentes: tapez-

!!Date

Lukmac
la source
0

Je voulais une commande personnalisée :Date(pas un mappage de touches) pour insérer la date à la position actuelle du curseur.

Malheureusement, des commandes simples comme r!dateentraînent une nouvelle ligne. Alors finalement, j'ai trouvé ce qui suit:

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

qui ajoute la chaîne de date / heure à la position du curseur sans ajouter de nouvelle ligne (changement pour normal aajouter après la position du curseur).

luator
la source
Pendant que cela fonctionne, la commande me semble trop compliquée et je pense qu'il devrait y avoir une meilleure façon de le faire. Si vous en connaissez un, faites-le moi savoir :)
luator