Use o Notepad ++ da Cygwin sem que o shell aguarde um código de saída

19

Estou executando o Cygwin e gostaria de usar o Notepad ++ como o principal editor de shell, como o que tenho no meu Mac, onde posso digitar mate whateverpara abrir uma instância do TextMate. No meu ~/.bashrcarquivo no Cygwin, tenho o seguinte alias e variável de ambiente definido:

export EDITOR="/cygdrive/c/Program\ Files/Notepad++/notepad++.exe"
alias np="/cygdrive/c/Program\ Files/Notepad++/notepad++.exe"

Geralmente funciona: quando digito np whateverou quando um programa Cygwin pede $ EDITOR, o Notepad ++ é aberto.

No entanto, o shell aguarda até que o Notepad ++ seja fechado e não permitirá nenhuma entrada até então. Isso pode ser específico para o bash, mas como posso abrir o Notepad ++ do Cygwin e dizer ao shell para não esperar o código de saída continuar? A adição de um &no final do comando alias não funciona corretamente - apenas abre um arquivo sem título e avisa em filename: command not foundvez de abrir o arquivo.

Obrigado!

Andrew
fonte

Respostas:

16

Você pode tentar uma bashfunção para passar os argumentos antes do e comercial:

np ()
{
    /cygdrive/c/Program\ Files/Notepad++/notepad++.exe $* &
}

MAS o problema maior pode ser a idéia de não esperar até que o Notepad ++ saia. Os comandos do shell $EDITORnormalmente usados são projetados para esperar até que o editor retorne uma indicação de que a edição foi concluída. Isso geralmente significa que o editor saiu (por exemplo, com viou nano).

O Emacs tem uma maneira de definir EDITORcomo emacscliente, quando você terminar de editar, pressione uma tecla mágica ( C-x #) para indicar que a edição está concluída. Se o Notepad ++ tivesse algo semelhante para os usuários do cygwin, posso ver como isso funcionaria.

Outra alternativa é usar o Bloco de Notas simples, chato e simples como seu EDITOR e reservar o Notepad ++ para uso pesado (peguei a idéia nesta postagem do blog )

Doug Harris
fonte
Incrível - funcionou. Eu estou indo para ir com o Bloco de notas de baunilha como editor e Notepad ++ como np ()
Andrew
Bloco de notas também requer à espera de edição para ser concluída
codezombie
8

Eu o resolvi com um link simbólico simples.

ln -s /cygdrive/c/Program\ Files\ \(x86\)/Notepad++/notepad++.exe ~/bin/npp

Claro que ~ / bin está no meu $ PATH.

Agora, para abrir um arquivo, basta digitar "npp filename.txt" no prompt do cygwin. Eu não tive que usar o & no final do comando.

Isso também lançará uma guia na janela do Notepad ++ em execução no momento, em vez de abrir outra - E se o arquivo já estiver aberto, ele não será aberto novamente.

Ethan Vaughn
fonte
Como você adiciona ~ / bin a $ PATH?
9133
3

exportar EDITOR = "/ cygdrive / c / Programa \ Arquivos \ '(x86)' / Bloco de notas ++ / bloco de notas ++. exe"

alias np = "/ cygdrive / c / Programas \ Arquivos \ '(x86)' / Bloco de notas ++ / bloco de notas ++. exe"

também funciona para x86

mlanzero
fonte
2

Basta adicionar um espaço e um e comercial (&) ao final do seu comando e o shell retornará imediatamente ao modo de entrada, deixando o bloco de notas ++ aberto.

na edição:

Não estou falando de adicioná-lo ao seu alias. Adicione-o ao final do seu comando, assim:

np whatever &

Robert S Ciaccio
fonte
1
Ooh. Parece bom até agora. Existe uma maneira de colocar isso no arquivo .bash_profilepara que eu não precise digitá-lo o tempo todo?
28410 Andrew
Não sou especialista em bash, mas presumo que você possa fazer com que seu alias pegue uma variável, que é o argumento, e também inclua oe comercial no final. Alguém mais inteligente com o bash provavelmente pode fornecer a sintaxe exata. Eu só sabia como responder à sua pergunta, porque eu costumava fazer exatamente a mesma coisa, enquanto trabalhava no ambiente de dev janelas :)
Robert S Ciaccio
Você não pode fazer um alias pegar uma variável no Bash. Você precisa usar uma função ou um script.
Pausado até novo aviso.
1

Os aliases não aceitam argumentos interpolados. Use uma função em seu lugar.

function np() { /cygdrive/c/Program\ Files/Notepad++/notepad++.exe $1 & }
garyjohn
fonte
1
#!/bin/sh
/cygdrive/c/Program\ Files/Notepad++/notepad++.exe $@ &

Esse script inicia o Notepad ++ em segundo plano, passando os argumentos da linha de comando antes do '&'

Como Doug aconselhou , ter um padrão $EDITORque não bloqueia pode causar problemas.

Leftium
fonte
0

Existe um comando específico no cygwin para fazer isso. Certifique-se de baixar o run.exe e verifique se ele está no seu PATH (ou seu PATH contém o executável)

alias np="run.exe /cygdrive/c/Program\ Files/Notepad++/notepad++.exe"
Rich Homolka
fonte