Windows Powershell Vim Keybindings

9,397

Solution 1

These days you have a couple of options. With the default console you can just run Vim on Windows (you might already have it if you have git or other tools installed). To make the integration more seamless place this in your PowerShell profile:

$VIMEXEPATH    = "c:\<location>\vim.exe"

Set-Alias vim  $VIMEXEPATH
Set-Alias vi   $VIMEXEPATH

I'd also recommend adding the following to your vimrc file so it executes shell commands with PowerShell itself.

set shell=powershell
set shellcmdflag=-command

Otherwise the only ISE that supports a Vi mode right now is PSReadLine now available on the PS Gallery

There are usage notes but in brief for VI mode you need to add the following line to your ISE profile.

Set-PSReadlineOption -EditMode vi

Note that Vi support was added in 1.2 but 1.1 shipped with Windows 10. You will need to use the -force parameter to update shipping (aka manually installed) version.

Solution 2

PSReadline module provides this.

To install is simple not sure what the requirements are but I think at least windows 10 for this method provided. If you dont have OneGet or not sure you can follow the instructions at PSReadline

To install PSReadline without elevating privileges

Install-Module PsReadline -Scope CurrentUser

Check you have a powershell profile

Test-Path $PROFILE

If you dont create one

New-File -Type File $PROFILE

Open $PROFILE in ISE

ise $PROFILE

Add this line

Set-PSReadlineOption -EditMode vi

Reload $PROFILE or just restart powershell

& $PROFILE

Solution 3

I wouldn't swear that there isn't an undocumented feature of Powershell that allows this, but as far as I know the answer is no. At least I have never seen anything in Powershell documentation to suggest it's possible.

JR

Share:
9,397

Related videos on Youtube

Bryan Ward
Author by

Bryan Ward

I'm a student at Bucknell University majoring in Computer Science and Engineering as well as Mathematics.

Updated on September 17, 2022

Comments

  • Bryan Ward
    Bryan Ward over 1 year

    Is there a way to get vim keybindings in powershell as you would in bash or zsh with a command like

    set -o vi
    
  • Lucas
    Lucas almost 8 years
    Support for vi mode was added via PsReadline in PowerShell 5. See @strings answer below...
  • Alex
    Alex over 6 years
    It's New-Item -Type File
  • Akinwale
    Akinwale almost 6 years
    Is there a way to have the cursor change so that you can see if you are in normal or insert mode?
  • Lex
    Lex almost 6 years
    I don't think so, however another beta for version 2 released the other week. So you could try that, and if it isn't there I'd try asking the maintainers it might motivate them to support it (and continue development in general)
  • stevens
    stevens almost 3 years
    Also, if you followed the internet rabbit hole here, you may also want: Set-PSReadLineOption -ViModeIndicator Cursor
  • Screenack
    Screenack almost 3 years
    And PS refused to run an unsigned profile. There's a discussion on doing so, here: serverfault.com/questions/31194/…