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.