I’ve been switching editors back and forth for a while now. In the terminal, I finally started to take a closer look at (neo)vim 🤓, but I’m still not anywhere near my productivity level I currently have in IDEs like Visual Studio Code. So depending on the environment I’m currently working in and the editing task at hand, it’s sometimes a wild mix of nano, (neo)vim, Sublime Text and Visual Studio Code.

When I’m working on a project in VS Code, I prefer using its internal terminal window so everything is in one place. And some command-line tools open a new editor (e.g. for git commit messages) relying on the EDITOR environment variable, which is set to vim in my case. But opening one editor in the integrated terminal window of another feels a bit odd and is quite inconvenient if the terminal window is too small.

Luckily there is a workaround for that in VS Code. Open the settings.json file and add the following lines:

{// If you’re running macOS, use "terminal.integrated.env.osx" instead.
  "terminal.integrated.env.linux": {
    "EDITOR": "code --wait",
    "GIT_EDITOR": "code --wait"

And depending on which shell you use, add these lines to either .bashrc or .zshrc:

# Only set and export EDITOR and GIT_EDITOR env variables if they have been empty.
[ -z "$EDITOR" ] && export EDITOR=vim
[ -z "$GIT_EDITOR" ] && export GIT_EDITOR=vim

So in your normal terminal, the default EDITOR will be vim, but inside VS Code’s terminal, a new tab will be opened in your current workspace instead.