ChatGPT解决这个技术问题 Extra ChatGPT

Switch focus between editor and integrated terminal

Does anyone know the keyboard shortcut (Mac and Linux) to switch the focus between editor and integrated terminal in Visual Studio Code?

ctrl + ' ` ' will be the best #-> Linux
ctrl + ' ` ' works also on OS X without any additional key binding.
ctrl + ' ` ' works with Windows flawlessly too!
The problem with CTRL+` is that it creates a new terminal even if one already exists.
@Guss not anymore (v1.55.0)

i
informatik01

While there are a lot of modal toggles and navigation shortcuts for VS Code, there isn't one specifically for "move from editor to terminal, and back again". However you can compose the two steps by overloading the key and using the when clause.

Solution

You can achieve the desired effect by adding the appropriate settings to the keybindings.json file. Here are the required steps:

Open the Command Palette (Ctrl+Shift+P Windows/Linux or ⇧ ⌘ P Mac). Type "Preferences: Open Keyboard Shortcuts File" and press Enter. Add the following entries to the keybindings.json file:

// Toggle between terminal and editor focus
{
    "key":     "ctrl+`",
    "command": "workbench.action.terminal.focus"
},
{
    "key":     "ctrl+`",
    "command": "workbench.action.focusActiveEditorGroup",
    "when":    "terminalFocus"
}

With these shortcuts you can focus between the editor and the Integrated Terminal using the same keystroke.

NOTE

In modern versions of VS Code (as of 2022) the Default Keyboard Shortcuts (JSON) file is read-only, so that is why for the custom settings you need to edit a separate dedicated file keybindings.json.

More info can be found on the official Visual Studio documentation page:

Key Bindings for Visual Studio Code: Advanced customization


By far, this is the best answer as the most ergonomically justified solution: extending the existing key binding. Kudos!
Thanks, this worked fine and saves a lot of time. For users of international keyboards: "ctrl+`" can be specified as "ctrl+oem_3".
@Roman 1.18.0's behavior is certainly an improvement since when I wrote my answer, but I think the above is still better. The difference is the terminal won't disappear when using the keystroke, only the focus will shift. I happen to like keeping my terminal displayed :)
Note that these shortcuts should be pasted to the keybindings.json file.
Open the keybindings.json from the editor: CMD-SHIFT-P -> Preferences: Open Keyboard Shortcuts File. Also a nice resource: code.visualstudio.com/docs/getstarted/keybindings
R
Rahul Shukla

ctrl+` : To Focus on Integrated Terminal

ctrl+1 : To Focus on Editor (If editor-2 command would be ctrl+2)

https://i.stack.imgur.com/OubM3.gif

More Info : https://www.rscoder.com/2020/11/14/how-to-switch-focus-between-editor-and-integrated-terminal-in-visual-studio-code/


where is ` on any keyboard 🙄
just below esc key :)
Thank you. Ctrl + 1 is what I need, as in some case, ctrl+` will open external terminal and cannot use that again to comeback to VSCode editor
Control + '~' will work for the toggling between the two. I'm using from quite some time.
@surenderpal ctrl+'~' creates new terminal, it doesn't switch focus to the existing one.
R
RayLoveless

Ctrl+J works; but also shows/hides the console.

cmd+J for mac


Cmd+J on MacOS.
Not working in Ubuntu Linux 16.04 (Xenial) + VSC 1.45.0
You can use the same hack from the accepted answer as well for cmd+j { "key": "cmd+j", "command": "workbench.action.terminal.focus"}, { "key": "cmd+j", "command": "workbench.action.focusActiveEditorGroup", "when": "terminalFocus"} That way I don't have to take my hands off home row.
@AldoBassanini Works on Ubuntu 21.04 + VSC 1.57.0
Did not know this existed, otherwise I would not have tried the examples above, this should be the accepted answer (MacOS 12.0.1)
P
Pang

A little late to the game but I configured mine as the following in the keybindings.json:

{
    "key": "ctrl+`",
    "command": "workbench.action.terminal.focus",
    "when": "editorTextFocus"
},
{
    "key": "ctrl+`",
    "command": "workbench.action.focusActiveEditorGroup",
    "when": "terminalFocus"
},
{
    "key": "alt+`",
    "command": "workbench.action.terminal.toggleTerminal"
}

I wanted separate keys for opening/closing terminal and switching focus back and forth between the windows.


Mapping alt+` seems to be buggy - tracked at github.com/Microsoft/vscode/issues/41024#issuecomment-363096692
I found alt easier to press than ctrl, so in my configuration it's the other way round.
This is a great proposal, although I opted for keeping the original bindings and using alt to switch focus.
@BenCreasy That's only for macOS, on Windows this works just fine.
S
Shubham Jain

As of version : 1.26.1 (linux), the shortcut is not set by default. To set the shortcut

open keyboard shortcuts panel [ctrl + k , ctrl + s] Search for Focus Terminal

https://i.stack.imgur.com/7Lipk.png

Set your shortcut

For editor focus is already set by default.

https://i.stack.imgur.com/0vJQT.png


As they provide additional keyboard mappings, this answer is simpler and faster
This focuses the first editor group - might not be what the OP wants. Probably wants the current/active editor group.
This is answer for 2020 and anything >= 1.45.0
Great. Thank you for the clarity here.
P
Pang

I configured mine as following since I found ctrl+` is a bit hard to press.

{
  "key": "ctrl+k",
  "command": "workbench.action.focusActiveEditorGroup",
  "when": "terminalFocus"
},
{
  "key": "ctrl+j",
  "command": "workbench.action.terminal.focus",
  "when": "!terminalFocus"
}

I also configured the following to move between editor group.

{
  "key": "ctrl+h",
  "command": "workbench.action.focusPreviousGroup",
  "when": "!terminalFocus"
},
{
  "key": "ctrl+l",
  "command": "workbench.action.focusNextGroup",
  "when": "!terminalFocus"
}

By the way, I configured Caps Lock to ctrl on Mac from the System Preferences => keyboard =>Modifier Keys.


w
wisbucky

Another option is to use F6 and shift+F6.

F6 does "Focus Next Part", which will move focus from the editor to Panel below (Terminal, Output, Debug Console, etc).

shift+F6 does "Focus Previous Part", which will move focus from Terminal panel back to editor.

The advantage of this over ctrl + ` is that:

It does not hide the Terminal/Panel (if that's what you prefer. If you prefer to hide/unhide the Terminal, then just use ctrl + `). This will work with any of the Panels (Terminal, Output, Debug Console, etc).


J
Jheison Rodriguez

Hey my steps to make this work were:

ctrl + shift+ p and look for preferences: keyboard shortcuts

or you can use ctrl k + ctrl s to open it directly

Look in the search box for Terminal: Focus Terminal, I set up for myself alt + T alt + T but you can select the combination that you want Look in the search box for View: Focus Active Editor Group, set up for myself alt + E alt + E but again you can select the combination that you want

That's it, I hope this help


I matched it with tmux ctrl + a down and ctrl + a up and now I can work like I do in tmux... thanks
P
Pang

The default keybinding to toggle the integrated terminal is "Ctrl+`" according to VS Code keyboard shortcuts documentation page. If you don't like that shortcut you can change it in your keybindings file by adding something similar to:

{ "key": "ctrl+l", "command": "workbench.action.terminal.toggleTerminal" }

There does not seem to be a default keybinding for simply focusing the bottom panel. So, if you do not want to toggle the bottom panel, you will need to add something similar to the following to your keybindings file:

{ "key": "ctrl+t", "command": "workbench.action.focusPanel" }

Perfect, Thanks! I'm looking for the second answer you mentioned. If anyone wondering about the keyboard shortcut to put the focus back to editor then it is: Command + 1 (on Mac)
I think focusPanel is for the general region (include things like "Problems", "Output" and "Debug Console". There's also an action specifically for the Integrated Terminal workbench.action.terminal.focus.
P
Pang

Generally, VS Code uses ctrl+j to open Terminal, so I created a keybinding to switch with ctrl+k combination, like below at keybindings.json:

[    
    {
        "key": "ctrl+k",
        "command": "workbench.action.terminal.focus"
    },
    {
        "key": "ctrl+k",
        "command": "workbench.action.focusActiveEditorGroup",
        "when": "terminalFocus"
    }
]

Not exactly. By default ctrl+j just toggles Panel. So if last used Panel view was e.g. 'Problems' you will jump there instead of terminal. Also ctrl+k is widely used as chord beginning so overriding it will break a lot of shortcuts.
Z
ZingAju

Here is a way to add your own keybinding for switching focus.

Open your VSCode Press Ctrl+Shift+P and search for keyboard shortcuts and hit this (Preferences: Open Keyboard shortcuts). Search for 'focus terminal' in the search panel and find this option (Terminal: Focus on Terminal View) and click on the plus icon.

https://i.stack.imgur.com/Zb15J.png

Enter the shortcut as you like which is not used and hit Enter. Go to Editor mode and try using your shortcut. Now hit Alt+Shift+T to go to the terminal. Want to go back to the editor? Just Hit Ctrl+tab

Tested on Windows 10 machine with VSCode(1.52.1)


G
Gaurav Grover

Try using ctrl+` to toggles the visibility of the terminal and as a result toggle the focus.


M
Misha Akopov

The answer by Shubham Jain is the best option now using the inbuilt keyboard shortcuts.

https://i.stack.imgur.com/PPLin.png

to Ctrl + ;

https://i.stack.imgur.com/rLRkm.png

to Ctrl + L

This way you can have move focus between terminal and editor, and toggle terminal all in close proximity.


This solved it for me! Keyboard shortcuts --> Terminal: Focus Terminal (workbench.action.terminal.focus) --> changed the Keybinding to my desired combination. Running on vscode Insiders 1.43.0
J
JStrahl

SIMPLE WINDOWS SOLUTION FOR ANY KEYBOARD LAYOUT (may work for other OS but not tested)

I use a Finnish keyboard so none of the above worked but this should work for all keyboards.

Terminal focus: Hover your mouse over the terminal text in the integrated terminal. The shortcut for focusing on the terminal will pop up - mine for example said CTRL+ö.

Editor focus: as mentioned above use CTRL+1.


Thank you, thank you, thank you! So simple, and so easily overlooked. This is by far the best answer in here.
P
Pang

It's not exactly what is asked, but I found it very useful and related.

If someone wants to change from one terminal to another terminal also open in the integrate terminal panel of Visual Studio, you can search for:

Terminal: Focus Next Terminal

Or add the following key shortcut and do it faster with keyboard combination.

  {
    "key": "alt+cmd+right",
    "command": "workbench.action.terminal.focusNext",
    "when": "terminalFocus"
  },
  {
    "key": "alt+cmd+left",
    "command": "workbench.action.terminal.focusPrevious",
    "when": "terminalFocus"
  },

P
Pang

Actually, in VS Code 1.48.1, there is a toggleTerminal command; I don't know if it was available in previous versions ;) You can utilize it in the keybindings.json file.

This worked for me on Windows, and should also works on Linux.

{
    "key": "ctrl+alt+right",
    "command": "workbench.action.terminal.toggleTerminal",
    "when": "editorTextFocus || terminalFocus"
}

M
Maksym Dudyk

What's working for my 1.56 VS Code is:

Ctrl + ~     to focus on terminal window from editor
Ctrl + 9     to focus back on editor from terminal

t
totalhack

Here is my approach, which provides a consistent way of navigating between active terminals as well as jumping between the terminal and editor panes without closing the terminal view. You can try adding this to your keybindings.json directly but I would recommend you go through the keybinding UI (cmd+K cmd+S on a Mac) so you can review/manage conflicts etc.

With this I can use ctrl+x <arrow direction> to navigate to any visible editor or terminal. Once the cursor is in the terminal section you can use ctrl+x ctrl+up or ctrl+x ctrl+down to cycle through the active terminals.

cmd-J is still used to hide/show the terminal pane.

    {
        "key": "ctrl+x right",
        "command": "workbench.action.terminal.focusNextPane",
        "when": "terminalFocus"
    },
    {
        "key": "ctrl+x left",
        "command": "workbench.action.terminal.focusPreviousPane",
        "when": "terminalFocus"
    },
    {
        "key": "ctrl+x ctrl+down",
        "command": "workbench.action.terminal.focusNext",
        "when": "terminalFocus"
    },
    {
        "key": "ctrl+x ctrl+up",
        "command": "workbench.action.terminal.focusPrevious",
        "when": "terminalFocus"
    },
    {
        "key": "ctrl+x up",
        "command": "workbench.action.navigateUp"
    },
    {
        "key": "ctrl+x down",
        "command": "workbench.action.navigateDown"
    },
    {
        "key": "ctrl+x left",
        "command": "workbench.action.navigateLeft",
        "when": "!terminalFocus"
    },
    {
        "key": "ctrl+x right",
        "command": "workbench.action.navigateRight",
        "when": "!terminalFocus"
    },

N
Naman Jain

100% Working Settings...

[
    { "key": "alt+right", "command": "workbench.action.terminal.focus"},
    { "key": "alt+left", "command": "workbench.action.focusActiveEditorGroup", "when": "terminalFocus"}   
]

workbench.action.terminal.focus : To switch from editor to terminal. workbench.action.focusActiveEditorGroup : To switch from terminal to editor.


S
Sreejith Nair

For ctrl+` combination to switch between, I tried all of listed answers, but no luck. For those who has similar issue like mine, try the following shortcut within keybindings.json: Tested on VSCode 1.59+

[
{
    "key": "ctrl+oem_8","command": "workbench.action.terminal.focus", "when": "!terminalFocus"
},
{
    "key": "ctrl+oem_8","command": "workbench.action.focusActiveEditorGroup", "when": "terminalFocus"
}
]

https://i.stack.imgur.com/u4y57.gif


Using a simple backtick instead of oem_8 works like a champ on OSX. The rest of the rules work brilliantly!
N
Niels Bom

My solution:

has one key

if there's no terminal yet: opens a terminal and focuses on it

if the focus is on the terminal: hide the panel and switch back to editor

if the focus is on the editor and there's a terminal: unhides the terminal pane and focuses on it

  {
    "key": "ctrl+shift+alt+cmd+t",
    "command": "workbench.action.terminal.new",
    "when": "!terminalIsOpen"
  },
  {
    "key": "ctrl+shift+alt+cmd+t",
    "command": "terminal.focus",
    "when": "terminalIsOpen && !terminalFocus"
  },
  {
    "key": "ctrl+shift+alt+cmd+t",
    "command": "workbench.action.closePanel",
    "when": "terminalIsOpen && terminalFocus"
  }

works great thx - for me without "alt" -- but it doesn't open on "focused tree path" -- Q) any idea how to do that ? 🤔
If you don't need the "alt" I suspect you're on a not-macOS computer. Doesn't really matter for the solution of course. The OP did not ask for opening on "focused tree path". I see two challenges with that. 1) Commands don't take arguments. 2) What is the correct path to open? Maybe look into VSCode's predefined variables and the Multi-Command extension. Let me know if you get that working?
I am using #macos :-) - you know I have focused some tree item which I select witch arrows - then "enter" is renaming - "cmd + arrow down" is open - but missing me that "open that path in terminal" so I can run commands for that file
M
Mahad Ali

I did this by going to setting>Keyboard Shortcuts then in the section where it give a search bar type focus terminal and select the option. It will ask to type the combination which you want to set for this action. DO it. As for editor focus type" editor focus" in the search bar and type your desired key. IF you excellently add a key . it can be removed by going to edit jason as mentioned in above comments


s
surender pal

control + '~' will work for toggling between the two. and '`' is just above the tab button. This shortcut only works in mac.


L
LazerDance

The shortuct changes based on the keyboard layout (QWERTY/QWERTZ/AZERTA etc.)

To find out your shortuct press Ctrl+Shift+P and go to Preferences: Keyboard Shortcuts.

From there search for View:Toggle Terminal

https://i.stack.imgur.com/4nzVA.png


J
Jthorpe

With the key bindings in your keybindings.json:

CTRL+j and CTRL+k shift focus between editors in an editor group and terminal windows in the terimal

CTRL+h and CTRL+l shift focus between editor groups including the terminal

(These key bindings should feel particularly natural to vim users. Others may wish to change exchange h/j/k/l for left/down/up/right)

// In an editor group, ctrl+j and ctrl+k jump between editor windows
{ "key": "ctrl+j", "command": "workbench.action.nextEditorInGroup" },
{ "key": "ctrl+k", "command": "workbench.action.previousEditorInGroup" },
// In the terminal, ctrl+j and ctrl+k jump between terminal windows
{
    "key": "ctrl+j",
    "command": "workbench.action.terminal.focusNext",
    "when": "terminalFocus && terminalHasBeenCreated && !terminalEditorFocus || terminalFocus && terminalProcessSupported && !terminalEditorFocus"
},
{
    "key": "ctrl+k",
    "command": "workbench.action.terminal.focusPrevious",
    "when": "terminalFocus && terminalHasBeenCreated && !terminalEditorFocus || terminalFocus && terminalProcessSupported && !terminalEditorFocus"
},
// In the work area, ctrl+j and ctrl+k jump between editor groups
{ "key": "ctrl+h", "command": "workbench.action.focusPreviousGroup" },
{ "key": "ctrl+l", "command": "workbench.action.focusNextGroup" },
// in the first editor group terminal, jump "back" to the terminal (if there is a terminal open)
{
    "key": "ctrl+h",
    "when": " terminalHasBeenCreated && terminalIsOpen && activeEditorGroupIndex == 1",
    "command": "workbench.action.terminal.focus"
},
// in the last editor group terminal, jump "forward" to the terminal (if there is a terminal open)
{
    "key": "ctrl+l",
    "when": "terminalHasBeenCreated && terminalIsOpen && activeEditorGroupLast",
    "command": "workbench.action.terminal.focus"
},
// in the terminal, jump "back" to the last editor group
{
    "key": "ctrl+h",
    "command": "workbench.action.focusLastEditorGroup",
    "when": "terminalFocus"
},
// in the terminal, jump "forward" to the last first group
{
    "key": "ctrl+l",
    "command": "workbench.action.focusFirstEditorGroup",
    "when": "terminalFocus"
},

I use the Vim extension, Ctrl+wj works for going down to the console, for up I use ctrl+1
1
1da

ctrl + - also works, it means to go back previous cursor position