如何最好地整合Emacs和Cygwin?

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

  1. 使用Cygwin附带的Emacs。 (然后find一个方法来到达cmd.exe,如果你想要的话)。
  2. 使用NTEmacs和Cygwin作为“有时”的shell。 (一个特别的命令来启动Cygwin)
  3. 使用NTEmacs和Cygwin作为“始终”的shell。 (Mx shell启动cygwin)

为了说明“为什么”。 这里有几个例子,我希望我有Cygwin和Emacs:

  1. Mx的whois不工作在NTEmacs。
  2. 像Wanderlust这样的软件包包含一个不友好的Windows的Makefile。
  3. 有时我只需要一个bash shell的东西。

那么Emacs / Cygwin的哪个选项适用于其他? 另外,有没有人试过MSYS集成成功?

在Cygwin中使用Emacs。 不是XEmacs..Emacs。 我只是安装Cygwin的所有东西,input以下内容来运行Emacs:

 XWin  - 多窗口
导出DISPLAY =:0.0
 emacs的&

它也可能有助于创build一个链接到您的C驱动器(或任何其他驱动器),如下所示:

ln -s /cygdrive/c /c

我已经使用了这几个月,它总是运作良好。 我不断使用TRAMP和颠覆等高级function,没有任何问题。 像cedet所有先进的软件包只是工作。

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

另外,我build议不要在Emacs中使用shell。 像top公用事业似乎不工作。 相反,使用MinTTY和屏幕。 Cygwin在MinTTY中直接给你ssh(你不需要腻子)。 最好的部分是我的许多Linux知识在Windows中无缝地工作。

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

最好的解决scheme必须是cygwin emacs-w32。 它使用win32 native gui,并使用cygswin POSIX系统。 这意味着你有一个Windows本地GUI程序和所有的cygwinpath,shell工作。

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

太好了。

我倾向于在Windows上使用emacs的本地版本,与gnu utils的(也是本地的)端口一起使用,虽然它们比Cygwin的要快得多,但是不太完整。

然后我只是使用一个cygwin窗口的bash shell和缺less的东西。

我在根上安装了cygwin。 它明确地警告你,但我没有看到任何不良影响。 (我发现了Steve Yegge的build议)。

我也安装了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) ) 

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

第三个选项。 我正在使用NTEmacs + EmacsW32 + Cygwin。 这样我有一个本地Windows应用程序与Unix实用程序和bash shell。 makefiles的工作,但我从来没有使用Mx 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") 

就像@justinhj一样,我在窗口上使用emacs的本地版本,与gnu utils的(也是本地的)端口一起使用(例如,用于'strings'的binutils等)。

而且我总是使用cygwin作为shell,在Emacs中或独立于Emacs。 这样,当我从Windows切换到Linux / AIX / Solaris时,我保留了工作环境的外观和感觉。

不幸的是,当我将Emacs从21.2升级到23.2时,Emacs默认情况下失去了识别'/ cygwin / c'的能力。 我现在必须研究这个,看看为什么它不再工作,我可以做些什么来解决这个问题。 我刚刚发现了以下信息,我将检查它是否有帮助。 现在看起来很奇怪,我需要一个外部的包,用于默认情况下总是存在的东西:

  • 回复:/ cygdrive / c vs c:
  • cygwin的-mount.el

然而,我更喜欢尽量减less使用额外的软件包。 所以,我只是进一步检查了我的“新”Emacs + Cygwin的行为,似乎只要input“/”就可以访问C:驱动器。

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

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

  1. Cygwin附带的XEmacs
  2. EmacsW32
  3. 用于Windows的标准Emacs

Cygwin的人想引导你到他们的Emacs / XEmacs。 在http://cygwin.com/faq/faq-nochunks.html#faq.using.ntemacs中; ,他们写道:“如果使用Cygwin安装程序中的Emacs或XEmacs的Cygwin端口,请注意,所有这些都”正常工作“ ”。

除了xemacs以外,一定要安装xemacs-sumo软件包; 否则Mx shell将无法工作。 您可以启动xemacs而不使用X11

 DISPLAY= xemacs & 

缺点:1)男孩,这是一个老的 Emacs。 当其他人都使用Emacs 23时,我并不是真的想要这个士兵。2)我发现,即使你没有运行X11,安装也需要大量的X11库,这让人感到有些恼火。 3)没有cua模式开箱。

EmacsW32(http://ourcomments.org/Emacs/EmacsW32.html)具有一键安装程序,Mx cygwin-shell命令和CUA模式。 但是,Cygwin shell中的Tab完成使用Windowspath,这使我疯狂。 自2008年以来,W32端口似乎没有得到积极的改进,但它们为安装者提供了更新的Emacs版本。

Windows的标准Emacs似乎是最好的select。 从http://ftp.gnu.org/pub/gnu/emacs/windows/下载,解压并;从Cygwin中启动。 然后,它拿起主目录等。粘贴从http://cygwin.com/faq/faq-nochunks.html#faq.using.ntemacs的巨型巨集到〜/ .emacs。 重新启动Emacs并运行Mx shell。 所有按预期工作。

FWIW,我使用正常的GNU Emacs Windows版本,并使用Cygwin。 我从来没有遇到过任何问题,但是我对Emacs以外的Cygwin没有太多的了解。 哦,我正在使用旧版本的Cygwin(与所有版本的Emacs)。

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

从源代码构buildemacs:

– 下载最新的稳定版本(截至撰写本文时为24.5)。

解压缩并进入emacs文件夹

按顺序执行以下步骤:

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

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

– emacs:

$ emacs&