我已按如下方式更改了我的Powershell配置文件,以便在posh-hg提示符中包含datetime:
if(!(Test-Path function:\TabExpansion)) { New-Item function:\Global:TabExpansion -value '' | Out-Null }
# Load posh-hg example profile
. 'C:\ProgramData\chocolatey\lib\Posh-HG\JeremySkinner-posh-hg-e273b0d\profile.example.ps1'
Rename-Item Function:\Prompt PoshHGPrompt -Force
function Prompt() {if(Test-Path Function:\PrePoshHGPrompt){++$global:poshScope; New-Item function:\script:Write-host -value "param([object] `$object, `$backgroundColor, `$foregroundColor, [switch] `$nonewline) " -Force | Out-Null;$private:p = PrePoshHGPrompt; if(--$global:poshScope -eq 0) {Remove-Item function:\Write-Host -Force}}PoshHGPrompt}
$global:HgPromptSettings.BeforeText = " [$(Get-Date -format g)] `n["
由于某种原因,日期根本没有更新。我怀疑它可能与posh-hg如何建立提示有关,但这有点疯狂猜测。
答案 0 :(得分:1)
目前,您无法使用BeforeText
进行操作。
如果您look at the code,BeforeText
作为字符串(L29)传递到Write-Prompt
:
Write-Prompt $s.BeforeText -BackgroundColor $s.BeforeBackgroundColor -ForegroundColor $s.BeforeForegroundColor
为了实现这一点,必须更改Write-Prompt
功能代码:
function Write-Prompt($Object, $ForegroundColor, $BackgroundColor = -1) {
$parameters = @{
'NoNewLine' = $True;
'ForegroundColor' = $ForegroundColor;
}
if ($Object -is [ScriptBlock]) {
$parameters.Add('Object', (&$Object))
} else {
$parameters.Add('Object', $Object)
}
if ($BackgroundColor -ge 0) {
$parameters.Add('BackgroundColor', $BackgroundColor)
}
Write-Host @parameters
}
我确信可能需要进行一些更改以使其完美,但无论如何......
然后,您可以像这样设置$global:HgPromptSettings.BeforeText
:
$global:HgPromptSettings.BeforeText = {" [$(Get-Date -format g)] `n["}
答案 1 :(得分:0)
我试图对$global:GitPromptSettings.DefaultPromptPrefix = '$(Get-Date -format HH:mm:ss) '
做同样的事情,并得到相同的结果:时间戳在会话开始时评估一次,之后被修复。
所以我搜索了互联网,发现了关于posh-hg的这个帖子,并得出结论,这对于posh-git也是如此。
同一天晚上,我正在阅读git后问题,并发现this thread关于在提示中添加'副作用'。考虑到我的失败,我添加了一条评论,告诉它可能因为'仅评估一次'而无法工作。
但是看得出来!事实证明,我的powershell知识完全像我害怕的那样有限:
@rkeithhill:提供字符串时要小心使用单引号。如果你使用双引号,任何变量/子表达式,即$()只会被eval一次。
所以现在我的个人资料中有{{1}},并在我的提示前面加上时间戳。原因是,我不知道这是否适用于posh-hg,但至少你可以试试。