我在emacs中安装了powershell包。我使用M-x powershell启动了powershell。在powershell窗口中,我能够像ls etc一样运行命令,但是我无法执行powershell脚本。我试图在emacs中使用cmd作为默认shell,并按照此处的描述从中执行powershell脚本;
但它冻结了。同样,当我尝试在emacs中的powershell / cmd中运行vim时,它会冻结。我想指出脚本和vim在powershell和cmd中工作得很好,如果我在emacs之外运行它。
答案 0 :(得分:1)
在M-x powershell
和M-x shell
中,终端是" dumb"并且只能理解打印的程序,而不了解全屏的程序。
因此,它适用于ls
,cat
和cd
,但会在vim
,man
和less
上失败。我打赌你的脚本试图打开vim
,不是吗?
此限制存在的原因是:当程序全屏显示时,它会捕获所有键盘输入。因此,如果您打开vim
并键入C-x
,它是否运行C-x
的Emacs命令或Vim命令?如果您始终运行Emacs命令,这意味着当您键入j
时,它会将j
插入Emacs缓冲区,而不是在Vim中向下滚动。 Vim将无法使用。如果你总是运行Vim命令,这意味着你不能再使用C-x C-c
退出Emacs,因为命令将被Vim吸收。
一种解决方法是使用M-x term
。在term
中,所有击键都被发送到程序,因此您可以像平常一样打开并使用Vim。要运行Emacs命令,请从C-c
开始。您可以阅读更多相关信息here。我不确定它是否存在于Windows中。
使用emacsclient
的另一种解决方法:
;; in init.el
(server-start)
# in a shell
$ emacsclient file.txt
这将在您现有的Emacs窗口中打开该文件。完成编辑文件后,按C-x #
返回shell。