Use Notepad ++ de Cygwin sin que el shell espere un código de salida

19

Estoy ejecutando Cygwin y me gustaría usar Notepad ++ como el editor de shell principal, algo así como lo que tengo en mi Mac, donde puedo escribir mate whateverpara abrir una instancia de TextMate. En mi ~/.bashrcarchivo en Cygwin tengo el siguiente conjunto de variables de entorno y alias:

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

Funciona principalmente: cuando escribo np whatevero cuando un programa Cygwin requiere $ EDITOR, se abre Notepad ++.

Sin embargo, el shell espera hasta que Notepad ++ se cierre y no permitirá ninguna entrada hasta entonces. Esto puede ser específico de bash, pero ¿cómo puedo abrir Notepad ++ desde Cygwin y decirle al shell que no espere a que continúe un código de salida? Agregar &a al final del comando alias no funciona correctamente, solo abre un archivo sin título y advierte en filename: command not foundlugar de abrir el archivo.

¡Gracias!

Andrés
fuente

Respuestas:

16

Podrías probar una bashfunción para pasar los argumentos antes del ampersand:

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

PERO el problema más grande puede ser la idea de no esperar hasta que Notepad ++ salga. Los comandos de Shell que se usan $EDITORnormalmente están diseñados para esperar hasta que el editor envíe una indicación de que la edición se ha completado. Esto generalmente significa que el editor ha salido (por ejemplo, con vio nano).

Emacs tiene una manera de establecer su EDITORa emacsclient, y luego, cuando esté edición de hecho, se golpea una tecla mágica ( C-x #) para indicar que se ha completado la edición. Si Notepad ++ tuviera algo similar para los usuarios de cygwin, puedo ver cómo funcionaría esto.

Otra alternativa es usar el Bloc de notas simple, aburrido y simple como su EDITOR y reservar Notepad ++ para un uso intensivo (se me ocurrió la idea de esta publicación de blog )

Doug Harris
fuente
Impresionante, eso funcionó. Voy
Andrew
El Bloc de notas también requiere esperar a que termine la edición
codezombie
8

Lo resolví con un simple enlace simbólico.

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

Por supuesto ~ / bin está en mi $ PATH.

Ahora, para abrir un archivo, simplemente escriba "npp filename.txt" desde el indicador de cygwin. No he tenido que usar el & al final del comando.

Esto también arrojará una pestaña en la ventana de Notepad ++ actualmente en ejecución en lugar de abrir otra, Y si el archivo ya está abierto, no lo abrirá nuevamente.

Ethan Vaughn
fuente
¿Cómo se agrega ~ / bin a $ PATH?
Eric F
3

export EDITOR = "/ cygdrive / c / Program \ Files \ '(x86)' / Notepad ++ / notepad ++. exe"

alias np = "/ cygdrive / c / Program \ Files \ '(x86)' / Notepad ++ / notepad ++. exe"

también funciona para x86

mlanzero
fuente
2

Simplemente agregue un espacio y un ampersand (&) al final de su comando y el shell volverá inmediatamente al modo de entrada mientras deja Notepad ++ abierto.

en edición:

No estoy hablando de agregarlo a tu alias. Agréguelo al final de su comando así:

np whatever &

Robert S Ciaccio
fuente
1
Oh. Esto se ve bien hasta ahora. ¿Hay alguna manera de poner eso en el .bash_profilepara que no necesite escribirlo todo el tiempo?
Andrew
No soy un experto en bash, pero supongo que podría hacer que su alias tome una variable, que es el argumento, y también incluya el signo y al final. Alguien más inteligente con bash probablemente podría darte la sintaxis exacta. Solo sabía cómo responder a su pregunta porque solía hacer exactamente lo mismo mientras trabajaba en un entorno de desarrollo de Windows :)
Robert S Ciaccio
No puede hacer que un alias tome una variable en Bash. Tienes que usar una función o un script.
Pausado hasta nuevo aviso.
1

Los alias no toman argumentos interpolados. Use una función en su lugar.

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

Este script inicia Notepad ++ en segundo plano, pasando los argumentos de la línea de comando antes del '&'

Como Doug aconsejó , tener un valor predeterminado $EDITORque no bloquea puede causar problemas.

Leftium
fuente
0

Hay un comando específico en cygwin para lograr esto. Asegúrese de descargar run.exe, y asegúrese de que esté en su RUTA (o su RUTA contiene el ejecutable)

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