ohmyzsh/plugins/sudo/README.md
xlebpushek 6d7eb3746c feat: support custom prefix in sudo plugin and update README accordingly
feat: add configurable prefix support to sudo plugin with alias reminder

- Introduced ZSH_SUDO_PLUGIN_PREFIX variable to allow custom command prefix instead of default 'sudo'
- Updated command substitution logic to handle prefix and prefix -e (sudoedit) properly
- Enhanced README with usage examples and a note about creating alias for custom prefixes
- Maintains default behavior when no prefix is specified
2025-06-08 14:52:40 +04:00

2.4 KiB

sudo

Easily prefix your current or previous commands with sudo (or a custom prefix) by pressing esc twice.

To use it, add sudo to the plugins array in your zshrc file:

plugins=(... sudo)

Usage

Current typed commands

Say you have typed a long command and forgot to add the prefix (default: sudo) in front:

$ apt-get install build-essential

By pressing the esc key twice, you will have the same command with the prefix (sudo by default) added without typing:

$ sudo apt-get install build-essential

The same happens for editing files with your default editor (defined in $SUDO_EDITOR, $VISUAL, or $EDITOR, in that order):

If the editor defined were vim:

$ vim /etc/hosts

By pressing the esc key twice, the command will be replaced with the prefix followed by -e (default: sudo -e), which opens that editor with root privileges:

$ sudo -e /etc/hosts

Previous executed commands

Say you want to delete a system file and get a permission denied error:

$ rm some-system-file.txt
-su: some-system-file.txt: Permission denied
$

By pressing the esc key twice, the plugin will take the last executed command and prefix it with sudo (or your configured prefix):

$ sudo rm some-system-file.txt
Password:
$

The same applies for file editing commands, as described above.

Key binding

By default, the plugin uses EscEsc as the trigger.

If you want to change it, you can use the bindkey command to bind it to a different key:

bindkey -M emacs '<seq>' sudo-command-line
bindkey -M vicmd '<seq>' sudo-command-line
bindkey -M viins '<seq>' sudo-command-line

where <seq> is the key sequence you want to use. You can find the keyboard sequence by running cat and pressing the desired key combination.

Configuration

You can override the default prefix (sudo) by setting the ZSH_SUDO_PLUGIN_PREFIX environment variable in your .zshrc:

export ZSH_SUDO_PLUGIN_PREFIX="doas"

This will make the plugin prefix commands with doas instead of sudo.

Important: If you use a custom prefix different from sudo, make sure to create an alias named after that prefix pointing to sudo, for example:

alias doas='sudo'

This ensures proper command substitution and consistent behavior.