英文:
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;
}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论