Obter entrada do editor (vim / nano / emacs / textmate?)

4

Eu estava curioso para saber se há uma maneira de obter entrada não de StdIn , mas de $EDITOR - seja vim, nano, emacs ou até mesmo um editor de linha de comando (MacVim / TextMate). Quais são as opções / soluções alternativas / melhores práticas?

Basicamente, eu gostaria de um fluxo de trabalho com heredoc - mas do editor $ em vez disso.

$ sort -nr << FOO | uniq -c 
pipe heredoc> foo 
pipe heredoc> bar
pipe heredoc> baz
pipe heredoc> foo
pipe heredoc> FOO
   2 foo
   1 baz
   1 bar
    
por Nils Riedemann 22.03.2012 / 13:43

4 respostas

7

O comando vipe no pacote moreutils permite lançar $ EDITOR no meio de um pipeline

Você pode obter o comportamento desejado assim:

$ </dev/null vipe |sort -nr | uniq -c 
    
por 22.03.2012 / 19:22
3

Eu acho que sua única chance de fazê-lo funcionar com qualquer tipo de editor é usar arquivos temporários:

FILE=$(mktemp); $EDITOR "$FILE"; <"$FILE" …command… ; rm "$FILE"

(No entanto, isso não permite iniciar o comando antes que uma entrada completa seja fornecida).

Além disso, você pode usar echo "# please insert your input bellow" >"$FILE" antes da chamada para $EDITOR para inserir um comentário que será exibido dentro do editor. Certifique-se de que isso não afetará o comportamento do comando (ou peça ao usuário para explicitamente removê-lo).

    
por 22.03.2012 / 16:08
0

O Emacs tem a possibilidade de executar o shell em um de seus buffers (use o shell M-X). Mas os processos iniciados ainda receberiam sua contribuição do stdin, seu stdin seria simplesmente um pseudo-terminal cujo outro fim seria o emacs.

    
por 22.03.2012 / 15:53
0

No Emacs você pode executar qualquer comando e fornecer conteúdo de um dos buffers do Emacs (região selecionada para ser exato) como stdin para o aplicativo.

Por exemplo, se o conteúdo do seu buffer Emacs for ls e você o marcar como região (usando C-SPC ), execute shell-command-on-region ( M-| ) e digite como comando bash (combinação completa: M-| command RET ) haverá ls executada em bash e a saída será aberta como novo buffer.

Se você usar C-u M-| command RET na região, a saída substituirá o comando marcado no seu buffer atual.

    
por 22.03.2012 / 16:49

Tags