我在Windows上运行GNU Emacs的这样输入:如何从Emacs中运行Cygwin Bash Shell?
M-x shell
启动Windows命令行DOS外壳。不过,我希望能够在Emacs中运行Cygwin Bash Shell(或任何其他非Windows shell)。这如何轻松完成?
我在Windows上运行GNU Emacs的这样输入:如何从Emacs中运行Cygwin Bash Shell?
M-x shell
启动Windows命令行DOS外壳。不过,我希望能够在Emacs中运行Cygwin Bash Shell(或任何其他非Windows shell)。这如何轻松完成?
shell-file-name
相关的部分是控制,当它想运行shell命令,外壳Emacs使用的变量。
explicit-shell-file-name
是控制该壳M-x shell
启动该变量。
Ken's answer改变这两个,您可能会或可能不希望的。
您也可以通过临时改变explicit-shell-file-name
启动不同的外壳功能:
(defun cygwin-shell()
"Run cygwin bash in shell mode."
(interactive)
(let ((explicit-shell-file-name "C:/cygwin/bin/bash"))
(call-interactively 'shell)))
你可能也想通过--login
参数bash的,因为你开始一个新的Cygwin的会议。你可以通过设置explicit-bash-args
来实现。 (请注意,M-x shell
使用explicit-
程序-args
,其中program是shell的路径名的文件名部分,这就是为什么设置外壳时,你应该不包括.exe
。
我用XEmacs的使用Cygwin,并可以相对容易地从运行bash的XEmacs的。
下面是
;; Let's use CYGWIN bash...
;;
(setq binary-process-input t)
(setq w32-quote-process-args ?\")
(setq shell-file-name "bash") ;; or sh if you rename your bash executable to sh.
(setenv "SHELL" shell-file-name)
(setq explicit-shell-file-name shell-file-name)
(setq explicit-sh-args '("-login" "-i"))
您可以从默认的Windows命令行直接运行的bash您的Emacs内壳*壳*缓冲液:
Microsoft Windows XP [Version 5.1.2600]
(C) Copyright 1985-2001 Microsoft Corp.
C:\temp>bash
bash
然而,没有命令提示是可见的,其可以是迷失方向导致的命令及其输出结果中的所有混合在一起
此外,对于一些unkno。 WN原因,如果你输入一个命令并回车,返回行字符(\ r)附加到您的命令语句的结束导致一个bash错误:
ls
bash: line 1: $'ls\r': command not found
一种解决方法是手动添加评论字符(#)在每个有效地注释掉\ r文本命令的末尾:
ls #
myfile,txt
foo.bar
anotherfile.txt
这一总的做法是远远不够理想,但如果你想放入的bash从Windows的本机外壳可能是有用的做一些快速操作,然后退出以继续在Windows中工作。
关于这个问题的一个更重要的提示。
如果您使用Emacs shell模式,并希望双方的bash,有时在cmd,将它设置为默认使用bash,因为你可以在键入CMD庆典,所得DOS外壳工作得很好。
如果您设置Emacs使用cmd作为shell(这是NT emacs安装的方式),那么dos shell可以正常工作,但是如果您键入bash或bash -i来运行bash shell,则生成的shell不会“ t工作正确 - 请参阅答案0.
但它工作正常,如果bash是“第一个”壳emacs调用。
由于这些方法并没有为我工作,我得到它通过以下方式:
(我使用的默认情况下打开一个DOS外壳NTEmacs,所以也许你的emacs的行为相同)
创建一个名为SHELL('SHELL''''''SHELL')的Windows环境变量并为其指定cygwin安装的bash.exe路径(例如c:\ programs \ cygwin \ bin \ bash.exe)
现在当做Mx shell时,它会打开一个bash。
问候,
的Inno
我使用EmacsW32。 C-h a shell$
给出了一个shell启动命令列表,命令cmd-shell和cygwin-shell看起来很有趣。这两个命令都需要EmacsW32。它们也在菜单中找到:工具> W & 32壳体。
如果您是第一次运行cygwin-shell,并且您没有在Emacs中设置cygwin路径,它会引导您进入定制页面,您可以通过按下查找按钮来设置cygwin路径。
我发现这个最好的解决办法是:
;; When running in Windows, we want to use an alternate shell so we
;; can be more unixy.
(setq shell-file-name "C:/MinGW/msys/1.0/bin/bash")
(setq explicit-shell-file-name shell-file-name)
(setenv "PATH"
(concat ".:/usr/local/bin:/mingw/bin:/bin:"
(replace-regexp-in-string " " "\\\\ "
(replace-regexp-in-string "\\\\" "/"
(replace-regexp-in-string "\\([A-Za-z]\\):" "/\\1"
(getenv "PATH"))))))
与传递“--login”为CJM suggests是你的shell总是会在你的home目录中启动的问题。但是如果你正在编辑一个文件并且你点击了“M-x shell”,你需要在你的文件目录下安装你的shell。此外,我用“M-x grep”和“M-x compile”测试了这个设置。我怀疑其他例子在这里不适用于那些由于目录和PATH问题。
这个elisp片段属于你的〜/ .emacs文件。如果要使用Cygwin而不是MinGW,请将第一个字符串更改为C:/ cygwin/bin/bash。第二个字符串预先添加到您的Windows PATH(将该PATH转换为适当的unixy形式之后);在Cygwin中,你可能想要“〜/ bin:/ usr/local/bin:/ usr/bin:”或类似的东西。
除了@克里斯·琼斯关于避免--login参数bash的答案,我设置以下命令行参数:
(setq explicit-bash-args '("--noediting" "-i"))
的--noediting选项防止与GNU readline库干扰和-i选项指定shell是交互式的。我还在我的主目录中使用.emacs_bash文件进行任何特定于emacs的bash自定义。
您的e-lisp比我的要好 - 我学会了足够让它按照我以前想要的方式运行,并且忘记了它的大部分含义。我认为我的代码最初是从某个常见问题解答中复制出来的...... – 2008-10-24 23:07:57
+1,弓向Yoda大师挥动括号。你的e-lisp会把我从水里吹出来。 – 2009-05-14 12:15:48