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. )

Edward Tanguay
quelle

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
Daren Thomas
quelle
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 () .

Swaroop CH
quelle
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".]

luser droog
quelle
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.

intuitiv
quelle
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)

Vinko Vrsalovic
quelle
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>
fijter
quelle
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.

user3449771
quelle
1

Unix, benutze:

!!date

Windows, verwenden Sie:

!!date /t

Weitere Details: Siehe Insert_current_date_or_time

Byte-Pirat
quelle
0

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

!!Datum

lukmac
quelle
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).

luator
quelle
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