Vim inserindo caracteres antes de uma vírgula em várias linhas

0

Digamos que eu tenha o seguinte

DRAFT,
SAVED,
ARCHIVED,
DELETED;

E eu quero o seguinte:

DRAFT("draft"),
SAVED("saved"),
ARCHIVED("archived"),
DELETED("deleted");

Como posso fazer isso com o vim? Eu estou supondo que eu possa usar o modo de bloqueio visual?

Eu percebo que eu poderia facilmente fazer isso com sed, mas estou interessado em qualquer maneira que eu poderia fazer isso sem sair vim.

    
por Charlotte 10.05.2013 / 22:25

4 respostas

3
:%s/\v(\w*)([,;])/("\L")

parece fazer o que você pede.

  • \v reduz o número de barras invertidas
  • (\w*) primeiro grupo, qualquer número de caracteres "palavra"
  • ([,;]) segundo grupo, , ou ;
  • reutiliza o primeiro grupo
  • ("\L") diminuiu o primeiro grupo entre aspas e parênteses
  • segundo grupo
por 10.05.2013 / 22:59
2
:1,$s/\<\(\w*\)\>/("\L")/

Isso encontra uma palavra \<(w*\)\> e depois a coloca como e minúscula \L

    
por 10.05.2013 / 22:41
0

Para pessoas que preferem rubi:

:rubydo x = $_[0..-2] ; $_ = "#{x}(\"#{x.downcase}\")#{$_[-1]}"

x = $ _ [0 ..- 2] - > não salve o último caractere (ou;)

$ _ [- 1] - > "," ou ";"

    
por 11.05.2013 / 22:56
0

Eu faria isso com uma macro, eu mesmo. Supondo que o cursor esteja no início da primeira linha:

qqyeea("<C-R>0")<ESC>v%gu+q3@a

É bem menos digitação dessa maneira e não requer que você se lembre da sintaxe regex do vim. Muitas vezes, pode ser muito mais rápido fazer esse tipo de conversão de texto usando uma macro do que usando um comando substituto.

Quebrando minha solução:

  • qa começa a gravar uma macro no registrador 'a'.
  • ye yanks da posição atual do cursor até o final da palavra, armazenando-a no registrador "e 0" (só acessarei através do registrador 0, mas ela é armazenada em ambos)
  • e move o cursor para o final da palavra
  • a entra no modo de inserção APÓS o cursor (então entre a palavra e a vírgula)
  • Em seguida, insiro um texto padrão. O bit interessante é o <C-R>0 . No modo de inserção, <C-R>n significa "insira o texto que está no registrador n". Se eu estivesse fazendo essa tarefa normalmente (em vez de explicá-la para outra pessoa em formato de texto), usaria <C-R>" aqui, mas o 0 é mais fácil de distinguir visualmente dos "caracteres circunvizinhos".
  • <ESC> nos retorna ao modo normal. O cursor está agora no fechamento), que foi o último caractere que digitamos no modo de inserção.
  • v entra no modo visual.
  • % pula o cursor de volta para o parêntese aberto, correspondendo ao parêntese de fechamento no qual estamos atualmente, então nossa seleção visual agora cobre a string ("DRAFT") .
  • gu converte a string visualmente selecionada em minúscula. Isso não tem efeito sobre os parênteses ou citações na seleção visual.
  • + avança o cursor para o início da próxima linha, pronto para executar o mesmo conjunto de comandos novamente.
  • q termina de gravar a macro.
  • 3@a executa a macro 'a' três vezes, repetindo assim tudo o que fizemos na primeira linha nas três linhas subsequentes.
por 13.05.2013 / 09:49

Tags