如何最好地集成Emacs和Cygwin?

时间:2010-01-15 23:50:26

标签: bash emacs cygwin

在Windows上有很多方法可以将Cygwin与Emacs集成。 EmacsWiki显示了一些想法。以下是我找到的选项:

  1. 使用Cygwin附带的Emacs。 (如果需要,可以找到一种获取cmd.exe的方法。)
  2. 使用NTEmacs和Cygwin作为“有时”shell。 (启动Cygwin的特殊命令)
  3. 使用NTEmacs和Cygwin作为“always”shell。 (M-x shell启动cygwin)
  4. 清楚说明“为什么”。以下是我希望Cygwin与Emacs一起使用的几个例子:

    1. M-x whois不适用于NTEmacs。
    2. Wanderlust这样的软件包包含一个不友好的Makefile。
    3. 有时我只需要一个bash shell。
    4. 那么Emacs / Cygwin的哪个选项对其他人有效?还有,有没有人成功尝试过MSYS?

12 个答案:

答案 0 :(得分:19)

在Cygwin中使用Emacs。不是XEmacs..Emacs。我只是从Cygwin安装所有内容并输入以下命令来运行Emacs:

XWin -multiwindow
export DISPLAY=:0.0
emacs&

创建指向C驱动器(或任何其他驱动器)的链接也可能有所帮助:

ln -s /cygdrive/c /c

我已经使用了几个月,它总是运作良好。我经常使用TRAMP和颠覆等高级功能而没有任何问题。像cedet这样的所有高级软件包都能正常工作。

如果你没有注意到,我就是原版海报。经过我的所有研究和尝试,这个工作,我很高兴。干得好Cygwin!

另外,我建议不要在Emacs中使用shell。像top这样的工具似乎不起作用。相反,使用MinTTY和屏幕。 Cygwin直接在MinTTY中为你提供ssh(你不需要putty)。最好的部分是我的许多Linux知识在Windows中无缝运行。

答案 1 :(得分:9)

最好的解决方案必须是cygwin emacs-w32。它使用win32 native gui,并使用cygswin POSIX系统。这意味着你有一个windows native gui程序和所有cygwin路径,shell工作。

安装非常简单:setup.exe - > emacs的-W32。 现在版本号是:24.2.93.1

太好了。

答案 2 :(得分:8)

第四种选择是在Cygwin的一个替代终端中运行emacs:(u)rxvt,mintty,xterm。这些都提供了比控制台更好的终端仿真,这意味着改进了emacs体验。

答案 3 :(得分:7)

我倾向于将emacs on windows的原生版本与gnu utils的(也是原生的)端口结合使用,这些端口比Cygwin端口快得多,但不完整。

然后我只使用一个cygwin窗口来显示bash shell和缺少的东西。

答案 4 :(得分:4)

我在root上安装了cygwin。它明确警告你反对它,但我没有看到任何不良影响。 (我从Steve Yegge那里得到了一条建议。)

我还安装了cygwin-mount,这有助于帮助。另外,我不得不从ispell切换到aspell。最后,一点点.emacs调整,我很高兴:

;;;;;;;;;;;;;;;;;;;;;;
;;CygForTheWin
;;*cygwin
(when (equal system-type 'windows-nt) 
(message "Setting up Cygwin...")
(let* ((cygwin-root "c:")
       (cygwin-bin (concat cygwin-root "/bin"))
       (gambit-bin "/usr/local/Gambit-C/4.0b22/bin/")
       (snow-bin "/usr/local/snow/current/bin")
       (mysql-bin "/wamp/bin/mysql/mysql5.0.51a/bin/"))
   (setenv "PATH" (concat cygwin-bin ";" ;
                          snow-bin ";" 
                          gambit-bin ";"
                          mysql-bin ";"
                          "c:/usr/local/jdk1.60_03/bin/"
                          ".;")  
           (getenv "PATH"))
   (setq exec-path (cons cygwin-bin exec-path)))

(require 'cygwin-mount)
(cygwin-mount-activate)

(setq shell-file-name "bash")
(setq explicit-shell-file-name "bash")

(defun jonnay-cygwin-shell ()
  "Wrapper around cygwin-shell so that it doesn't throw an error"
  (interactive)
  (condition-case e
   (cygwin-shell)
   (message "There was an error trying to launch the shell: %s" e)))

(message "Setting up Cygwin...Done")


;; found from the manual, check, use and make go?
 (defun my-shell-setup ()
   "For Cygwin bash under Emacs 20"
   (setq comint-scroll-show-maximum-output 'this)
   (setq comint-completion-addsuffix t)
   (setq comint-eol-on-send t)
   (setq w32-quote-process-args ?\")
   (make-variable-buffer-local 'comint-completion-addsuffix))

(setq shell-mode-hook 'my-shell-setup)
(add-hook 'emacs-startup-hook 'jonnay-cygwin-shell)
)

答案 5 :(得分:1)

我喜欢您从Cygwin安装程序中获得的xemacs版本。开箱即用, Alt 键映射到 Meta 就好了,只要你需要它就可以使用bash shell缓冲区。

答案 6 :(得分:1)

第三种选择。我正在使用NTEmacs + EmacsW32 + Cygwin。这样我就有了一个带有Unix实用程序和bash shell的本机Windows应用程序。 makefile工作,但我从未使用过M-x whois。我想不出这个设置的任何直接缺点。

以下是我设置的有趣内容,基本上与http://www.emacswiki.org/emacs/NTEmacsWithCygwin非常相似:

(setq cygwin-root "c:/cygwin/")
(setq private-bin (concat home-dir "/usr/bin"))
(setq exec-path (cons private-bin exec-path))
(setenv "PATH" (concat private-bin ";" (getenv "PATH")))
; Add Cygwin Emacs stuff
(add-to-load-path "/usr/share/emacs/site-lisp")
; Add Cygwin Info pages
(add-to-list 'Info-default-directory-list
             (concat cygwin-root "usr/share/info/"))

(setq shell-file-name "bash")
(setenv "SHELL" shell-file-name)
(setq explicit-shell-file-name shell-file-name)

(setq w32shell-cygwin-bin "c:\\cygwin\\bin")
(require 'w32shell)
(w32shell-add-emacs)
(w32shell-set-shell "cygwin")

答案 7 :(得分:1)

就像@justinhj一样,我在windows上使用本机版本的emacs以及gnu utils的(也是原生的)端口(例如,用于'strings'等的binutils)。

始终使用cygwin作为shell,在Emacs中或独立于Emacs。这样,我保留了外观&当我转回来时感觉我的工作环境从Windows到/从Linux / AIX / Solaris。

不幸的是,当我将我的Emacs从21.2升级到23.2时,默认情况下Emacs失去了识别'/ cygwin / c'的能力。我现在必须研究它,看看为什么它不再起作用,我能做些什么来解决这个问题。我刚刚找到以下信息,我会查看它是否有用。现在我需要一个外部软件包,而且默认情况下总是会出现这种情况,这似乎很奇怪:

但是,我更喜欢尽量减少使用额外的包。所以,我只是进一步检查了我的“新”Emacs + Cygwin的行为,似乎只需输入'/'即可访问C:驱动器。

这很酷 - 只有一个字符(斜杠)而不是/ cygdrive / c。但是,Emacs中的shell会提示'/ cygdrive / c',这有点令人困惑。

答案 8 :(得分:0)

我调查了三个选项,都使用了窗口(但不是X11)版本的Emacs。 (终端对我来说太硬了。)这里有:

  1. Cygwin附带的XEmacs
  2. EmacsW32
  3. 适用于Windows的标准Emacs
  4. Cygwin的人们希望引导你进入他们的Emacs / XEmacs。在http://cygwin.com/faq/faq-nochunks.html#faq.using.ntemacs中,他们写道“请注意,如果您使用Cygwin安装程序中的Emacs或XEmacs的Cygwin端口,则所有这些都”正常工作“。

    除xemacs外,请务必安装xemacs-sumo软件包;否则M-x shell将无法正常工作。您可以在不使用X11作为

    的情况下启动xemacs
    DISPLAY= xemacs &
    

    缺点:1)男孩,这是一个 Emacs。当其他人都使用Emacs 23时,我真的不想继续使用它.2)我发现即使你没有运行X11,安装也需要一大堆X11库,这有点令人讨厌。 3)没有开箱即用的cua模式。

    EmacsW32(http://ourcomments.org/Emacs/EmacsW32.html)具有一键安装程序,M-x cygwin-shell命令和CUA模式。但Cygwin shell中的制表符完成使用Windows路径,这让我发疯。自2008年以来,W32端口似乎没有得到积极改进,但它们为安装人员提供了最新的Emacs版本。

    Windows的标准Emacs似乎是最好的选择。从http://ftp.gnu.org/pub/gnu/emacs/windows/下载,解压缩,然后从Cygwin内部启动 。然后它拿起主目录等。将http://cygwin.com/faq/faq-nochunks.html#faq.using.ntemacs的mumbo-jumbo粘贴到〜/ .emacs中。重新启动Emacs并运行M-x shell。一切都按预期工作。

答案 9 :(得分:0)

FWIW,我使用正常的GNU Emacs Windows版本,我使用Cygwin。我从来没有遇到任何问题,但我对Emacs以外的Cygwin并没有做太多的事情。哦,我正在使用旧版本的Cygwin(包含所有版本的Emacs)。

对于设置,我按顺序加载这两个文件:

答案 10 :(得分:0)

从源代码构建emacs:

- Download最新的稳定版本(撰写本文时为24.5)。

-Unzip并cd进emacs文件夹

- 按顺序运行这些步骤:

$ ./autogen.sh
$ ./configure --with-w32
$ make
$ make install

手动将emacs.exe从“emacs文件夹”/ src复制到cygwin / bin

-Run emacs:

$ emacs&

答案 11 :(得分:0)

我在Win32 27.1发行版中使用wsl2。我按照此处的说明进行操作:https://www.emacswiki.org/emacs/NTEmacsWithCygwin我所做的唯一更改是:

(let* ((cygwin-root "//wsl$/Ubuntu/")

Ubuntu是您的发行版。

我没有正确的/ mnt / c工作。