I’m Never Using Neovim’s Terminal the Same Again


Hi friends,

I have a (yet another) workflow problem

Managing the terminal and Neovim efficiently can be confusing. Is Neovim a terminal app, or is the terminal a Neovim process? There are too many options: multiplexing, terminal commands, and various plugins.

How Most People Solve It

Most developers tend to fire up another GUI window for their terminal. The more “advanced” use a terminal tab, completely unaware of Neovim’s internal emulator they can start with :terminal.

Why It Doesn’t Work for Them

Those familiar with the internal emulator often get frustrated after the first use!
Neovim’s terminal can be cumbersome (to say the least) to switch in and out of, requiring additional configuration and management, which can disrupt workflow continuity.

To step out of the internal emulator to an external pane, you'd have to use the non-straightforward Ctrl-\ Ctrl-N.

Instead of fighting the default mappings, I added a few to improve my internal emulator flow:

Remap Ctrl-\ Ctrl-N to Esc for easier mode switching without closing the terminal by forcing the process to close with the pane together:

tnoremap <Esc> <C-gt;<C-n>

This, however, is only one step in the right direction, let's imrprove it further to seamlessly integrate the internal emulator as if it was just another Neovim split:

Add terminal mode mappings to switch in and out of the emulator’s pane:

:tnoremap <A-h> <C-gt;<C-N><C-w>h
:tnoremap <A-j> <C-gt;<C-N><C-w>j
:tnoremap <A-k> <C-gt;<C-N><C-w>k
:tnoremap <A-l> <C-gt;<C-N><C-w>l`

These map terminal mode Alt and one of the vim-arrows to move in the respective direction.

Using the internal emulator is nice, but it still felt like mixing my coding environment with something it shouldn't have.

Floating Terminals

I love floating panes. If you’re a floating pane person, try implementing FlowTerm for floating terminals within Neovim. This allows persistent, toggle-able terminals that overlay your code, ideal for quick tasks. My only issues with FlowTerm are:

  1. It's not visually pleasing, in my opinion.
  2. Tied to the Neovim process; if I restart the session or change to another Tmux pane, there’s no persistence.

Multiplexers for Persistent Sessions

My previous go-to was Tmux for managing long-lived sessions separately from Neovim (any other multiplexing options is valid here). This ensures your terminal sessions remain active, even when you close Neovim. However, this comes with a “price”; using a window split, forces me to go through these steps to access my terminal:

  1. Zoom out of my current context.
  2. Move one pane down.
  3. Zoom into the terminal pane and do my thing.
  4. Zoom back out.
  5. Move one pane up.
  6. Zoom back into my Neovim session.

This, to the “least keystrokes” trained Neovim junkie, is unacceptable. The other obvious option is to use a separate multiplexer window. In Tmux, this makes things quicker—one key binding to jump back and forth to an already fullscreen Neovim/terminal session. But there’s another price to be paid:

  1. Visually changing context makes me feel like I “left” Neovim to run another task, as opposed to a terminal split underneath (or on top).
  2. As someone who heavily uses windows, “occupying” a window spot means I am forced to search harder and toggle between yet another window in my session.

The Solution: A Floating Tmux Pane

Zellij has floating panes. While I love Zellij, I’m still very much a Tmux user, so why not have the same in Tmux? While you can get a Tmux popup, it lacks in many ways:

  • No persistence.
  • Hard to stylize.
  • Super long commands to fire it up.
  • Overall adds huge “friction” to the workflow.

Introducing Tmux-Floax!

A floating Tmux pane with persistence, configurable style, and more. I’ll dive into Floax in a future issue, but for now, here’s how it solves everything I wanted and more:

  • A floating pane with persistence, on top of my Neovim sessions.
  • The ability to split the floating pane and even add internal windows.
  • Full control over size, style, fullscreen, and prefix.
  • No more giving up “window real-estate.”

Out of all the options above, Tmux-Floax seems to be my optimal solution, removing friction, adding joy, and making my workflow 5% better 😎.

I’d really appreciate it if you give Floax a quick ⭐ on GitHub!

Thank you for reading! As always, feel free to reply to this email with thoughts and comments :)

Whenever you’re ready, here’s how I can help you:

ESPRESSO FRIDAYS

Every once in a while I send hand picked things I've learned. Kind of like your filter to the tech internet. No spam, I promise!

Read more from ESPRESSO FRIDAYS

When it comes to terminal shells, many developers (myself included) have stuck with what they know or what they've seen others use online, without exploring other options. It's time to venture out and discover the world of terminal shells. Most developers are likely using Zsh, a POSIX-compatible shell, probably with Oh My Zsh on top. But there's a whole spectrum of shells out there, each with its own strengths and quirks. Today, we're going to explore three major players: Bash, Zsh, and Fish....

6 Neovim Plugins I Use To Troll Code Reviewers The Espresso Fridays is brought to you by: Zero To Running a Kubernetes Application Without Weeks of Studying A hands-on Kubernetes guide to deploy your first scaleable application In under 90 minutes you'll: ✅ Learn all the critical Kubernetes basics from a 10-year industry expert ✅ CUT learning time by 60% with a hands-on application deployment walkthrough ✅ Never feel inexperienced again with the hottest technology in the market Start learning...

Hi friends, Ever felt like your remote pair programming sessions were missing that seamless, in-person collaboration feel? You’re not alone. Many developers struggle to recreate the magic of side-by-side coding in a virtual environment. A recent study shows that pair programming has been proven to catch mistakes early, reduce defects, and lead to better designs. The same study found that teams who practice pair programming not only produce shorter, more efficient code but also solve problems...