Utilisez Notepad ++ de Cygwin sans que le shell attende un code de sortie

19

J'exécute Cygwin et je voudrais utiliser Notepad ++ comme éditeur de shell principal, un peu comme ce que j'ai sur mon Mac, où je peux taper mate whateverpour ouvrir une instance de TextMate. Dans mon ~/.bashrcfichier dans Cygwin, j'ai l'alias et la variable d'environnement suivants:

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

Cela fonctionne principalement: lorsque je tape np whateverou lorsqu'un programme Cygwin appelle $ EDITOR, Notepad ++ s'ouvre.

Cependant, le shell attend que Notepad ++ soit fermé et n'autorisera aucune entrée jusque-là. Cela peut être spécifique à bash, mais comment puis-je ouvrir Notepad ++ à partir de Cygwin et dire au shell de ne pas attendre qu'un code de sortie continue? L'ajout d'un &à la fin de la commande d'alias ne fonctionne pas correctement: il ouvre simplement un fichier sans titre et avertit filename: command not foundau lieu d'ouvrir le fichier.

Merci!

Andrew
la source

Réponses:

16

Vous pouvez essayer une bashfonction pour passer les arguments avant l'esperluette:

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

MAIS le plus gros problème peut être l'idée de ne pas attendre la fermeture de Notepad ++. Les commandes shell qui utilisent $EDITORgénéralement sont conçues pour attendre que l'éditeur renvoie une indication que la modification est terminée. Cela signifie généralement que l'éditeur a quitté (par exemple avec viou nano).

Emacs est un moyen de mettre votre EDITORà emacsclientet puis quand vous êtes édité, vous frappez une touche magique ( C-x #) pour indiquer que l' édition est terminée. Si Notepad ++ avait quelque chose de similaire pour les utilisateurs de cygwin, je peux voir comment cela fonctionnerait.

Une autre alternative est d'utiliser le bloc-notes simple, ennuyeux et simple en tant qu'ÉDITEUR et de réserver Notepad ++ pour une utilisation intensive (j'ai eu l'idée de ce blog )

Doug Harris
la source
Génial - cela a fonctionné. Je vais aller avec le bloc-notes vanille en tant qu'ÉDITEUR et le bloc-notes ++ en tant que np ()
Andrew
Le bloc-notes nécessite également d'attendre la fin de l'édition
codezombie
8

Je l'ai résolu avec un simple lien symbolique.

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

Bien sûr, ~ / bin est dans mon $ PATH.

Maintenant, pour ouvrir un fichier, je tape simplement "npp filename.txt" à partir de l'invite cygwin. Je n'ai pas eu à utiliser le & à la fin de la commande.

Cela lancera également un onglet dans la fenêtre Notepad ++ en cours d'exécution plutôt que d'en ouvrir un autre - ET si le fichier est déjà ouvert, il ne l'ouvrira pas à nouveau.

Ethan Vaughn
la source
Comment ajoutez-vous ~ / bin à $ PATH?
eric f
3

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

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

fonctionne également pour x86

mlanzero
la source
2

Ajoutez simplement un espace et une esperluette (&) à la fin de votre commande et le shell retournera immédiatement en mode d'entrée tout en laissant le bloc-notes ++ ouvert.

lors de l'édition:

Je ne parle pas de l'ajouter à votre alias. Ajoutez-le à la fin de votre commande comme ceci:

np whatever &

Robert S Ciaccio
la source
1
Ooh. Cela semble bon jusqu'à présent. Existe-t-il un moyen de mettre cela dans le .bash_profileafin que je n'ai pas besoin de le taper tout le temps?
Andrew
Je ne suis pas un expert bash mais je suppose que vous pourriez faire en sorte que votre alias prenne une variable qui est l'argument, et également inclure l'esperluette à la fin. Quelqu'un plus intelligent avec bash pourrait probablement vous donner la syntaxe exacte. Je savais seulement comment répondre à votre question car j'avais l'habitude de faire exactement la même chose tout en travaillant dans un environnement de développement Windows :)
Robert S Ciaccio
Vous ne pouvez pas faire qu'un alias prenne une variable dans Bash. Vous devez utiliser une fonction ou un script.
pause jusqu'à nouvel ordre.
1

Les alias ne prennent pas d'arguments interpolés. Utilisez plutôt une fonction.

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

Ce script démarre Notepad ++ en arrière-plan, en passant les arguments de ligne de commande avant le '&'

Comme Doug l'a conseillé , avoir une valeur par défaut $EDITORqui ne bloque pas peut causer des problèmes.

Leftium
la source
0

Il y a une commande spécifique dans cygwin pour accomplir cela. Assurez-vous de télécharger run.exe et assurez-vous qu'il se trouve dans votre PATH (ou que votre PATH contient l'exécutable)

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