在Fish Shell中获取当前目录(没有完整路径)

时间:2015-07-06 17:59:03

标签: prompt fish

我的一个伙伴终于让我开始使用Fish Shell,而我试图将其设置为类似于我的Bash。我PS1中的.bash_profile列出了我当前所在的目录,然后是>。但是,它不是绝对路径(例如/Users/me/Documents/...~/Documents/...)。如果我在/Users/me/Documents/projects/Go/project1/,则提示只会说project1 >

是否有替代可用于Bash的\W替换的鱼壳?同样,我只想要我所在的文件夹,而不是完整的路径。我知道你可以使用echo (pwd)来解决所有问题。

我查看了basename计划和echo "${PWD##*/}",但这些似乎只适用于Bash。

3 个答案:

答案 0 :(得分:12)

取自@Jubobs'回答: basename只是一个Unix实用程序;它不与特定的shell相关联,并且应该在Bash和Fish中同样有效。

似乎我在错误的上下文中使用basename,没有后缀。

使用以下方法解决了这个问题:

function fish_prompt
    echo (basename $PWD) "><> "
end

答案 1 :(得分:3)

另一种选择:带有prompt_pwd功能的鱼船将/Users/me/Documents/projects/Go/project1/显示为~/D/p/G/project1

function fish_prompt
    echo (prompt_pwd) "><> "
end

答案 2 :(得分:1)

prompt_pwd.fish的完整代码如下。您必须将其放在目录~/.config/fish/functions/

function prompt_pwd --description "Print the current working directory, shortened to fit the prompt"
    set -q argv[1]
    and switch $argv[1]
        case -h --help
            __fish_print_help prompt_pwd
            return 0
    end

    # This allows overriding fish_prompt_pwd_dir_length from the outside (global or universal) without leaking it
    set -q fish_prompt_pwd_dir_length
    or set -l fish_prompt_pwd_dir_length 1

    # Replace $HOME with "~"
    set realhome ~

    # @EDITED by Thiago Andrade
    set tmpdir (basename $PWD)
    set -l tmp (string replace -r '^'"$realhome"'($|/)' '~$1' $tmpdir)
    # ORIGINAL VERSION
    # set -l tmp (string replace -r '^'"$realhome"'($|/)' '~$1' $PWD)

    if [ $fish_prompt_pwd_dir_length -eq 0 ]
        echo $tmp
    else
        # Shorten to at most $fish_prompt_pwd_dir_length characters per directory
        string replace -ar '(\.?[^/]{'"$fish_prompt_pwd_dir_length"'})[^/]*/' '$1/' $tmp
    end
end

然后你会看到像这样的东西

enter image description here