Comment puis-je utiliser Cygwin Shell Bash à partir de l'intérieur d'Emacs?
Je suis sous GNU Emacs sous Windows donc entrer:
M-x shell
lance la ligne de commande de Windows shell DOS. Cependant, je voudrais, au contraire, être en mesure d'exécuter le Shell Bash Cygwin (ou de toute autre non-Windows shell) à l'intérieur d'Emacs. Comment cela peut-il être fait facilement?
Vous devez vous connecter pour publier un commentaire.
shell-file-name
est la variable qui commande le shell Emacs utilise quand il veut exécuter une commande shell.explicit-shell-file-name
est la variable qui commande le shellM-x shell
démarre.Ken répondre changements, à la fois de ceux-ci, que vous pouvez ou ne souhaitez pas.
Vous pouvez également avoir une fonction qui commence à un environnement différent en changeant temporairement
explicit-shell-file-name
:Vous voudrez probablement passer le
--login
argument pour bash, parce que vous êtes le démarrage d'une nouvelle session Cygwin. Vous pouvez le faire en définissantexplicit-bash-args
. (Notez queM-x shell
utiliseexplicit-
PROGRAMME-args
, où le PROGRAMME est le nom de fichier de la partie de la coque du chemin. C'est pourquoi vous ne devez pas inclure le.exe
lors de la configuration de l'interpréteur de commandes.La meilleure solution que j'ai trouvé est la suivante:
Le problème avec le passage "--login" comme cjm suggère est votre environnement de ligne de commande commence toujours dans votre répertoire home. Mais si vous êtes à la modification d'un fichier et de cliquer sur "M-x shell", vous voulez que votre shell dans le fichier de répertoire. En outre, j'ai testé cette configuration avec "M-x grep" et "M-x compile". Je suis suspect que d'autres exemples ici ne fonctionne pas avec celles dues au répertoire et le CHEMIN des problèmes.
Ce elisp extrait appartient à votre ~/.emacs fichier. Si vous souhaitez utiliser Cygwin au lieu de MinGW, modifiez la première chaîne de C:/cygwin/bin/bash. La deuxième chaîne est ajoutée à votre CHEMIN d'accès Windows (après la conversion de cette VOIE d'une manière appropriée unixy forme); dans Cygwin, vous voudrez probablement "~/bin:/usr/local/bin:/usr/bin:" ou quelque chose de similaire.
- Je utiliser XEmacs avec Cygwin, et peut fonctionner bash de XEmacs relativement facilement.
Voici la section pertinente de
init.el
Un plus important indice sur ce sujet.
Si vous utilisez Emacs mode shell et veulent à la fois bash et cmd parfois, de le configurer pour utiliser bash par défaut, parce que vous pouvez taper cmd à bash et le dos shell fonctionne très bien.
Si vous installer Emacs utiliser cmd en tant que shell (qui est la façon NT emacs installe), puis ms-dos shell fonctionne très bien, mais si vous tapez bash bash -je exécuter un shell bash, le shell ne fonctionne pas droit - voir la réponse 0.
Mais il fonctionne très bien si bash est le "premier" shell emacs invoque.
Vous pouvez exécuter bash directement à partir de la valeur par défaut de Windows shell de ligne de commande au sein de votre Emacs *shell* mémoire tampon:
Cependant, aucune invite de commande est visible, ce qui peut être déroutant résultant dans vos commandes et de leurs résultats en sortie de tous les réunir.
En outre, pour une raison inconnue, si vous saisissez une commande et appuyez sur return, un retour de caractère de ligne (\r) est ajouté à la fin de votre commande instruction provoquant un bash erreur:
Une solution de contournement consiste à ajouter manuellement un caractère de commentaire (#) à la fin de chaque commande, ce qui a effectivement commentaires la \r texte:
Cette approche globale est loin d'être idéale, mais peut être utile si vous voulez tomber dans bash à partir de Windows native de shell pour faire quelques opérations et ensuite sortir de continuer à travailler dans Windows.
Je suis en utilisant EmacsW32.
C-h a shell$
donne une liste de shell de lancement de commandes et les commandes cmd-shell et cygwin-shell air intéressant. Les deux commandes ont besoin d'EmacsW32. Ils sont également présents dans le menu: Outils > W&32 Coquilles.Si vous exécutez cygwin-shell pour la première fois, et si vous n'avez pas d'installation de cygwin chemin dans Emacs, il vous conduit à la Personnalisation de la page où vous pouvez d'installation de cygwin chemin en appuyant sur le bouton Rechercher.
Depuis ces approches ne fonctionne pas pour moi je l'ai eu de la manière suivante:
(Je suis en utilisant NTEmacs qui ouvre un dos shell par défaut, donc peut-être que votre emacs se comporte de la même)
Créer une variable d'environnement windows nommé SHELL ('SHELL' pas '$SHELL") et lui donner le chemin d'accès à bash.exe de votre cygwin d'installation (par exemple c:\programs\cygwin\bin\bash.exe)
Maintenant, quand faire M-x shell, il ouvre un bash.
Ce qui concerne,
Inno
En plus de @Chris Jones " réponse sur la façon d'éviter l' --login argument pour bash, j'ai mis la ligne de commande suivante arguments:
L' --noediting option empêche toute interférence avec la bibliothèque GNU readline et l'option-i indique que le shell est interactif. J'utilise aussi les .emacs_bash fichier dans mon répertoire home pour toute emacs spécifiques à bash personnalisations.