Use o vim no pipeline para descarregar a linha atual ao sair para o stdout?

1

É possível que eu faça algo assim:

$ ls | vim | xargs ...

e o vim passa para stdout todas as linhas visualmente selecionadas na saída?

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

Estou obviamente aberto para passar alguns argumentos de linha de comando para o vim, ou um vimrc personalizado para fazê-lo funcionar.

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

    
por Brad Parks 01.08.2018 / 14:29

2 respostas

1

Eu encontrei uma solução que funciona com o vim muito facilmente, então agora posso fazer coisas como esta

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

Isso inicia o vim, permite que eu selecione visualmente o texto desejado e transmite o texto selecionado para stdout quando eu pressiono F4 . Note que eu também poderia apenas editar o buffer e modificá-lo para conter apenas o texto que eu quero selecionar, salvar e sair, e o conteúdo do buffer seria passado para stdout. Então todo o poder do vim para "escolher" algo na linha de comando de forma interativa!

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

map <F4> "*yggdG"*pZZ

e salvando o seguinte em um script ( encontrado )

choose.sh

#!/bin/bash
# create temporary file
TMPFILE='mktemp /tmp/vipe.bashXXXXXXXX'
cat > ${TMPFILE}
vim ${TMPFILE} < /dev/tty > /dev/tty
cat ${TMPFILE}
rm ${TMPFILE}
    
por 01.08.2018 / 16:12
2

Seu choose.sh basicamente reimplementa o comando vipe ( vi pipe ) de 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.
    
por 03.09.2018 / 15:43

Tags