Попробуйте следующую функцию, которая должна работать на Windows и Unix-подобных платформах (в PowerShell Core ), так:
function global:prompt {
$dirSep = [IO.Path]::DirectorySeparatorChar
$pathComponents = $PWD.Path.Split($dirSep)
$displayPath = if ($pathComponents.Count -le 3) {
$PWD.Path
} else {
'…{0}{1}' -f $dirSep, ($pathComponents[-2,-1] -join $dirSep)
}
"PS {0}> " -f $displayPath
}
Обратите внимание, что я выбрал один символ …
( ГОРИЗОНТАЛЬНЫЙ ЭЛЛИПСИС, U+2026
) для представления пропущенной части пути, поскольку ..
можно спутать со ссылкой на каталог parent .
Примечание. Символ не-ASCII-диапазона …
распознается правильно только в том случае, если файл сценария, в который входит файл $PROFILE
, либо сохранен как UTF-8 с спецификацией [1] или как UTF-16LE («Unicode»).
Если по какой-то причине это не работает, используйте три разных периода ('...'
вместо '…'
)Однако обратите внимание, что это приведет к более длинной подсказке.
[1] Спецификация необходима только в Windows PowerShell ;PowerShell Core , напротив, использует UTF-8 по умолчанию, поэтому спецификация не требуется.