¿La mejor manera de insertar la marca de tiempo en Vim?

90

EditPad Lite tiene una característica interesante ( CTRL- E, CTRL- I) que inserta una marca de tiempo, por ejemplo, "2008-09-11 10:34:53" en su código.

¿Cuál es la mejor manera de obtener esta funcionalidad en Vim?

(Estoy usando Vim 6.1 en un servidor Linux a través de SSH. En la situación actual, varios de nosotros compartimos un inicio de sesión, por lo que no quiero crear abreviaturas en el directorio de inicio si hay otra forma incorporada de obtener una marca de tiempo. )

Edward Tanguay
fuente

Respuestas:

87

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

Lo probé, funciona en mi mac:

:r! date

produce:

Thu Sep 11 10:47:30 CEST 2008

Esta:

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

produce:

2008-09-11 10:50:56
Daren Thomas
fuente
1
Solo una nota menor, el espacio no parece ser necesario - ": r! Date" también funciona.
Jon Bringhurst
@AB, hojeando esta pregunta: stackoverflow.com/questions/15394572/… , parece que puedes escapar con una barra invertida. ¿Puedes probar eso por mí?
Daren Thomas
3
Funciona totalmente. Otras formas de escribirlo son :r!date "+\%F \%T"o :r!date +\%F\ \%T.
chrisfargen
Fui a poner esto en mi vimrc ... luego noté que ya lo puse allí hace mucho tiempo. Funciona genial.
mgjk
Funciona como un encanto en mi fedora 31. Gracias.
Rchrd
115

Para que funcione multiplataforma, simplemente ingrese lo siguiente en su 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>

Ahora puede presionar F3 en cualquier momento dentro de Vi / Vim y obtendrá una marca de tiempo como si estuviera 2016-01-25 Mo 12:44insertada en el cursor.

Para obtener una descripción completa de los parámetros disponibles, consulte la documentación de la función C strftime () .

Swaroop CH
fuente
¿Hay algún método para hacer este sistema en todo el sistema (en Linux)?
nilon
¿Existe algún método para crear o guardar un archivo con esta marca de tiempo como nombre de archivo?
nilon
Gracias, ya que F3 ya se usa para otra cosa. He definido un comando personalizado en el modo normal :Dateagregando la siguiente a mi ~/.vimrcfichero de configuración: command! Date put =strftime('%Y-%m-%d'). Inserta la fecha en una nueva línea. no logré hacer una versión sin nueva línea.
Paul Rougieux
1
@PaulRougieux Lo siguiente es para insertar la fecha sin la nueva línea:command! Date :normal a<C-R>=strftime('%Y-%m-%d')<CR>
UnderBlue592
13

¿Por qué todos usan :r!? Busque una línea en blanco y escriba !!datedesde el modo de comando. ¡Ahorre una pulsación de tecla!

[nb Esto canalizará la línea actual a stdin, y luego reemplazará la línea con la salida del comando; de ahí la parte "encontrar una línea en blanco".]

luser droog
fuente
9

Como extensión de la respuesta de @Swaroop CH,

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

es una forma más compacta que también imprimirá la zona horaria (en realidad, la diferencia con UTC, en una forma compatible con ISO-8601).

Si prefiere utilizar una herramienta externa por algún motivo,

:r !date --rfc-3339=s

le dará una marca de tiempo completa compatible con RFC-3339; use en nslugar de spara una precisión similar a Spock, y tr ' ' Tutilice una T mayúscula en lugar de un espacio entre la fecha y la hora.

También puede resultarle útil saber que

:source somefile.vim

leerá los comandos de somefile.vim: de esta manera, puede configurar un conjunto personalizado de asignaciones, etc., y luego cargarlo cuando esté usando vim en esa cuenta.

intuido
fuente
strftime () es una función dentro de vim. También puede utilizar:put=strftime(""%FT%T%z")
Antonios Hadjigeorgalis
En mi máquina (Windows 7, gvim 8.0.69), los especificadores% F y% T no funcionaron, pero% Y-% m-% dy% H:% M:% S sí. (Según cplusplus.com/reference/ctime/strftime,% F y% T venían con una versión actualizada de strftime para C99). Además, el especificador% z produjo una descripción prolija de la zona horaria.
Ed Wynn
8

: r! fecha

Luego puede agregar formato al comando de fecha (fecha del hombre) si desea exactamente el mismo formato y agregarlo como un alias de vim también

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

Eso produce el formato que mostró en su ejemplo (la fecha en el shell no usa \%, sino solo%, vim reemplaza% por el nombre del archivo actual, por lo que debe escapar).

Puede agregar un mapa en su .vimrc para que coloque el comando automáticamente, por ejemplo, cada vez que presione F3:

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

(Editado desde arriba :)) (Editar: cambie la parte del texto al código, de modo que

<F3> 

se puede mostrar)

Vinko Vrsalovic
fuente
4

Para una marca de tiempo de Unix:

: r! fecha + \% s

También puede asignar este comando a una tecla (por ejemplo, F12) en VIM si lo usa mucho:

Pon esto en tu .vimrc:


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

De Vim Wikia .

Utilizo esto en lugar de tener que mover mi mano para presionar una tecla F:

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

Ahora, en el modo Insertar, simplemente escribe tds y tan pronto como presiono la barra espaciadora o regreso, obtengo la fecha y sigo escribiendo.

Pongo el %bahí porque me gusta ver el nombre del mes. El %Fme da algo para ordenar por fecha. Podría cambiar eso para %Y%m%dque no haya caracteres entre las unidades.

usuario3449771
fuente
0

Otra forma rápida no incluida en las respuestas anteriores: escriba-

!!fecha

lukmac
fuente
0

Quería un comando personalizado :Date(no una asignación de teclas) para insertar la fecha en la posición actual del cursor.

Desafortunadamente, los comandos sencillos como el r!dateresultado en una nueva línea. Así que finalmente se me ocurrió lo siguiente:

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

que agrega la cadena de fecha / hora en la posición del cursor sin agregar ninguna línea nueva (cambie para normal aagregar después de la posición del cursor).

luator
fuente
Mientras esto funciona, el comando me parece demasiado complicado y creo que debería haber una forma más agradable de hacerlo. Si conoce uno, hágamelo saber :)
luator