英文:
Add a new line before each Powershell prompt (including the conda environment name)
问题
I am trying to add a new line before each Powershell prompt to improve readability as shown below.
Instead of:
(base) PS C:\Users\myname --> "Hello"
Hello
(base) PS C:\Users\myname --> "Wow"
Wow
I would like an output like this:
(base) PS C:\Users\myname --> "Hello"
Hello
(base) PS C:\Users\myname --> "Wow"
Wow
(base) PS C:\Users\myname -->
My powershell profile, which I have modified for my prompt and to add the conda environment hook as per other SO posts is as follows:
function Prompt
{
    $promptString = "PS " + $(Get-Location) + " -->"
    Write-Host "$promptString" -NoNewline -ForegroundColor Yellow
    return " "
}
%{& "C:\Users\myname\Anaconda3\Scripts\conda.exe" "shell.powershell" "hook"} | Out-String | Invoke-Expression
I have tried adding the new line parameter ("n"`) to the function prompt as follows:
$promptString = "`nPS " + $(Get-Location) + " -->"
This gives me the output as:
(base)
PS C:\Users\myname -->
which is not what I want.
I also tried adding a Write-Host before the conda hook but that doesn't work either:
Write-Host `n | %{& "C:\Users\myname\Anaconda3\Scripts\conda.exe" "shell.powershell" "hook"} | Out-String | Invoke-Expression
It gives me the error:
"Invoke-Expression : Cannot bind argument to parameter 'Command' because it is an empty string."
So this doesn't work either.
I assume this should be a simple fix but I'm unable to find the right commands/place to put the command that will allow me to add that new line to improve readability of the code. Been googling for a while and though I've learned quite a bit doing so, just haven't been able to find a fix for quite some time, so looking to the Stack Overflow community for some help. Thank you in advance!
英文:
I am trying to add a new line before each Powershell prompt to improve readability as shown below.
Instead of:
(base) PS C:\Users\myname --> "Hello"
Hello
(base) PS C:\Users\myname --> "Wow"
Wow
I would like an output like this:
(base) PS C:\Users\myname --> "Hello"
Hello
(base) PS C:\Users\myname --> "Wow"
Wow
(base) PS C:\Users\myname -->
My powershell profile, which I have modified for my prompt and to add the conda environment hook as per other SO posts is as follows:
function Prompt
{
    $promptString = "PS " + $(Get-Location) + " -->"
    Write-Host "$promptString" -NoNewline -ForegroundColor Yellow
    return " "
}
%{& "C:\Users\myname\Anaconda3\Scripts\conda.exe" "shell.powershell" "hook"} | Out-String | Invoke-Expression
I have tried adding the new line parameter ("`n") to the function prompt as follows:
$promptString = "`nPS " + $(Get-Location) + " -->"
This gives me the output as:
(base)
PS C:\Users\myname -->
which is not what I want.
I also tried adding a Write-Host before the conda hook but that doesn't work either:
Write-Host `n | %{& "C:\Users\myname\Anaconda3\Scripts\conda.exe" "shell.powershell" "hook"} | Out-String | Invoke-Expression
It gives me the error:
"Invoke-Expression : Cannot bind argument to parameter 'Command' because it is an empty string."
So this doesn't work either.
I assume this should be a simple fix but I'm unable to find the right commands/place to put the command that will allow me to add that new line to improve readability of the code. Been googling for a while and though I've learned quite a bit doing so, just haven't been able to find a fix for quite some time, so looking to the Stack Overflow community for some help. Thank you in advance!
答案1
得分: 1
你需要在被 conda.exe 修改后修改 prompt 函数,可以通过在你的 $PROFILE 文件中添加以下内容来实现(注意,不需要 % { ... }):
$function:prompt = @"
  Write-Host "`n"
  $function:prompt
"@
这重新定义了 prompt 函数,在调用前一个 prompt 函数的主体之前发出一个换行符(`n),使用命名空间变量表示法。
英文:
You need to modify the prompt function after it has been modified by conda.exe, which you can do by placing the following after your & "C:\Users\myname\Anaconda3\Scripts\conda.exe" "shell.powershell" "hook" | Out-String | Invoke-Expression call in your $PROFILE file (note that there's no need for % { ... }):
$function:prompt = @"
  Write-Host "`n" 
  $function:prompt
"@ 
This redefines the prompt function by emitting a newline ("`n") before calling the previous prompt function's body, using namespace variable notation.
答案2
得分: 0
function global:prompt() {
    if ($Env:CONDA_PROMPT_MODIFIER) {
        *****Write-Host ""****
        $Env:CONDA_PROMPT_MODIFIER | Write-Host -NoNewline
    }
    CondaPromptBackup;
}
英文:
Not the most elegant answer, but I found a way to do this by adding a Write-Host "" command within the Conda.psm1 profile as follows. Marking the inserted text within ****. Thank you for all the help!
    function global:prompt() {
    if ($Env:CONDA_PROMPT_MODIFIER) {
        *****Write-Host ""****
        $Env:CONDA_PROMPT_MODIFIER | Write-Host -NoNewline
    }
    CondaPromptBackup;
}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。


评论