В PowerShell с psreadline -EditMode VI, как обеспечить, чтобы курсор начинался в конце строки при прохождении истории

Я использую режим PowerShell VI через

Set-PSReadlineOption -EditMode vi

Удивительно иметь возможность редактировать строку с помощью команд VI, однако есть одна вещь, которая раздражает. При использовании стрелок вверх и вниз для навигации по истории курсор всегда начинается с начала строки, а не с конца. т.е. если у меня была следующая команда в моей истории

svn help x-shelve --list

тогда я бы хотел, чтобы курсор (представленный как труба |) был похож на

svn help x-shelve --list|

скорее, чем

|svn help x-shelve --list

Есть ли способ установить это?

1 ответ

Решение

Вы можете использовать Set-PSReadLineKeyHandler командлет:

Set-PSReadLineKeyHandler -Key UpArrow `
   -ScriptBlock {
     param($key, $arg)

     $line=$null
     $cursor=$null
     [Microsoft.PowerShell.PSConsoleReadLine]::HistorySearchBackward()
     [Microsoft.PowerShell.PSConsoleReadLine]::GetBufferState([ref]$line, [ref]$cursor)
     [Microsoft.PowerShell.PSConsoleReadLine]::SetCursorPosition($line.Length)
}


Set-PSReadLineKeyHandler -Key DownArrow `
   -ScriptBlock {
     param($key, $arg)

     $line=$null
     $cursor=$null
     [Microsoft.PowerShell.PSConsoleReadLine]::HistorySearchForward()
     [Microsoft.PowerShell.PSConsoleReadLine]::GetBufferState([ref]$line, [ref]$cursor)
     [Microsoft.PowerShell.PSConsoleReadLine]::SetCursorPosition($line.Length)
}

Используйте то же самое Set-PSReadLineOption Командлет, который вы использовали для перехода в режим VI:

Set-PSReadLineOption -HistorySearchCursorMovesToEnd:$true

Вы можете увидеть, какие параметры могут быть установлены с Get-PSReadLineOption:

Get-PSReadLineOption

и онлайн документация включает в себя несколько полезных примеров

Другие вопросы по тегам