我一直在尝试将用于ranger file manager的ranger-cd
函数移植到fish shell中,如下所示:
function ranger-cd {
tempfile='/tmp/chosendir'
/usr/bin/ranger --choosedir="$tempfile" "${@:-$(pwd)}"
test -f "$tempfile" &&
if [ "$(cat -- "$tempfile")" != "$(echo -n `pwd`)" ]; then
cd -- "$(cat "$tempfile")"
fi
rm -f -- "$tempfile"
}
# This binds Ctrl-O to ranger-cd:
bind '"\C-o":"ranger-cd\C-m"'
(此函数为游侠文件管理器提供临时文件以存储最后访问的目录,以便我们可以在游侠退出后更改到该目录。)
这是我到目前为止所做的:
function ranger-cd
set tempfile '/tmp/chosendir'
/usr/bin/ranger --choosedir=$tempfile (pwd)
test -f $tempfile and
if cat $tempfile != echo -n (pwd)
cd (cat $tempfile)
end
rm -f $tempfile
end
function fish_user_key_bindings
bind \co ranger-cd
end
当我使用这个功能时,我得到:
test: unexpected argument at index 2: 'and'
1 /home/gokcecat: !=: No such file or directory
cat: echo: No such file or directory
cat: /home/gokce: Is a directory
我猜测上面的代码中仍然存在多个错误。有没有人有这方面的工作解决方案?
答案 0 :(得分:7)
我的回答是基于gzfrancisco的。但是,我修复了"' -a'在索引2"问题,我还确保在退出游侠后打印一个新的提示。
我在~/.config/fish/config.fish
中添加了以下内容:
function ranger-cd
set tempfile '/tmp/chosendir'
/usr/bin/ranger --choosedir=$tempfile (pwd)
if test -f $tempfile
if [ (cat $tempfile) != (pwd) ]
cd (cat $tempfile)
end
end
rm -f $tempfile
end
function fish_user_key_bindings
bind \co 'ranger-cd ; fish_prompt'
end
答案 1 :(得分:0)
问题在于这一行。
test -f $tempfile and
你应该删除和因为“和”是条件执行 http://ridiculousfish.com/shell/user_doc/html/commands.html#and
function ranger-cd
set tempfile '/tmp/chosendir'
/usr/bin/ranger --choosedir=$tempfile (pwd)
if test -f $tempfile and cat $tempfile != echo -n (pwd)
cd (cat $tempfile)
end
rm -f $tempfile
end
答案 2 :(得分:0)
更简单的解决方案,但它也是如此。输入shell:
alias ranger 'ranger --choosedir=$HOME/.rangerdir; set RANGERDIR (cat $HOME/.rangerdir); cd $RANGERDIR'
funcsave ranger
alias是一个定义函数的快捷方式。 funcsave将其保存到~/.config/fish/functions/ranger.fish
答案 3 :(得分:0)
我最近发现,有另一种方法可以实现这一最终目标,方法是采购护林员脚本:
source ranger
然后退出护林员,它将把工作目录更改为上次访问的目录。