Como tubulação selecionadas visualmente texto para um comando e append saída UNIX para buffer atual no Vim

StackOverflow https://stackoverflow.com/questions/230266

  •  04-07-2019
  •  | 
  •  

Pergunta

Usando Vim, eu estou tentando texto tubulação selecionado no modo visual para um comando UNIX e ter a saída acrescentados ao final do arquivo atual. Por exemplo, digamos que temos um comando SQL, tais como:

SELECT * FROM mytable;

Eu quero fazer algo como o seguinte:

<ESC>
V                 " select text
:'<,'>!mysql -uuser -ppass mydb

Mas em vez de ter a saída de substituição do texto selecionado no momento, eu gostaria de ter a saída acrescentados ao final do arquivo. Você provavelmente ver onde isso vai dar. Eu estou trabalhando em usar o Vim como um editor simples SQL. Dessa forma, eu não tenho que sair Vim para editar, ajustar, código de teste SQL.

Foi útil?

Solução

Como sobre como copiar o texto selecionado para o final do arquivo, selecione a cópia e execute o comando? Se você não quer repetir os mesmos comandos e outra vez, você pode gravar a seqüência usando q ou adicionar um novo comando. Eu tentei o último da seguinte forma:

:com -range C <line1>,<line2>yank | $ | put | .,$ !rev

Com ele você pode selecionar algumas linhas e digite :C. Esta primeira vai colar a seleção, em seguida, ir para o final do arquivo, cole o texto arrancou e execute o comando (rev neste caso) sobre o novo texto.

Outras dicas

Se você preferir abordagem mais programática, você pode ter

:call append(line("$"), system("command", GetSelectedText()))

onde GetSelectedText é a função reutilizável:

func! GetSelectedText()
  normal gv"xy
  let result = getreg("x")
  normal gv
  return result
endfunc

Tente

:r | YourCommand

Por exemplo:

:r ! echo foo

acrescenta foo ao seu buffer.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top