-
-
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 |
starship.rs might be a candidate to replace a bit of this... Thoughts?
@Arjentix @zaid-g
It turns out that, unless told to do otherwise, vim will just use whatever cursor shaped your terminal/shell is currently using. And when you type vim
and hit <return>
(even if you hit <esc>
to enter vi-mode and then hit <return>
) you are in main
or viins
mode/keymap in your shell and the zle-keymap-select
function has used echo -ne '\e[5 q'
to set your cursor to "blinking vertical bar". You can overcome this by doing:
echo -ne "\e[1 q"; vim
Or in vim you can do:
:!echo -ne "\e[1 q";
That is not convenient, but if it's possible, then it has to be scriptable! Sure enough, armed with that info, I was able to find this…
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.
"Mode Settings
let &t_SI.="\e[5 q" "SI = INSERT mode
let &t_SR.="\e[4 q" "SR = REPLACE mode
let &t_EI.="\e[1 q" "EI = NORMAL mode (ELSE)
"Cursor settings:
" 1 -> blinking block
" 2 -> solid block
" 3 -> blinking underscore
" 4 -> solid underscore
" 5 -> blinking vertical bar
" 6 -> solid vertical bar
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 curl
ing 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.
I ended up going with fish + starship.rs
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.
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.
@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"
Did you come up with the name "zoomer" shell? That is hilarious
Ctrl+z did take me to terminal from vim, but pressing ctrl+z from terminal did not take me back to vim, I ran ‘fg’ for that.