olets / zsh-abbr

The zsh manager for auto-expanding abbreviations, inspired by fish. ~13,000 unique cloners as of May '24, 580+ Homebrew installs 6/23-6/24
https://zsh-abbr.olets.dev
Other
510 stars 18 forks source link

This can/should co-exist with alias-tips #47

Closed sagarkar10 closed 2 years ago

sagarkar10 commented 2 years ago

That would be awesome if we can skip alias-tips repo suggestions if the command is coming from zsh-abbr Does it make sense to use both? Thoughts?

olets commented 2 years ago

Thanks for the idea!

alias-tips has an excludes array (https://github.com/djui/alias-tips#exclude-some-aliases). If for every abbreviation you have an alias with the same short form (for example, alias x="my command" and abbr x="my command") then adding this snippet to your .zshrc should automatically exclude all abbreviations when the shell initializes:

export ZSH_PLUGINS_ALIAS_TIPS_EXCLUDES="${(f)$(abbr l)}"

(that is, a single string from abbr l's multi-line output). If you're already excluding things,

export ZSH_PLUGINS_ALIAS_TIPS_EXCLUDES="myalias ${(f)$(abbr l)}"

After adding a new abbreviation, open a new terminal and/or refresh open terminals (source ~/.zshrc or, preferably, exec zsh) to exclude the newly added abbreviation.

Does that meet your need?

sagarkar10 commented 2 years ago

Yes, that's exactly what I needed! Feeling stupid, didn't figure out myself! Thanks a lot!

sagarkar10 commented 2 years ago

Also, a 2nd thought, we should auto sync alias and abbr in-case people are using both and transitioning!

olets commented 2 years ago

I've chosen to not support auto syncing because it would require letting abbr write and possibly first parse .zshrc. Have you tried abbr export-aliases and abbr import-aliases? See https://github.com/olets/zsh-abbr#commands for documentation.

You could do something like

  1. run abbr import-aliases once
  2. add to the end of your .zshrc

    abbr export-aliases > $HOME/aliases-from-abbr
    source $HOME/aliases-from-abbr

Putting it at the very end of your .zshrc will keep the aliases from breaking other parts of your shell initialization.

//

Another approach: run

abbr import-aliases

once and then delete as many aliases as possible. That's my personal recommendation. It would probably even obviate your alias-tips problem. If you decide to switch back to aliases, run abbr export-aliases once, and copy and paste that into your shell config.

sagarkar10 commented 2 years ago

I understand both the workarounds you proposed! But I wanted to suggest something different Assuming all the aliases are present in .zsh-aliases which is sourced in .zshrc

Someone might want to use both abbr and alias interchangeably.

What I suggest is

Let me know if that makes sense, I can add a PR, or we can discuss in more details about the implementation!

olets commented 2 years ago

Interesting idea! For now, it doesn't feel to me like syncing abbreviations and aliases is something zsh-abbr should take on — it's sort of a meta responsibility. But let's keep thinking it through.

//

abbr clear-all

Now and then I consider making a "delete all abbreviations" function… But I'm afraid if it existed I'd run it by mistake! The easiest way to roll your own will be

echo > $ABBR_USER_ABBREVIATIONS_FILE
abbr load

at session end

I'm not aware of a way to do this, but sounds cool. Are you?

//

What if you invert my previous idea, letting aliases be the source of truth

# .zshrc

source .zsh-aliases
# load zsh-abbr and then
abbr import-aliases --quiet

and to add an alias and an abbreviation use

% echo alias x=y > .zsh-aliases && exec zsh

(Could make a function for that, and abbralias x=y.) Or am I still not seeing your use case?