Dada uma série de linhas parecidas com esta:
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.
Existe uma maneira de eu pegar esses quatro primeiros caracteres (o ano) e copiá-los para o final da linha, para que fique assim:
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
cut-copy-paste
replace
repeated-commands
misturar
fonte
fonte
:%g/^\d\{4}\d\@!/s/^\(\d\{4}\).*\zs/ \1/
.Respostas:
é uma maneira de fazer isso
\v
opção mágica, para evitar ter que escapar do agrupamento()
^
início da linha\d{4}
corresponde exatamente a quatro dígitos.*
resto da linha\1
\2
tem o padrão correspondente dentro()
edit: @Jair Lopez menciona nos comentários, a expressão regular pode ser melhorada ainda mais:
ou o equivalente
&
e\0
contém todo o padrão correspondentePara leitura adicional, vimregex e regex FAQ
fonte
:%s/\v^(\d{4}).*/& \1/
seria um comando mais curto.E uma solução com uma macro:
Que significa:
Em seguida, você pode reproduzir a macro quantas vezes quiser
3@a
.Editar Como o @evilsoup mencionou nos comentários, uma maneira mais eficaz de executar a macro em todas as linhas do buffer é usar:
É claro que você pode substituir
%
por um intervalo que descreve as linhas a serem modificadas.fonte
:%normal @q
Aqui está o caminho que eu faria:
Explicação:
fonte
Se você tiver acesso aos comandos UNIX padrão, poderá usar
AWK
:fonte
:help filter
é um recurso interno do Vim e, considerando como esse recurso permite que o Vim se encaixe no paradigma UNIX, eu diria que é muito vi / vim, na verdade.Eu acho que os mecanismos existentes para fazer isso são melhores, mas também é possível fazer isso usando o modo de bloqueio visual .
Copie as datas:
Coloque o final da primeira linha:
Colar:
fonte
4l
em vez dellll
Em uma linha de comando unix (ou janelas, se você tiver ferramentas de linha de comando unix instaladas)
fonte