Vim CTRL keys on Visual Studio Code

Oct 11, 2021

Many of the VSCode keyboard shortcuts start with CTRL+k, but the VSCodeVim plugin uses that key combination in insertion mode for inserting digraphs. I never use that digraph feature, so I prefer the VSCode functionality. This got me thinking: What are the CTRL key collisions between VSCode and VSCodeVim?

Key combination Visual Studio Code behavior VSCodeVim behavior Default Keybinding change.
CTRL+q Quick navigation normal: visual block mode vim Prefer VSCode. Though I never use quick navigation, I prefer CTRL+v for visual block mode.
CTRL+w View: Close editor insert: delete previous word vim  
    normal: many window manipulations vim  
CTRL+e File: Goto file … (CTRL+p) insert: insert same character as next line vim  
    normal: move file down one line vim  
CTRL+r File: Open recent… insertion: insert from register. vim  
    normal: redo vim  
CTRL+t Goto symbol insert: indent line vim Prefer VSCode. I use » and « for indent.
CTRL+y redo insert: insert character from above the cursor vim  
    normal: move screen up one line vim  
CTRL+u cursor undo insert: delete line up to cursor vim  
    normal: move back 1/2 screen vim  
CTRL+i trigger suggest normal: go to newer position in jump list vim  
CTRL+o File: Open file… insert: go back to normal mode for 1 keystroke vim  
    normal: go to older position in jump list vim  
CTRL+p Go to file… insert: insert previous matching identifier VSCode Note: Use CTRL+space for same behavior.
CTRL+a Select All insert: insert previously inserted text vim  
    normal: increment number under cursor vim  
CTRL+s File: Save nothing (This used to be the disasterous XOFF command in vi.) VSCode  
CTRL+d Add selection to next find match normal: Move forward 1/2 screen vim  
CTRL+f Find insert: Find VSCode  
    normal: move forward 1 screen vim  
CTRL+g Go to Line/Column normal: Show file and line number info vim Either way, so leave default.
CTRL+h Replace insert: Backspace vim  
CTRL+j Toggle Panel normal: move to next line vim  
CTRL+k Start of many VSCode commands insert: insert digraph vim Prefer VSCode. Enabled dozens more keyboard shortcuts.
CTRL+l Expand line selection Some kind of navigation? Didn’t seem to work vim  
CTRL+z Undo   VSCode  
CTRL+x Cut insert: Esc vim  
    normal: decrement number under cursor vim  
CTRL+c Copy insert: Esc vim  
CTRL+v Paste normal: Visual block vim  
CTRL+b View: Toggle side bar visibility insert: nothing VSCode  
    normal: go up one page vim  
CTRL+n Create: New File… insert: insert next matching identifier vim  
    normal: go down one line vim  
CTRL+m Toggle Tab Key Moves Focus insert: newline vim  
    normal: go to start of next line vim  

Change to settings.json

"vim.handleKeys": {
    "<C-k>": false,
    "<C-q>": false,
    "<C-t>": false
}

Notes on other ways to modify the key bindings:

  • vim.useCtrlKeys setting: Many of the ctrl key options are useful so I wouldn’t disable this.
  • keybindings.json file: The handleKeys setting is a better way to go. The nuanced “when” rules in the keybindings.json could change over time and might confuse your keybindings.json changes.

Useful links