5 ms·
FWIW, zsh can do that stuff (and more!); e.g. set RPROMPT for a "right prompt". It also handles files with spaces just fine: $ touch a "b c" d $ for i
by eddyg 4y ago
FWIW, zsh can do that stuff (and more!); e.g. set RPROMPT for a "right prompt". It also handles files with spaces just fine:
$ touch a "b c" d
$ for i in *; { echo "<$i>" }
<a>
<b c>
<d>
Once I added 'zsh-syntax-highlighting' and 'zsh-autosuggestions' I didn't see a reason to deal with all the eccentricities of a non-standard shell like fish.
(If anybody is looking for a terrific "turn-key" zsh config that is fast, check out https://github.com/romkatv/zsh4humans/tree/v4 https://github.com/romkatv/zsh4humans/tree/v4 ... there are instructions for trying it out in Docker so it won't mess with your existing shell config.)
- kstrauser 4y agoYes, but here's what zsh's prompt setting looks like: https://zsh.sourceforge.io/Intro/intro_14.html https://zsh.sourceforge.io/Intro/intro_14.html In fish, it's literally just a function that runs normal commands. There's no special syntax or anything. And in any event, that's just an example. Fish feels like it was built to be ergonomic and convenient. It's also lightning fast because all of the nice things are built-in and don't have to be accreted around it.
- soraminazuki 4y agoIn other words, zsh uses format strings. You don't need to use the format specifiers, it's just there for convenience so that you won't need to spawn a bunch of processes to do trivial stuff. Here's one example that is very much ergonomic and convenient as the fish way: setopt prompt_subst PROMPT='$(whoami)@$(hostname): $(pwd) \$ ' Things don't have to be "accreted around" in zsh either. It has a powerful completion system, convenience commands and keybindings built into it. It can do pretty much what people want from fish sans the syntax. It's just that there are an abundance of plugins and frameworks around zsh because it was designed to be extensible from the ground up. Some of those frameworks do slow down the shell, but that's a problem with that particular framework, not inherent to how zsh works.
- kstrauser 4y agoI highly recommend installing Fish and experimenting with it for a couple of days, if only to see what a different approach to shell design looks like. Don’t try to make it into a Zsh clone, but use it as itself and see what you think. If you do that, I suspect you won’t find that prompt_subst is a good replacement for being able to write full-blown functions that allow complex flow logic like “if logged in as root…” or “if this is a Git directory…” or “if the last command succeeded…”. Yes, you can do all of those in Zsh in the sense that both shells are Turing complete, but wow, it’s nice when the shell makes it easy and fun to do these things.
- soraminazuki 4y agoYou can write full-blown functions for displaying prompts just as easily. prompt_custom() { if (( EUID == 0 )); then printf '# ' else printf '$ ' fi } setopt prompt_subst PROMPT='$(prompt_custom)' or more commonly, prompt_custom_precmd() { if (( EUID == 0 )); then PROMPT='# ' else PROMPT='$ ' fi } add-zsh-hook precmd prompt_custom_precmd I do occasionally check the fish repo for status updates, but decide not to make the switch because of syntax incompatibility concerns and lagging vi keybinding support. Those are issues that I would encounter on a daily basis if I were to use fish.