PowerShell 6.0.1에서 기본 동작은 Delete캐럿이 줄 끝에 있지 않을 때 키를 누르면 예상대로 캐럿 위의 문자가 삭제된다는 것입니다. 그러나 줄의 마지막 문자를 삭제하면 캐럿이 한 위치 뒤로 이동합니다. 더 이상 Delete줄이 끝날 때까지 삭제할 수 없기 때문에 이것이 매우 짜증나는 일이라고 생각합니다 . 내가 누를 때와 동일하게 작동하도록 변경하는 방법이 있습니까? EndDelete즉, 아무것도 하지 않습니까?
수행된 연구:
나는 보았다백스페이스에서 PowerShell 경고음 비활성화, 아마도 내가 원하는 설정도 있을 거라고 생각했지만, 읽은 후에는PSReadLine cmdlet에 대한 문서, 없는 것을 보았습니다.
그런 다음 키 바인딩을 살펴보고 현재 할당된 Get-PSReadLineKeyHandler
내용을 확인하기 위해 실행한 다음Delete코드베이스 DeleteChar
에서 검색됨 PSReadLine
, 해당 함수에 대한 정의를 확인하고 유사한 항목을 찾아볼 수 있습니다. 나는 찾았다삭제문자또는종료, "삭제" 프로세스를 종료하지 않고 실행되었습니다 Set-PSReadLineKeyHandler -Key Delete -Function DeleteCharOrExit
. 불분명한 문서 주석에서 가정했듯이 PowerShell 콘솔 프로세스가 종료됩니다.
나도 찾았어https://github.com/lzybkr/PSReadLine/issues/486, 이는 수정되었음을 의미하지만 분명히 그렇지는 않습니다 ...
어쩌면 다음과 같은 사용자 정의 키 바인딩 코드를 삽입해야 할 수도 있습니다.https://github.com/lzybkr/PSReadLine/blob/46d232c22ac3f24a95e32d773c594ad306dfc327/PSReadLine/SamplePSReadLineProfile.ps1#L257-L291?
답변1
에서 볼 수 있듯이 PowerShell Core 6.0.1은 PSReadLine 모듈 버전 1.2와 함께 제공되지만 Get-Module PSReadLine
수정 사항은https://github.com/lzybkr/PSReadLine/releases/tag/v2.0.0-beta1. 해당 릴리스에서 다음과 같이 말합니다.
이는 PowerShell Core(모든 플랫폼)와 Windows PowerShell을 모두 지원하는 리포지토리의 첫 번째 릴리스입니다.
나는 그 버전이 있다고 가정하고 원래 확인하지 않았습니다.
해당 버전에서 작동하게 하려면 다음을 사용할 수 있습니다.
Set-PSReadLineKeyHandler -Key Delete `
-BriefDescription Delete `
-LongDescription "Delete character over the caret" `
-ScriptBlock {
param($key, $arg)
$line = $null
$cursor = $null
[Microsoft.PowerShell.PSConsoleReadLine]::GetBufferState([ref]$line, [ref]$cursor)
if ($cursor -lt $line.Length)
{
[Microsoft.PowerShell.PSConsoleReadLine]::Delete($cursor, 1)
}
}
(이상적으로는 PowerShell이 시작될 때 자동 실행되도록 적절한 프로필 파일에 배치하는 것이 좋습니다.)
이 문제는 다음 지침을 사용하여 PSReadLine 모듈을 업그레이드하여 해결할 수도 있습니다.https://github.com/lzybkr/PSReadLine/issues/612, 이는 다음과 같습니다.
Install-Module PSReadLine -RequiredVersion 2.0.0-beta1 -AllowPrerelease -Scope CurrentUser -SkipPublisherCheck
아마도 향후 PowerShell Core 릴리스에는 PSReadLine 모듈의 고정 버전이 포함될 것입니다.