使用 fasd 在 emacsclient 中打开文件或目录

使用 fasd 在 emacsclient 中打开文件或目录

我正在尝试打开使用以下命令找到的文件法西德emacsclient。我正在使用fasd -e emacsclient -c -a ''设置为别名。当我调用别名时什么也没有发生,我只是得到一个新的提示。我尝试过直接使用 Emacs,fasd -e emacs效果很好。如果您知道问题所在,请告诉我。

编辑:(按照要求。不过没什么可看的。)


别名
alias fed="fasd -e emacsclient -c -a ''"

fasd.zsh

#
# only init if installed.
fasd_cache="$HOME/.fasd-init-bash"
if [ "$(command -v fasd)" -nt "$fasd_cache" -o ! -s "$fasd_cache" ]; then
  eval "$(fasd --init posix-alias zsh-hook zsh-ccomp zsh-ccomp-install zsh-wcomp zsh-wc\
omp-install)" >| "$fasd_cache"
fi
source "$fasd_cache"
unset fasd_cache


# jump to recently used items
alias a='fasd -a' # any
alias s='fasd -si' # show / search / select
alias d='fasd -d' # directory
alias f='fasd -f' # file
alias z='fasd_cd -d' # cd, same functionality as j in autojump
alias zz='fasd_cd -d -i' # interactive directory jump

结果

应该打开 ~/Downloads/ in emacsclient,但什么也不做:

~ » fed downlo                                                                
~ »

答案1

我不明白 fasd 是如何工作的,但你的别名没有意义。

alias fed="fasd -e emacsclient -c -a "

您将emacsclient作为参数传递给该-e选项,然后-c-a更多选项传递给fasd.最后的空格表示别名后面的单词将进行别名扩展,例如fed a foo扩展为fasd -e emacsclient -c -a fasd -a foo

鉴于这fasd不理解-c为一个选项,我认为您的意思是 call emacsclient -c -a '',即emacsclient使用三个参数-c-a一个空字符串进行调用。

鉴于该方式fasd将参数解释为-e

          e*) o="${o#?}"; if [ "$o" ]; then # there are characters after "-e"
                local exec="$o" # anything after "-e"
(…)
      $exec "$res"

无法将空字符串作为命令中的一个单词传递。请改为定义辅助函数(别名在这里也可以使用)。

emacsclient_c () {
  emacsclient -c -a '' "$@"
}
alias fed='fasd -e emacsclient_c'

答案2

尽管根据文档,别名应该有效,但我通过创建 shell 函数并将 fasd 搜索短语作为参数传递来解决了问题。

fed() {
    emacsclient -c -a '' `fasd -f -a $1`;
}

我没有告诉fasd在 中打开文件,而是返回了 的路径。emacsclientfasdemacsclient

答案3

我如何让它工作只是别名化以下内容
这会将文件传输到使用 fasd 找到的“emacsclient -n -c”。

alias e='f -e "emacsclient -n -c"'

这样我就可以在 emacs 客户端中输入e exam打开。example.txt

相关内容