ohmyzsh/plugins/fancy-ctrl-z/README.md
Whisperity 2bbd7156c3 feat(fancy-ctrl-z): Toggle between last two suspended jobs in every case
Allows using the fancy-ctrl-z functionality of toggling between the last
two suspended jobs (`%+` and `%-`, respectively) even if there are more
than two jobs suspended.

Made the whole implementation more robust, especially in case Ctrl-Z is
pressed with an existing non-empty prompt buffer.

Fixed a bug where jobs with multiple different working directories would
cause the back-and-forth functionality to not work.
2026-01-16 15:24:08 +01:00

1.8 KiB

fancy-ctrl-z

Allows pressing Ctrl-Z is an empty prompt to bring to the foreground the only suspended job, or, if there are more than one such jobs, to switch between the two most recently suspended ones.

To use it, add fancy-ctrl-z to the plugins array in your .zshrc file:

plugins=(... fancy-ctrl-z)

Motivation

I frequently need to execute random commands in my shell. To achieve it, I often pause Vim by pressing Ctrl-Z, type a command and then would use fg↵ Enter to switch back to Vim. Having to type in the fg part really hurt me. I just wanted to hit Ctrl-Z once again to get back to Vim. I could not find a solution, so I developed one on my own that works wonderfully with Zsh.

Switching between the last two suspended jobs is motivated by both TV remotes that had such feature, and tools like cd - and git checkout - that switch between the current and the second most recent state (directory, branch, etc.). Sometimes, you have your Vim where code is changed, and another longer-running process (e.g., a tail on some logs, or a Python interpreter) where you want to test or observe your changes. There is no point in time where you would "have the editor open" and "have the program open" together, and the workflow clearly mandates always switching back and forth between the two. That's why the original version of fancy-ctrl-z was extended with this "even fancier" behaviour, because the original version would've opened Vim back again and again.

Credits