Skip to content

Instantly share code, notes, and snippets.

@LukeSmithxyz
Created September 21, 2019 17:50
Show Gist options
  • Save LukeSmithxyz/e62f26e55ea8b0ed41a65912fbebbe52 to your computer and use it in GitHub Desktop.
Save LukeSmithxyz/e62f26e55ea8b0ed41a65912fbebbe52 to your computer and use it in GitHub Desktop.
# Luke's config for the Zoomer Shell
# Enable colors and change prompt:
autoload -U colors && colors
PS1="%B%{$fg[red]%}[%{$fg[yellow]%}%n%{$fg[green]%}@%{$fg[blue]%}%M %{$fg[magenta]%}%~%{$fg[red]%}]%{$reset_color%}$%b "
# History in cache directory:
HISTSIZE=10000
SAVEHIST=10000
HISTFILE=~/.cache/zsh/history
# Basic auto/tab complete:
autoload -U compinit
zstyle ':completion:*' menu select
zmodload zsh/complist
compinit
_comp_options+=(globdots) # Include hidden files.
# vi mode
bindkey -v
export KEYTIMEOUT=1
# Use vim keys in tab complete menu:
bindkey -M menuselect 'h' vi-backward-char
bindkey -M menuselect 'k' vi-up-line-or-history
bindkey -M menuselect 'l' vi-forward-char
bindkey -M menuselect 'j' vi-down-line-or-history
bindkey -v '^?' backward-delete-char
# Change cursor shape for different vi modes.
function zle-keymap-select {
if [[ ${KEYMAP} == vicmd ]] ||
[[ $1 = 'block' ]]; then
echo -ne '\e[1 q'
elif [[ ${KEYMAP} == main ]] ||
[[ ${KEYMAP} == viins ]] ||
[[ ${KEYMAP} = '' ]] ||
[[ $1 = 'beam' ]]; then
echo -ne '\e[5 q'
fi
}
zle -N zle-keymap-select
zle-line-init() {
zle -K viins # initiate `vi insert` as keymap (can be removed if `bindkey -V` has been set elsewhere)
echo -ne "\e[5 q"
}
zle -N zle-line-init
echo -ne '\e[5 q' # Use beam shape cursor on startup.
preexec() { echo -ne '\e[5 q' ;} # Use beam shape cursor for each new prompt.
# Use lf to switch directories and bind it to ctrl-o
lfcd () {
tmp="$(mktemp)"
lf -last-dir-path="$tmp" "$@"
if [ -f "$tmp" ]; then
dir="$(cat "$tmp")"
rm -f "$tmp"
[ -d "$dir" ] && [ "$dir" != "$(pwd)" ] && cd "$dir"
fi
}
bindkey -s '^o' 'lfcd\n'
# Edit line in vim with ctrl-e:
autoload edit-command-line; zle -N edit-command-line
bindkey '^e' edit-command-line
# Load aliases and shortcuts if existent.
[ -f "$HOME/.config/shortcutrc" ] && source "$HOME/.config/shortcutrc"
[ -f "$HOME/.config/aliasrc" ] && source "$HOME/.config/aliasrc"
# Load zsh-syntax-highlighting; should be last.
source /usr/share/zsh/plugins/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh 2>/dev/null
@RichardBronosky
Copy link

RichardBronosky commented Mar 3, 2021

Also, it seems that Luke is not updating this gist and the voidrice version is being maintained instead. To compare you can vimdiff 2 process substitutions curling the raw URLs of each like so:

vimdiff <(curl -sL "https://gist.github.com/LukeSmithxyz/e62f26e55ea8b0ed41a65912fbebbe52/raw/zshrc") \
        <(curl -sL "https://github.com/LukeSmithxyz/voidrice/raw/master/.config/zsh/.zshrc")

NOTE

A process substitution is shell syntactic sugar that creates temporary FIFOs (ie /dev/fd/11) for a process. These can be used where a file is expected. Learn it. Love it.

@dm17
Copy link

dm17 commented Mar 3, 2021

I ended up going with fish + starship.rs

@chris-w-jarvis
Copy link

chris-w-jarvis commented Mar 16, 2021

Also, it seems that Luke is not updating this gist and the voidrice version is being maintained instead.

Thanks @RichardBronosky , for anyone else attempting to install this on MacOS, the last line where you install the syntax highlighting did not work for me out of the box. You will need to also install the syntax highlighting plugin from https://github.com/zdharma/fast-syntax-highlighting and then correctly reference your install location in the last line of the .zshrc file.

Also, the autosuggestions were the killer feature of Fish for me, here is good alternative for zsh: https://github.com/zsh-users/zsh-autosuggestions/blob/master/INSTALL.md It works well but it doesn't seem to query the global history as Fish does.

@array-in-a-matrix
Copy link

You inspired me to do a rangercd:

rangercd () {
    tmp="$(mktemp)"
    ranger --choosedir="$tmp" "$@"
    if [ -f "$tmp" ]; then
        dir="$(cat "$tmp")"
        rm -f "$tmp"
        [ --datadir "$dir" ] && [ "$dir" != "$(pwd)" ] && cd "$dir"                                               
    fi
}

so you just have to switch
last-dir-path with --choosedir and -d with --datadir

another plugin you could very appreciate is zsh-autosuggestions or fzf (fuzzy finder for ZSH)

also: does lf have an imagepreview?

I am a bit late to reply lol but lf actually does have image preview check out lfimg. It works flawless and I prefer it over ranger.

@jessebrennan
Copy link

jessebrennan commented Dec 28, 2021

@RichardBronosky (and @Arjentix and @zaid-g if you're still following),

Taken from https://vim.fandom.com/wiki/Change_cursor_shape_in_different_modes#For_Terminal_on_macOS adding this to my ~/.vim/vimrc gave me the same behavior in vim as in zsh.

None of these worked for me, but what finally got the cursor to reset was:

:silent !echo -ne "\e[2 q"

@RyanTippsTX
Copy link

Did you come up with the name "zoomer" shell? That is hilarious

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment