Der beste Weg, um einen Zeitstempel in Vim einzufügen?


90

EditPad Lite hat eine nette Funktion ( CTRL- E, CTRL- I), die einen Zeitstempel, z. B. "2008-09-11 10:34:53", in Ihren Code einfügt.

Was ist der beste Weg, um diese Funktionalität in Vim zu erhalten?

(Ich verwende Vim 6.1 auf einem Linux-Server über SSH. In der aktuellen Situation teilen sich einige von uns ein Login, sodass ich keine Abkürzungen im Home-Verzeichnis erstellen möchte, wenn es eine andere integrierte Möglichkeit gibt, einen Zeitstempel zu erhalten. )

Antworten:


87

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

Versuchte es, es funktioniert auf meinem Mac:

:r! date

produziert:

Thu Sep 11 10:47:30 CEST 2008

Dies:

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

produziert:

2008-09-11 10:50:56

1
Nur eine kleine Anmerkung, der Platz scheint nicht notwendig zu sein - ": r! Date" funktioniert auch.
Jon Bringhurst

@AB, überfliegen Sie diese Frage: stackoverflow.com/questions/15394572/… , es scheint, dass Sie mit einem Backslash entkommen können. Kannst du das für mich versuchen?
Daren Thomas

3
Funktioniert total. Andere Möglichkeiten, es zu schreiben, sind :r!date "+\%F \%T"oder :r!date +\%F\ \%T.
Chrisfargen

Ging das in mein vimrc ... dann bemerkte ich, dass ich es schon vor Ewigkeiten dort hingelegt hatte. Funktioniert super.
mgjk

Funktioniert wie ein Zauber auf meinem Fedora 31. Danke.
6.

114

Damit es plattformübergreifend funktioniert, geben Sie einfach Folgendes in Ihre Datei ein 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>

Jetzt können Sie in Vi / Vim jederzeit F3 drücken und erhalten einen Zeitstempel wie 2016-01-25 Mo 12:44am Cursor eingefügt.

Eine vollständige Beschreibung der verfügbaren Parameter finden Sie in der Dokumentation der C-Funktion strftime () .


Gibt es eine Methode, um dies systemweit (unter Linux) durchzuführen?
Nilon

Gibt es eine Methode zum Erstellen oder Speichern einer Datei mit diesem Zeitstempel als Dateinamen?
Nilon

13

Warum benutzt jeder :r!? Suchen Sie eine leere Zeile und geben Sie sie im !!dateBefehlsmodus ein. Speichern Sie einen Tastendruck!

[nb Dies leitet die aktuelle Zeile in stdin weiter und ersetzt dann die Zeile durch die Befehlsausgabe. daher der Teil "Finde eine leere Zeile".]


9

Als Erweiterung der Antwort von @Swaroop CH

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

ist ein kompakteres Formular, das auch die Zeitzone druckt (tatsächlich der Unterschied zu UTC in einem ISO-8601-kompatiblen Formular).

Wenn Sie aus irgendeinem Grund lieber ein externes Tool verwenden,

:r !date --rfc-3339=s

Sie erhalten einen vollständigen RFC-3339-kompatiblen Zeitstempel. Verwenden Sie nsanstelle von sfür Spock-ähnliche Präzision und leiten Sie tr ' ' Tein großes T anstelle eines Leerzeichens zwischen Datum und Uhrzeit durch.

Vielleicht finden Sie es auch nützlich, das zu wissen

:source somefile.vim

liest Befehle ein von somefile.vim: Auf diese Weise können Sie einen benutzerdefinierten Satz von Zuordnungen usw. einrichten und ihn dann laden, wenn Sie vim für dieses Konto verwenden.


strftime () ist eine Funktion in vim. Sie können auch verwenden:put=strftime(""%FT%T%z")
Antonios Hadjigeorgalis

Auf meinem Computer (Windows 7, gvim 8.0.69) funktionierten die Bezeichner% F und% T nicht,% Y-% m-% d und% H:% M:% S jedoch. (Laut cplusplus.com/reference/ctime/strftime wurden% F und% T mit einer aktualisierten Version von strftime für C99 geliefert.) Außerdem gab der% z-Bezeichner eine wortreiche Beschreibung der Zeitzone an.
Ed Wynn

8

: r! Datum

Sie können dann dem Datumsbefehl (man date) ein Format hinzufügen, wenn Sie genau dasselbe Format wünschen, und dieses auch als vim-Alias ​​hinzufügen

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

Dadurch wird das Format erzeugt, das Sie in Ihrem Beispiel gezeigt haben (Datum in der Shell verwendet nicht \%, sondern nur%, vim ersetzt% durch den Namen der aktuellen Datei, sodass Sie es maskieren müssen).

Sie können Ihrer .vimrc eine Karte hinzufügen, damit sie den Befehl automatisch ausgibt, z. B. jedes Mal, wenn Sie F3 drücken:

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

(Bearbeitet von oben :)) (Bearbeiten: Textteil in Code ändern, damit

<F3> 

kann angezeigt werden)


4

Für einen Unix-Zeitstempel:

: r! Datum + \% s

Sie können diesen Befehl auch einem Schlüssel (z. B. F12) in VIM zuordnen, wenn Sie ihn häufig verwenden:

Tragen Sie dies in Ihre .vimrc ein:


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

4

Aus dem Vim Wikia .

Ich benutze dies, anstatt meine Hand bewegen zu müssen, um eine F-Taste zu drücken:

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

Jetzt im Einfügemodus tippe einfach tds und sobald ich die Leertaste drücke oder zurückkehre, erhalte ich das Datum und tippe weiter.

Ich habe das %bda reingelegt, weil ich den Monatsnamen gerne sehe. Das %Fgibt mir etwas nach Datum zu sortieren. Ich könnte das ändern, %Y%m%ddamit zwischen den Einheiten keine Zeichen stehen.



0

Ein weiterer schneller Weg, der in früheren Antworten nicht enthalten ist: type-

!!Datum


0

Ich wollte einen benutzerdefinierten Befehl :Date(keine Tastenbelegung), um das Datum an der aktuellen Cursorposition einzufügen.

Leider führen einfache Befehle wie r!datezu einer neuen Zeile. Also kam ich schließlich auf Folgendes:

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

Hiermit wird die Datums- / Zeitzeichenfolge an der Cursorposition hinzugefügt, ohne dass eine neue Zeile hinzugefügt wird (ändern Sie diese, normal aum sie nach der Cursorposition hinzuzufügen).


Während dies funktioniert, erscheint mir der Befehl zu kompliziert und ich denke, es sollte einen schöneren Weg geben, dies zu tun. Wenn Sie eine kennen, lassen Sie es mich bitte wissen :)
luator
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.