You can’t miss it, PowerShell version 5 CLI comes with the nice color syntax highlighting.
But that’s just the tip of the iceberg. I like to call it one of the “best kept secrets” about PowerShell v5.
That is all thanks to Jason Shrik (aka lzybkr), member of the PowerShell Product Group and the creator of the PS module ‘PSReadline’.
Once a GitHub project, now by default included in PowerShell version 5.
Let’s dive into some of the additional capabilities of the PSReadline module.
This PowerShell module replaces the command line editing experience in PowerShell and provides:
Keith Hill also wrote a great introduction to PSReadline here
Below, I cover Installation, Utilization and Customization of the PSReadline module and it’s functionality.
Check your local version of the PSReadline module, using
Get-Module –Name PSReadline –ListAvailable
Check the online version of the PSReadline module in the PowerShell Gallery, using
Find-Module –Name PSReadline
Install the PSReadline module from the PowerShell Gallery, using
Install-Module –Name PSReadline –Force
Let’s just run through some of my preferred features.
Simple syntax error notification
A good multi-line experience (both editing and history)
Customizable key bindings
Key bindings is all about binding a function/operation to a key or key combination.
To view the current key bindings:
Bash style interactive history search using Ctrl+R
PowerShell token based “word” movement and kill
Move the cursor back to the start of the current word, or if between words, the start of the previous word, using Ctrl-left/right arrow.
Undo/redo using Ctrl+Z
Reverts all of the input since the last input was accepted and executed.
This is equivalent to doing Undo until there is nothing left to undo.
Automatic saving of history, including sharing history across live sessions
Classic function keys F7 and F8 (HistorySearchBackward), but also new function keys like Shift-F8 (HistorySearchForward ).
“Menu” like completion using Ctrl+Space
Somewhat like Intellisense, but allows to select completion using arrows.
PSReadline supports custom key bindings using the cmdlet Set-PSReadlineKeyHandler.
Most custom key bindings will call one of the above functions, for example:
Set-PSReadlineKeyHandler -Key UpArrow -Function HistorySearchBackward
You can bind a ScriptBlock to a key. The ScriptBlock can do pretty much anything you want.
Some useful examples include:
To set your own custom keybindings, use the cmdlet Set-PSReadlineKeyHandler.
Example #1, for a better history experience, try:
Set-PSReadlineKeyHandler -Key UpArrow -Function HistorySearchBackward Set-PSReadlineKeyHandler -Key DownArrow -Function HistorySearchForward
With these bindings, up arrow/down arrow will work like PowerShell/cmd if the current command line is blank.
If you have entered some text though, it will search the history for commands that start with the currently entered text.
Example #2, for jumping between ‘braces’ (curly brace, square brackets), try:
Set-PSReadlineKeyHandler -Function GotoBrace -Key Ctrl+B
A summary of some existing key handlers
|SelectAll||Ctrl+A||Select the entire line. Moves the cursor to the end of the line.|
|Redo||Ctrl+Y||Redo an insertion or deletion that was undone by Undo.|
|Undo||Ctrl+Z||Undo a previous insertion or deletion.|
|PreviousHistory||<UpArrow>||Replace the current input with the ‘previous’ item from PSReadline history.|
|NextHistory||<DownArrow>||Replace the current input with the ‘next’ item from PSReadline history.|
|NextWord||<Ctrl+RightArrow>||Move the cursor forward to the start of the next word.|
|BackwardWord||<Ctrl+LeftArrow>||Move the cursor back to the start of the current word, or if between words, the start of the previous word.|
|ForwardSearchHistory||<Ctrl+S>||Search forward from the current history line interactively.|
Attempt to perform completion on the text surrounding the cursor. If there are multiple possible completions, a list of possible completions is displayed and you can select the correct completion using the arrow keys or Tab/Shift+Tab.
|CopyOrCancelLine||<Ctrl+C>||Either copy selected text to the clipboard, or if no text is selected, cancel editing the line with CancelLine.|
|Cut||<Ctrl+X>||Delete selected region placing deleted text in the system clipboard.|
|Paste||<Ctrl+V>||Paste from the system clipboard.|
|ClearScreen||<Ctrl+L>||Clears the screen and displays the current prompt and input at the top of the screen.|
|ScrollDisplayUp||<PgUp>||Scroll the display up one screen.|
|ScrollDisplayUpLine||<Ctrl+PageUp>||Scroll the display up one line.|
|ScrollDisplayDown||<PageDown>||Scroll the display down one screen.|
|ScrollDisplayDownLine||<Ctrl+PageDown>||Scroll the display down one line.|
More shortcuts on Hey, Scripting Guy! blog.
PSReadline has help for it’s cmdlets as well as an about_PSReadline topic – see those topics for more detailed help.
More information and/or feedback on GitHub here.