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

Hi friends, Tmux is a fantastic tool for managing terminal sessions, but it has its limitations. One major drawback is the lack of a floating pane feature, which can make navigating between different panes cumbersome and inefficient. Me frustrated with Tmux lack of floating panes while Zellij is killing it... Most users workaround this by creating new Tmux windows or panes, or by using hidden splits to zoom in and out. These methods work but can be inefficient and require many keystrokes,...

My Neovim takes roughly 113ms to fire up. THIS IS FAST. However, I don’t lazy load anything. Being a Lazy.nvim user, it’s kind of a shame I’m not actually making use of my plugin manager's flagship feature. But then again, it takes 113ms for nvim to start, what is there to gain here? Let’s say I drop it to 50ms. I gained 60ms which means that if I’m going to spend 30 minutes to actually reduce it, I’d have to open Neovim 15,929 times to get my time back 🤣. With an average of probably 5 times...

Hi Friends! Curious about Nix? Me too. The past few months of exploring it were quite interesting, to say the least. And it still feels like I've barely scratched the surface. [TL;DR] That said, it's already replacing some of my old workflows and I'm really happy discovering it, even while not even using Linux for most of my local work. What’s Nix? Nix is a powerful suite of tools, including a package manager (Nixpkgs), language (Nix DSL), and operating system (NixOS). It provides a robust...