我的一个伙伴终于让我开始使用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。
答案 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
然后你会看到像这样的东西