Use o vim no pipeline para descarregar a linha atual na saída para stdout?

1

É possível fazer algo assim:

$ ls | vim | xargs ...

e o vim passa para stdout quaisquer linhas que foram visualmente selecionadas na saída?

Se fosse mais fácil simplesmente despejar a "linha atual", isso também funcionaria.

É claro que estou aberto a passar alguns argumentos da linha de comando para o vim ou um vimrc personalizado para fazê-lo funcionar.

NOTA: Desejo usar isso para permitir que eu selecione qualquer parte do texto, seja uma linha completa ou parte de uma única linha, interativamente na linha de comando usando o VIM.

Brad Parks
fonte

Respostas:

2

Você choose.shbasicamente reimplementa o comando vipe( vi pipe ) do moreutils :

SYNOPSIS
    command1 | vipe | command2

DESCRIPTION
    vipe allows you to run your editor in the middle of a unix pipeline and
    edit the data that is being piped between programs. Your editor will
    have the full data being piped from command1 loaded into it, and when
    you close it, that data will be piped into command2.
Ingo Karkat
fonte
Com certeza! Bom ponto. A única diferença real que vejo é que o vipe obriga a editar o conteúdo, excluindo tudo, exceto o que você deseja. Minha abordagem acima permite que eu apenas selecione visualmente o texto que eu quero, pressione F4 e é isso que é enviado para a saída - menos trabalho com o teclado, na minha opinião. Na verdade, me deparei com esse script ao procurar informações vipe.
Brad Parks
1

Encontrei uma solução que funciona com o vim com bastante facilidade, então agora posso fazer coisas como esta

$ ls | choose.sh | xargs ....

Isso inicia o vim, permite selecionar visualmente o texto que eu quero e passa o texto selecionado para o stdout quando pressiono F4. Observe que eu também poderia apenas editar o buffer e modificá-lo para conter apenas o texto que desejo selecionar, salvar e sair, e o conteúdo do buffer seria passado para o stdout. Portanto, todo o poder do vim de "escolher" algo na linha de comando interativamente!

Eu posso fazer isso usando o vim adicionando o seguinte ao meu .vimrc(snagged from here )

map <F4> "*yggdG"*pZZ

e salvando o seguinte em um script (capturado daqui )

choose.sh

#!/bin/bash
# create temporary file
TMPFILE=`mktemp /tmp/vipe.bashXXXXXXXX`
cat > ${TMPFILE}
vim ${TMPFILE} < /dev/tty > /dev/tty
cat ${TMPFILE}
rm ${TMPFILE}
Brad Parks
fonte