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

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

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


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ę”.]


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.


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


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>

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.



0

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

!!data


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


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.