Como tubulação selecionadas visualmente texto para um comando e append saída UNIX para buffer atual no Vim
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.
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.