Fisher: Error during update when commands from plugins are used in config.fish

Created on 27 Feb 2019  路  3Comments  路  Source: jorgebucaran/fisher

I am using the oh-my-fish/plugin-balias plugin which provides a command balias. When adding for example balias g 'git' to config.fish, it results in the error

fish: Unknown command balias
~/.config/fish/config.fish (line 1): 
balias g 'git'
^
from sourcing file ~/.config/fish/config.fish
    called during startup

during updates. From my understanding this is because during the update process all plugins are reinstalled and not available to the fish instance. Is this correct?

Is this is a bug or is config.fish not the right place to use plugin derived commands?

fisher version: 3.2.7, fish version: 3.0.1

Full log:

FZF_DEFAULT_OPTS
FZF_LEGACY_KEYBINDINGS
FZF_PREVIEW_DIR_CMD
FZF_PREVIEW_FILE_CMD
FZF_TMUX_HEIGHT
To completely erase z's data, remove:
$USER/.local/share/z/data
fish: Unknown command balias
~/.config/fish/config.fish (line 1): 
balias g 'git'
^
from sourcing file ~/.config/fish/config.fish
    called during startup

[..., repeated multiple times]

fetching https://codeload.github.com/jethrokuan/z/tar.gz/master
linking ~/.config/fish/functions/balias.fish
linking ~/.config/fish/conf.d/done.fish
linking ~/.config/fish/functions/fenv.apply.fish
linking ~/.config/fish/functions/fenv.fish
linking ~/.config/fish/functions/fenv.main.fish
linking ~/.config/fish/functions/fenv.parse.after.fish
linking ~/.config/fish/functions/fenv.parse.before.fish
linking ~/.config/fish/functions/fenv.parse.diff.fish
linking ~/.config/fish/functions/fenv.parse.divider.fish
linking ~/.config/fish/functions/_pure_format_time.fish
linking ~/.config/fish/functions/_pure_get_prompt_symbol.fish
linking ~/.config/fish/functions/_pure_parse_directory.fish
linking ~/.config/fish/functions/_pure_parse_git_branch.fish
linking ~/.config/fish/functions/_pure_print_prompt.fish
linking ~/.config/fish/functions/_pure_prompt.fish
linking ~/.config/fish/functions/_pure_prompt_beginning.fish
linking ~/.config/fish/functions/_pure_prompt_command_duration.fish
linking ~/.config/fish/functions/_pure_prompt_current_folder.fish
linking ~/.config/fish/functions/_pure_prompt_ending.fish
linking ~/.config/fish/functions/_pure_prompt_first_line.fish
linking ~/.config/fish/functions/_pure_prompt_git.fish
linking ~/.config/fish/functions/_pure_prompt_git_branch.fish
linking ~/.config/fish/functions/_pure_prompt_git_dirty.fish
linking ~/.config/fish/functions/_pure_prompt_git_pending_commits.fish
linking ~/.config/fish/functions/_pure_prompt_ssh.fish
linking ~/.config/fish/functions/_pure_prompt_ssh_host.fish
linking ~/.config/fish/functions/_pure_prompt_ssh_separator.fish
linking ~/.config/fish/functions/_pure_prompt_ssh_user.fish
linking ~/.config/fish/functions/_pure_prompt_symbol.fish
linking ~/.config/fish/functions/_pure_prompt_vimode.fish
linking ~/.config/fish/functions/_pure_prompt_virtualenv.fish
linking ~/.config/fish/functions/_pure_set_default.fish
linking ~/.config/fish/functions/_pure_string_width.fish
linking ~/.config/fish/conf.d/pure.fish
linking ~/.config/fish/functions/fish_greeting.fish
linking ~/.config/fish/functions/fish_mode_prompt.fish
linking ~/.config/fish/functions/fish_prompt.fish
linking ~/.config/fish/functions/fish_right_prompt.fish
linking ~/.config/fish/functions/fish_title.fish
linking ~/.config/fish/functions/__fzf_cd.fish
linking ~/.config/fish/functions/__fzf_complete.fish
linking ~/.config/fish/functions/__fzf_complete_preview.fish
linking ~/.config/fish/functions/__fzf_find_file.fish
linking ~/.config/fish/functions/__fzf_get_dir.fish
linking ~/.config/fish/functions/__fzf_open.fish
linking ~/.config/fish/functions/__fzf_parse_commandline.fish
linking ~/.config/fish/functions/__fzf_reverse_isearch.fish
linking ~/.config/fish/functions/__fzfcmd.fish
linking ~/.config/fish/conf.d/fzf.fish
linking ~/.config/fish/conf.d/fzf_key_bindings.fish
linking ~/.config/fish/functions/__z.fish
linking ~/.config/fish/functions/__z_add.fish
linking ~/.config/fish/functions/__z_clean.fish
linking ~/.config/fish/functions/__z_complete.fish
linking ~/.config/fish/conf.d/z.fish
fetching https://codeload.github.com/fishpkg/fish-humanize-duration/tar.gz/master
linking ~/.config/fish/functions/humanize_duration.fish
updated 7 packages in 2.11s

Most helpful comment

We launch a new session for each package we try to download (to enable parallelism) and fish sources your config.fish inside every session as usual. These fish run in non-interactive mode, so I'd solve this by wrapping non-builtin commands inside a status is-interactive conditional.

This is generally a good idea (not a Fisher idiosyncrasy) since you don't want to slow down your shell by running external commands every time you launch a non-interactive session.

if status is-interactive
    balias g 'git'
    balias c 'clear'
    balias o 'open'
end

Personally, I'd go one step further and avoid using non-builtin commands in my config.fish, but you may find that odd if you're still new to fish or used to other shells.

Let me know if this helps.

All 3 comments

We launch a new session for each package we try to download (to enable parallelism) and fish sources your config.fish inside every session as usual. These fish run in non-interactive mode, so I'd solve this by wrapping non-builtin commands inside a status is-interactive conditional.

This is generally a good idea (not a Fisher idiosyncrasy) since you don't want to slow down your shell by running external commands every time you launch a non-interactive session.

if status is-interactive
    balias g 'git'
    balias c 'clear'
    balias o 'open'
end

Personally, I'd go one step further and avoid using non-builtin commands in my config.fish, but you may find that odd if you're still new to fish or used to other shells.

Let me know if this helps.

Yes, this helps. Thank you.

Personally, I'd go one step further and avoid using non-builtin commands in my config.fish, but you may find that odd if you're still new to fish or used to other shells.
Where would you put it then?

@fkjogu Great! 馃帀

Where would you put it then?

Create a function for each alias and put them anywhere in your function path, e.g. ~/.config/fish/functions.

The alias documentation (emphasis mine) recommends this as well:

alias is a simple wrapper for the function builtin, which creates a function wrapping a command.
It has similar syntax to POSIX shell alias. For other uses, it is recommended to define a
function
.

By putting all your aliases in your config.fish you end up creating them from scratch on each session and at the same time, defeating fish function autoloading.

Was this page helpful?
0 / 5 - 0 ratings

Related issues

digaev picture digaev  路  3Comments

michaelperrygoodman picture michaelperrygoodman  路  10Comments

phpmaple picture phpmaple  路  10Comments

hemedani picture hemedani  路  8Comments

keyolk picture keyolk  路  9Comments