Najlepszy sposób na wstawienie znacznika czasu w Vimie?

90

EditPad Lite ma fajną funkcję ( CTRL- E, CTRL- I), która wstawia znacznik czasu, np. "2008-09-11 10:34:53" do twojego kodu.

Jaki jest najlepszy sposób na uzyskanie tej funkcjonalności w Vimie?

(Używam Vima 6.1 na serwerze Linux przez SSH. W obecnej sytuacji wielu z nas ma wspólny login, więc nie chcę tworzyć skrótów w katalogu domowym, jeśli jest inny wbudowany sposób na uzyskanie znacznika czasu. )

Edward Tanguay
źródło

Odpowiedzi:

87

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

Wypróbowałem, działa na moim Macu:

:r! date

produkuje:

Thu Sep 11 10:47:30 CEST 2008

To:

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

produkuje:

2008-09-11 10:50:56
Daren Thomas
źródło
1
Mała uwaga, spacja nie wydaje się być potrzebna - działa też ": r! Date".
Jon Bringhurst
@AB, przeglądam to pytanie: stackoverflow.com/questions/15394572/… , wygląda na to, że możesz uciec za pomocą odwrotnego ukośnika. Możesz tego dla mnie spróbować?
Daren Thomas,
3
Całkowicie działa. Inne sposoby zapisu to :r!date "+\%F \%T"lub :r!date +\%F\ \%T.
chrisfargen
Poszedłem umieścić to w moim vimrc ... potem zauważyłem, że umieściłem to tam wieki temu. Działa świetnie.
mgjk
Działa jak urok na mojej fedorze 31. Dziękuję.
rchrd
115

Aby to działało na wielu platformach, po prostu umieść następujące informacje w swoim 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>

Teraz możesz po prostu nacisnąć F3 w dowolnym momencie w Vi / Vim, a otrzymasz znacznik czasu, taki jak 2016-01-25 Mo 12:44wstawiony przy kursorze.

Pełny opis dostępnych parametrów znajduje się w dokumentacji funkcji C strftime () .

Swaroop CH
źródło
czy istnieje metoda na wykonanie tego w całym systemie (w Linuksie)?
nilon
Czy istnieje metoda tworzenia lub zapisywania pliku z tym znacznikiem czasu jako nazwą pliku?
nilon
Dzięki, ponieważ F3 jest już używany do czegoś innego. I zdefiniowane niestandardowe polecenie w trybie normalnym :Datepoprzez dodanie następujących do mojego ~/.vimrcpliku konfiguracyjnego: command! Date put =strftime('%Y-%m-%d'). Wstawia datę w nowym wierszu. nie udało się stworzyć wersji bez nowej linii.
Paul Rougieux
1
@PaulRougieux Poniższy tekst służy do wstawiania daty bez nowego wiersza:command! Date :normal a<C-R>=strftime('%Y-%m-%d')<CR>
UnderBlue592
13

Dlaczego wszyscy używają :r!? Znajdź pustą linię i wpisz w !!datetrybie poleceń. Zapisz naciśnięcie klawisza!

[nb Spowoduje to potokowanie bieżącej linii do stdin, a następnie zastąpi wiersz wynikiem polecenia; stąd część „znajdź pustą linię”.]

luser droog
źródło
9

Jako rozszerzenie odpowiedzi @Swaroop CH,

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

jest bardziej zwartą formą, która również drukuje strefę czasową (w rzeczywistości różnicę w stosunku do UTC, w formacie zgodnym z ISO-8601).

Jeśli z jakiegoś powodu wolisz korzystać z narzędzia zewnętrznego,

:r !date --rfc-3339=s

poda pełny znacznik czasu zgodny z RFC-3339; użyj nszamiast sdla precyzji podobnej do Spocka, i potokuj, tr ' ' Taby użyć dużej litery T zamiast spacji między datą i godziną.

Może się przydać również ta wiedza

:source somefile.vim

wczyta polecenia z somefile.vim: w ten sposób możesz ustawić niestandardowy zestaw mapowań itp., a następnie załadować go, gdy używasz vima na tym koncie.

intuicyjnie
źródło
strftime () jest funkcją w vimie. Możesz również użyć:put=strftime(""%FT%T%z")
Antonios Hadjigeorgalis
Na moim komputerze (Windows 7, gvim 8.0.69) specyfikatory% F i% T nie działały, ale% Y-% m-% d i% H:% M:% S działały. (Według cplusplus.com/reference/ctime/strftime,% F i% T otrzymały zaktualizowaną wersję strftime dla C99.) Ponadto specyfikator% z stworzył obszerny opis strefy czasowej.
Ed Wynn
8

: r! data

Możesz następnie dodać format do polecenia daty (data man), jeśli chcesz dokładnie ten sam format i dodać go również jako alias vima

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

To tworzy format, który pokazałeś w swoim przykładzie (data w powłoce nie używa \%, ale tylko%, vim zastępuje% nazwą bieżącego pliku, więc musisz go zmienić).

Możesz dodać mapę do swojego .vimrc, aby automatycznie wstawiała polecenie, na przykład za każdym razem, gdy naciśniesz F3:

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

(Edytowałem z góry :)) (Edycja: zmień część tekstu na kod, tak że

<F3> 

można wyświetlić)

Vinko Vrsalovic
źródło
4

Dla uniksowego znacznika czasu:

: r! data + \% s

Możesz również zmapować to polecenie do klawisza (na przykład F12) w VIM, jeśli często go używasz:

Umieść to w swoim .vimrc:


map  <F12> :r! date +\%s<cr>
fijter
źródło
4

Z Vim Wikia .

Używam tego zamiast poruszać ręką, aby nacisnąć klawisz F:

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

Teraz w trybie wstawiania wystarczy wpisać tds i jak tylko naciśnę klawisz spacji lub wrócę, otrzymuję datę i piszę dalej.

Wstawiam %btam, bo lubię widzieć nazwę miesiąca. %FDaje mi coś do sortowania według daty. Mogę to zmienić, aby %Y%m%dmiędzy jednostkami nie było żadnych postaci.

user3449771
źródło
2

Unix, użyj:

!!date

Windows, użyj:

!!date /t

Więcej szczegółów: zobacz Insert_current_date_or_time

bajtowy pirat
źródło
0

Kolejny szybki sposób nieuwzględniony w poprzednich odpowiedziach: wpisz

!!data

lukmac
źródło
0

Chciałem, aby niestandardowe polecenie :Date(nie mapowanie klawiszy) wstawiało datę w bieżącej pozycji kursora.

Niestety proste polecenia, takie jak r!datepowodują powstanie nowej linii. Więc w końcu wymyśliłem:

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

który dodaje ciąg daty / czasu w pozycji kursora bez dodawania nowego wiersza (zmień na normal adodanie po pozycji kursora).

luator
źródło
Chociaż to działa, polecenie wydaje mi się zbyt skomplikowane i czuję, że powinien być lepszy sposób na zrobienie tego. Jeśli znasz jeden, daj mi znać :)
luator