我正在尝试自定义zsh
提示。下面的函数调用Python脚本并返回整个工作目录路径减去当前目录。例如。 ~/research
会转到~
。这是.zsh-theme
文件。
function collapse_pwd {
echo $(python ~/.oh-my-zsh/themes/truncatecwd.py '%~' '%c')
}
这是python脚本truncatecwd.py
。
#!/usr/bin/env python
import sys
cwd = sys.argv[1]
current_dir_end = sys.argv[2]
sys.stdout.write(cwd[0: cwd.index(current_dir_end)])
这里发生了奇怪的事情。我一直收到错误消息,指出在current_dir_end
中找不到cwd
。我认为它与字符串格式有关。我打印出cwd
,似乎是正确的:'~/.oh-my-zsh/themes'
。但是,当我调用它的长度时,我得到2
。同样适用于current_dir_end
:我得到长度2
。实际上,即使cwd = '~'
也会返回2
的长度。很明显,一些微妙的(但可能很简单)正在发生。
感谢您的帮助。
答案 0 :(得分:3)
我真的不明白你在这里尝试做什么,但是没有足够的Python可以满足以下要求吗?
collapse_pwd() {
local result=${1:-$PWD}
if [[ $result = */* ]]; then
result="${result%/*}"
fi
if [[ $result = "$HOME"/* ]]; then
result="~/${result#$HOME/}"
fi
echo "$result"
}
答案 1 :(得分:1)
import os
import sys
cwd = os.getcwd()
ret = os.path.sep.join(cwd.split(os.path.sep)[:-1])
sys.stdout.write(ret)
另外,只是一个观察,因为我不太熟悉zsh你可能需要用-u选项调用python来确保无缓冲的输出,否则可能会写一个换行符,而这对于命令提示符来说并不好。