windows下使用emacs

1 配置文件

emacs本身是跨平台的,因此应该可以很方便的使用在windwos上。进入windows后的第一个 问题就是配置文件放在那里,其实在windows下,只要在环境变量中设置一个HOME变量指向 你的HOME目录,这样emacs就会自动在这个目录下寻找配置文件。

一旦在windows下设置了HOME目录,其他的一切都和Linux下的使用情况一样了。而且emacs 中还有一个eshell,这个shell应该比windows的CMD好用很多。(但这个shell还不够好,参考 下面的cygwin部分)

2 在EMACS中使用R, ESS

另外试了下在其中使用R,在安装了R以后,进行设置

(setq-default inferior-R-program-name "C:/Program Files/R/R-3.4.1/bin/x64/Rterm.exe")

这样就可以使用M-x R了。

3 将emacs和cygwin结合在一起

windows下的shell基本上没什么用。因为功能太少。但是cygwin可以把linux下的工具都带进来。

安装方法很简单,到这里 下载安装程序,缺省情况下,做最小安装。对我而言,我把它装在

C:\cygwin64

为了能够在emacs中使用 M-x shell 来调用cygwin,需要在emacs中安装一个包 cygwin-mount 安装完成以后,在 .emacs 文件中加入如下的代码

(setenv "PATH" (concat "c:/cygwin64/bin;" (getenv "PATH")))
(setq exec-path (cons "c:/cygwin64/bin/" exec-path))
(require 'cygwin-mount)
(cygwin-mount-activate)

(add-hook 'comint-output-filter-functions
    'shell-strip-ctrl-m nil t)
(add-hook 'comint-output-filter-functions
    'comint-watch-for-password-prompt nil t)
(setq explicit-shell-file-name "bash.exe")
;; For subprocesses invoked via the shell
;; (e.g., "shell -c command")
(setq shell-file-name explicit-shell-file-name)

然后,在emacs中就可以使用cygwin作为shell了。另外,可以在你的home目录下,做一个.bashrc文件 来对bash进行定制。比如,我的.bashrc文件如下:

# ------------------------
# prompt
# ------------------------
# export PS1="[\w] "
export PS1="[\w] "

if [ "$PS" == "" ] ; then
    export PS1="[\w] \$ "
    if [ "$TERM" == "xterm" ] ; then
	export PS1="\[\e[34m\]xterm\$ \[\e[0m\]"
    elif [ "$TERM" == "cygwin" ] ; then
	export PS1="\[\e[32;1m\]cygwin\$ \[\e[0m\]"
    fi
fi

if [ "$TERM" == "xterm" ] ; then
    PROMPT_COMMAND='echo -ne "\e]0;${HOSTNAME} - ${PWD}\007"'
fi

# ------------------------
# path
# ------------------------
PATH=.
PATH=$PATH:/cygdrive/c/cygwin64/bin
PATH=$PATH:/usr/x11R6/bin
PATH=$PATH:/usr/bin
PATH=$PATH:`cygpath -S`
PATH=$PATH:`cygpath -W`

# ------------------------
# alias
# ------------------------
alias h=history
alias rm="rm -i"
alias ls="ls -C"
alias lt="ls -rtl"

在emacs中有了cygwin这个shell以后,基本上linux中能做的事情,在这里都能做了。此时, windows和linux基本上没有太大的区别了。当然这里还有一个问题需要解决,那就是ssh。

4 在emacs中使用ssh

在完成上面的设置以后,还是不能使用ssh,emacs中的cygwin中,如果使用ssh,会出现这样 的问题(参考这里)

Pseudo-terminal will not be allocated because stdin is not a terminal.
ssh_askpass: exec(/usr/sbin/ssh-askpass): No such file or directory
Permission denied, please try again.
ssh_askpass: exec(/usr/sbin/ssh-askpass): No such file or directory
Permission denied, please try again.
ssh_askpass: exec(/usr/sbin/ssh-askpass): No such file or directory
Permission denied (publickey,gssapi-with-mic,password).

有个人写了一个工具来解决这个问题,那就是fakecygpty, 为了安装它,你需要自己在cygwin中 编译并把它拷贝到cygwin能够找到的地方。最后,你需要把fakecygpty.el引入到你emacs的配置 文件。如下所示:

;;;;;;;;for ssh within emacs  under windows
(add-to-list 'load-path "~/.emacs.d/lisp")
(load "fakecygpty")
(require 'fakecygpty)
(fakecygpty-activate)
(setq fakecygpty-program "/usr/bin/fakecygpty.exe")
(setq fakecygpty-qkill-program "/usr/bin/qkill.exe")

5 其他

SBLISP也有windows版,所以slime模式应该也可以用的。

在windows下使用emacs还有一个最大的有点就是使用magit来进行版本控制,windows下的版本 控制本身就不方便使用,如果有了emacs中集成的git,使用起来就基本没什么障碍了。

另外在使用magit时,需要把git所在的目录添加到变量exec-path , 如下所示:

(add-to-list 'exec-path "C:/Program Files (x86)/Git/cmd")

这样就不会出项找不到git命令的问题了。

bb



本文地址: http://www.bagualu.net/wordpress/archives/6658 转载请注明




发表评论

电子邮件地址不会被公开。 必填项已用*标注