3

我一直在尝试将ranger-cd用于游侠文件管理器的函数移植到鱼壳,如下所示:

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"'

(这个函数给 ranger 文件管理器一个临时文件来存储最后访问的目录,以便我们可以在 ranger 退出后切换到该目录。)

这是我到目前为止所做的:

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

我猜上面的代码中仍然存在多个错误。有没有人有一个可行的解决方案?

4

4 回答 4

8

我的回答是基于 gzfrancisco 的。但是,我修复了索引 2 处的“'-a'”问题,并且我还确保在退出 ranger 后打印新的提示。

我将以下内容放入~/.config/fish/config.fish

function ranger-cd                                                               

  set tempfile '/tmp/chosendir'                                                  
  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 ; commandline -f repaint'                                           
end
于 2014-03-28T01:07:20.287 回答
1

更简单的解决方案,但它的作用相同。输入外壳:

alias ranger 'ranger --choosedir=$HOME/.rangerdir; set RANGERDIR (cat $HOME/.rangerdir); cd $RANGERDIR'
funcsave ranger

别名是定义函数的快捷方式。funcsave将其保存到~/.config/fish/functions/ranger.fish

于 2018-03-05T23:17:09.723 回答
0

问题是这条线。

test -f $tempfile and

你应该删除 and 因为“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
于 2013-09-15T00:51:43.610 回答
0

我最近发现还有另一种方法可以实现相同的最终目标,而是使用 ranger 脚本:

source ranger

当 ranger 退出时,它会将工作目录更改为上次访问的目录。

于 2019-08-01T16:28:29.920 回答