Estou executando um aplicativo no prompt de comando ou no shell Git e gostaria de obter a saída no Bloco de Notas, para facilitar a revisão e edição mais tarde.
Tentei o seguinte, mas sempre recebo uma instância vazia do bloco de notas:
diff file1.txt file2.txt | notepad
Estou ciente de que posso redirecionar a saída para outro arquivo e abrir o arquivo no Bloco de Notas. Gostaria de evitar a etapa extra, porque estou acostumado a usar o Vim ou menos em sistemas não Windows.
windows
command-line
notepad
Der Hochstapler
fonte
fonte
more
no Windows.vim
, por que não instalá-lo?Respostas:
Pelo que sei, não há como entrar diretamente no Bloco de Notas.
No entanto, você pode canalizar
clip
e colar no bloco de notas, assim:Em seguida, pressione Ctrl+ Vno bloco de notas.
fonte
&& notepad file3.txt
?Considere usar o Vim ou, no seu caso, o gVim, se você preferir um ambiente gráfico.
Em seguida, você pode inserir nele com um único hífen como argumento, o que instrui o Vim / gVim a ler da entrada padrão.
fonte
:%!diff file1.txt file2.txt
-
é freqüentemente usado para significar "ler de stdin", portanto, isso não é estritamente limitado avim
. Outros editores usam-i
(por exemplokate
).Aqui está um pequeno programa do Windows que faz isso corretamente (sem sobrecarregar a área de transferência). Ele deve ser adaptável ao PowerShell, e eu posso atualizar esta resposta se eu conseguir o tempo, mas você também pode usar esse programa diretamente.
Bem, e o PowerShell? Não há necessidade de instalar outro aplicativo. Infelizmente, você vai precisar criar um arquivo de script em algum lugar em sua
PATH
...Versão curta que você pode usar
Se você criar um arquivo em lotes (por exemplo
ShowInNotepad.bat
) com o seguinte conteúdo e o colocar emPATH
algum lugar:você pode simplesmente ligar
echo blah | ShowInNotepad
de qualquer lugar!Note que este não assumir que você está usando uma versão recente-ish do Windows (Vista +) e não tivesse desativado PowerShell ou desinstalado o .NET framework. Em outras palavras, uma instalação padrão do Windows funcionará.
Longas explicações e alternativas
A maneira mais fácil de pensar é automatizar a ação colar ( Ctrl+ V). Qual pelo menos uma outra resposta já está em andamento, mas essa usa o AHK - você pode ter melhor sorte em fazer com que o PowerShell funcione em um ambiente corporativo bloqueado.
Vamos continuar com o roteiro, sim?
É bem direto, então não vou me preocupar em explicar o script mais do que os comentários já fazem.
Uso
Para usá-lo, você só precisa colocar o script em um
.ps1
arquivo (por exemploShowInNotepad.ps1
), colocá-lo em algum lugar do seuPATH
e depois ligarpowershell ShowInNotepad.ps1
depois de colocar o texto que deseja exibir na área de transferência.Exemplo:
Infelizmente, às vezes, a execução de scripts do PowerShell pode ser difícil (políticas de execução e tudo). Portanto, condensamos esse script em uma linha única que você pode chamar diretamente no prompt de comando ou até colocar em um arquivo em lotes:
Se você criar um arquivo em lotes (por exemplo
ShowInNotepad.bat
) com o seguinte conteúdo e o colocar emPATH
algum lugar:você pode simplesmente ligar
echo blah | ShowInNotepad
de qualquer lugar!fonte
Save
saída e os comportamentos modificados são diferentes. Além de substituir o próprio bloco de notas ou injetar diretamente o texto em seu controle de edição, não há muitas outras opções. Obviamente, esse método tem a desvantagem do conteúdo da área de transferência (embora esses sejam supostamente efêmeros). Não acho que perder o foco seja uma questão importante; é uma ...ShowWindow
teclas e o envio). E esse método requer um pouco mais de configuração (criando o arquivo de script) para ser usado, sim.Que tal usar o AutoHotkey ?
Salve o seguinte como
stdin.ahk
e coloque-o no diretório AutoHotkey:Então a linha de comando:
Canaliza a saída do comando no Bloco de Notas, desde que a janela esteja aberta e com o título
Untitled - Notepad
. No caso de a janela não estar ativa, ela ficará em buffer em segundo plano até que a janela esteja ativa. Você pode até ir para outro programa e ele continuará armazenando o buffer novamente.Isso parece morrer quando o programa que produz a nossa entrada padrão morre ...
(Para obter informações, o código stdin () foi descaradamente semicircular daqui )
fonte
Isso é totalmente possível; Eu apenas tentei. Estou assumindo que o Bloco de notas está definido para abrir arquivos txt por padrão:
OK, você está tecnicamente criando um arquivo, mas ele não é salvo.
Piping em mais também é uma opção.
fonte
output.txt
isso vai atrapalhar. Marginalmente mais seguro seria usar%temp%/somerandomstring.txt
.Aqui está uma maneira feia, mas eficaz de fazer isso:
Apenas certifique-se de enviar apenas a saída de texto. Outros dados serão potencialmente interpretados como caracteres de controle (CTRL, ALT, DEL, etc.).
fonte
Aqui estão algumas soluções baseadas em VBScript que podem funcionar (embora .. elas dependam um pouco dos aplicativos que são abertos a tempo):
pipe2key.vbs - abre o aplicativo especificado como o primeiro argumento e envia StdIn como pressionamentos de tecla. Precisa ser usado com o cscript.exe, pois o wscript não fornece acesso ao StdIn. Provavelmente bem devagar para documentos longos - mas não atrapalha a área de transferência
Exemplo de uso:
diff file1.txt file2.txt | cscript pipe2key.vbs notepad.exe
Ou, cole em.vbs. Automatiza a operação CTRL-V após o lançamento de um aplicativo (portanto, usa o comando 'clip' conforme mencionado nas respostas anteriores). Consideravelmente mais rápido e limpo (na minha opinião) do que pipe2key.vbs, mas o processo substituirá a área de transferência
Exemplo de uso:
diff file1.txt file2.txt | clip && pasteinto notepad.exe
fonte
Algo como esse "pode" funcionar.
Ah, você não percebeu que isso é algo que você faria manualmente todas as vezes (pelo que parece). Você pode criar algum tipo de macro ou algo para fazer isso a cada vez para acelerar o processo. Não tenho a certeza sobre isso.
diff file1.txt file2.txt > file.txt | sleep 1 | notepad.exe file.txt | rm file.txt
Teria que terminar de escrever o conteúdo do diff no arquivo.txt para carregar toda a operação do diff, o que não tenho certeza se será. Pode haver uma maneira de fazer uma pausa de alguma forma entre a operação do tubo, se for esse o caso.
fonte
&
,&&
E||
são os operadores para os comandos encadear. Todos os três se comportam de maneira diferente na maneira como procedem se um comando gerar um valor de retorno diferente de 0.|
é completamente diferente, pois é usado para canalizar a saída de um programa para outro. O resultado pode ser o que você queria, mas o uso de um dos operadores de encadeamento torna a intenção mais clara, porque nenhuma tubulação real é desejada nesse exemplo. Para referência adicional: microsoft.com/resources/documentation/windows/xp/all/proddocs/...Meu idioma não é o inglês, desculpe-me por erros.
Eu acho que você não pode colocar diretamente a saída no bloco de notas aberto. Pode ser que eu esteja errado sobre isso. Você precisa criar um arquivo com a saída para poder trabalhar nele. O comando tee pode canalizar a saída para dois ou pode haver mais comandos ou arquivos ao mesmo tempo.
homem tee
Não se esqueça de usar >> em vez disso> ao redirecionar a saída para o arquivo. O> substituirá o arquivo, >> adicionará a saída depois do que já estiver nesse arquivo.
fonte
tee
geralmente não está disponível no Windows e, mesmo que estivesse, não ajudaria com esse problema.Você não pode, o Bloco de Notas é muito limitado para isso! Melhor ainda ... instale o Cygwin e contorne toda essa "falta de recursos" do Windows. Você pode usar o comando que você já conhece.
AFAIK, muito poucos programas do Windows suportam pipelining, ainda pior para programas de GUI.
Você pode tentar abrir solicitações de recursos para um dos programas "windows tail" para adicionar isso.
fonte