One of the main reason I switched from ZSH to Fish is the ability of
highlighting command output and the relative small autocomplete, which don’t lag
your computer down when you have a few hundreds results like zsh.
But what I didn’t expect is to rewrite my whole .bash_profile in Fish (Fish is
not bash, so it doesn’t use Bash syntax, that’s why you can’t source your
.bash_profile file), well, that’s not a hard thing. Just need to read the
documentation and learn some changes, such as:
export ABC="abc" # now becomes set -x ABC abc
If you execute a command during setting value, you need to change the syntax as well:
export RUST_SRC_PATH="$(rustc --print sysroot)/lib/rustlib/src/rust/src" # now becomes set -x RUST_SRC_PATH (rustc --print sysroot)/lib/rustlib/src/rust/src
For $PATH, I prefer to use export command separately from set -x, for whatever
reason, I like it:
export PATH=new/path:$PATH # now becomes set PATH new/path $PATH export PATH
For aliases, it’s almost the same:
alias vim="emacs" # now becomes alias vim "emacs"
If you use tmux, you probably have this in your .bash_profile or .bashrc:
if [ -z "$TMUX" ]; then
if [ -z "$EMACS" ] && [ -z "$VSCODE" ]; then
tmux new
fi
fi
Then you need to convert it to Fish, mostly remove the brackets [] and add a
test command:
if test -z "$TMUX";
if test -z "$EMACS"; and test -z "$VSCODE";
tmux new
end
end
And if you use nvm, you hit the wall, since it’s heavily rely on Bash, there are
some solutions such as installing bass to be able to run Bash scripts in your
Fish config, but even if you go that route, initializing nvm still slowing down
your shell startup time.
A better solution is using fash-nvm-fish, it’s a wrapper around nvm, which
doesn’t required to parse the env config everytime you start your shell, so it’s
fast. The installing process is simple, you can just follow the instruction on
the Github repo. I’ll not copy it here.
If your nvm isn’t in the default directory, which is /root/.nvm/, you need to
set the NVM_DIR variable, before calling nvm, in my case, it is:
set -gx NVM_DIR /usr/local/opt/nvm/ nvm use 9 --default
That’s it, just a few steps. Happy fishing.