В 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
и онлайн документация включает в себя несколько полезных примеров