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!

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 )


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.


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


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 &


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 & }

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.


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"
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.