从终端启动spacemacs会阻塞终端

从终端中启动emacs会导致终端无法继续使用(如下图)这时只能再开一个新的Tab,而记得之前使用vim的时候没有这种问题,不知道大神们有什么好的解决方案。

从终端启动emacs,此时这个Tab处于无法使用的状态。 新建一个Tab,启动vim。 vim启动后这个Tab还是可用的,这样就避免了再开一个Tab的麻烦。 去网上找了各大论坛也没有发现和自己一样的问题,不知道诸位是不是也是这样的状况,或者我这只是个特例?

emacs &

哇……超简洁的解决方法 厉害了

我改了emacs自带的启动脚本,在最后加了一个&。 他现在长这样

#!/bin/bash

exec /usr/local/Cellar/emacs/26.1_1/Emacs.app/Contents/MacOS/Emacs “$@” &

但是,当我在某个目录下输入 emacs ***.c的时候,emacs会到~目录下寻找.c文件,大神有没有办法让emacs正确的接收参数,找到文件呢? 小白求教 :no_mouth::no_mouth::no_mouth:

为什么不用 /usr/local/bin/emacs

1 个赞

这两个是一样的啊…… 就是个连接而已,都连接到/usr/local/Cellar/emacs/26.1_1/bin/emacs :no_mouth:

你换成 /usr/local/bin/emacs 就会知道为什么不一样了

刚才说错了,我现在emacs就是绑到了/usr/local/bin/emacs…… :no_mouth:

那么,为什么需要 exec 呢

这个是那个脚本文件里的内容啊 就是/usr/local/bin/emacs连接到了/usr/local/Cellar/emacs/26.1_1/bin/emacs而,这个文件的内容就是我上面写的那个…… :no_mouth:

启动脚本干嘛改它,自己写个

#!bin/sh
emacs "$@" &

放 PATH 里就行了

这样跟我的那个是一样的啊…… 而且这样写会导致找不到emacs…… 会导致文件路径有问题……:no_mouth:

试过了?没试过?

试过了,找不到emacs……

把脚本中最后的&去掉再手动在emacs ***.c后面加上&就可以正常找到文件。但是再通过修改脚本的方法就不行……

不知道发生了啥……:no_mouth:

脚本中把 exec 去掉试试,怀疑这个过程中改了 PWD 这个环境变量。

另外为何不直接从图标启动呢?

发现$@会直接被展开成/Users/……的形式直接判断一下用户有没有自己写路径就解决了。


原来的脚本无法处理多参数的情况,现在处理一下

现在启动脚本长这个样子

#!/bin/bash
args=
for arg in $@
do
    if [ ${arg:0:1} == / ] || [ ${arg:0:1} == - ]
    then
        if [ $args ]
        then
            args="$args $arg"
        else
            args="$arg"
        fi
   else
       if [ $args ]
       then
           args="$args `pwd -P`/$arg"
       else
           args="`pwd -P`/$arg"
       fi
   fi
done
if [ $args ]
then
    exec /usr/local/Cellar/emacs/26.1_1/Emacs.app/Contents/MacOS/Emacs "$args" &
else
    exec /usr/local/Cellar/emacs/26.1_1/Emacs.app/Contents/MacOS/Emacs "$@" &
fi

从图标启动还要点一下…… 而且,我习惯编辑完一个文件直接关emacs,下次要编辑的时候直接从终端再打开…… 所以每次都点图标的话会很不舒服……

感觉用alias会更方便一点