Dada una serie de líneas que se parecen a esto:
2001 "Some Kind of Title," Author's Name, Publication Name, 1 Mar.
2002 "Some Kind of Title," Author's Name, Publication Name, 12 Oct.
2003 "Some Kind of Title," Author's Name, Publication Name, 8 Apr.
2004 "Some Kind of Title," Author's Name, Publication Name, 3 Jun.
¿Hay alguna manera de que pueda tomar esos primeros cuatro caracteres (el año) y copiarlos al final de la línea, para que se vea así:
2001 "Some Kind of Title," Author's Name, Publication Name, 1 Mar. 2001
2002 "Some Kind of Title," Author's Name, Publication Name, 12 Oct. 2002
2003 "Some Kind of Title," Author's Name, Publication Name, 8 Apr. 2003
2004 "Some Kind of Title," Author's Name, Publication Name, 3 Jun. 2004
:%g/^\d\{4}\d\@!/s/^\(\d\{4}\).*\zs/ \1/
.Respuestas:
es una forma de hacerlo
\v
opción mágica, para evitar tener que escapar de la agrupación()
^
inicio de línea\d{4}
coincidir exactamente con cuatro dígitos.*
resto de línea\1
\2
tiene el patrón combinado dentro()
editar: @Jair Lopez menciona en los comentarios, la expresión regular se puede mejorar aún más:
o el equivalente
&
y\0
contiene todo el patrón combinadoPara leer más, vimregex y regex FAQ
fuente
:%s/\v^(\d{4}).*/& \1/
Sería un comando más corto.Y una solución con una macro:
Lo que significa:
Luego puede reproducir la macro tantas veces como tenga una línea
3@a
.Editar Como @evilsoup lo mencionó en los comentarios, una forma más efectiva de ejecutar la macro en todas las líneas del búfer es usar:
Por supuesto, puede reemplazarlo
%
por un rango que describa las líneas a modificar.fuente
:%normal @q
Aquí está la forma en que lo haría:
Explicación:
fuente
Si tiene acceso a comandos UNIX estándar, puede usar
AWK
:fuente
:help filter
es una función incorporada de Vim y considerando cuán bien esa característica le permite a Vim encajar en el paradigma de UNIX, diría que es muy vi / vim, en realidad.Creo que los mecanismos existentes para hacer esto son mejores, pero también es posible hacerlo usando el modo de bloque visual .
Copia las fechas:
Rellene el final de la primera línea:
Pegar:
fuente
4l
lugar dellll
Desde una línea de comandos de Unix (o Windows si tiene instaladas herramientas de línea de comandos de Unix)
fuente