1
0
mirror of https://github.com/ohmyzsh/ohmyzsh.git synced 2025-12-12 15:34:50 +08:00

Compare commits

...

4 Commits

Author SHA1 Message Date
Marc Cornellà
0e833b622b refactor(vi-mode): remove duplicate bindkey logic and fix syntax 2021-01-02 23:59:55 +01:00
Robert Estelle
98762faa07
fix(vi-mode): control cursor, restore and use visual mode and speed up mode changes (#8004) 2021-01-02 22:41:57 +01:00
Paul Robert Lloyd
4298e89b4b
docs(nvm): clarify how to enable settings (#9542)
It wasn’t clear where I should set the `NVM_AUTOLOAD` variable. The clue was to be found in [the docs for another plugin](https://github.com/ohmyzsh/ohmyzsh/tree/master/plugins/fzf). It seems setting values need to come before Oh My Zsh is sourced.

Updated read me to reflect this, and the fact that one of the settings mentioned is specific to nvm, not this plugin.
2021-01-02 14:04:34 +01:00
Seamile
88ffc2f666
fix(lib): mark changes as MODIFIED on 'MM' in git_prompt_status (#9552)
In the output of `git status -sb`, 'MM' indicates there are both added and modified changes.
This change marks that case as MODIFIED instead of ADDED.
2021-01-02 11:57:06 +01:00
3 changed files with 95 additions and 25 deletions

View File

@ -170,7 +170,7 @@ function git_prompt_status() {
'\?\? ' 'UNTRACKED'
'A ' 'ADDED'
'M ' 'ADDED'
'MM ' 'ADDED'
'MM ' 'MODIFIED'
' M ' 'MODIFIED'
'AM ' 'MODIFIED'
' T ' 'MODIFIED'

View File

@ -11,9 +11,11 @@ plugins=(... nvm)
## Settings
- **`NVM_DIR`**: if you have installed nvm in a directory other than `$HOME/.nvm`, set and export `NVM_DIR`
to be the directory where you installed nvm.
If you installed nvm in a directory other than `$HOME/.nvm`, set and export `NVM_DIR` to be the directory
where you installed nvm.
These settings should go in your zshrc file, before Oh My Zsh is sourced:
- **`NVM_HOMEBREW`**: if you installed nvm via Homebrew, in a directory other than `/usr/local/opt/nvm`, you
can set `NVM_HOMEBREW` to be the directory where you installed it.

View File

@ -1,33 +1,61 @@
# Control whether to force a redraw on each mode change.
#
# Resetting the prompt on every mode change can cause lag when switching modes.
# This is especially true if the prompt does things like checking git status.
#
# Set to "true" to force the prompt to reset on each mode change.
# Set to "false" to force the prompt *not* to reset on each mode change.
#
# (The default is not to reset, unless we're showing the mode in RPS1).
typeset -g VI_MODE_RESET_PROMPT_ON_MODE_CHANGE
typeset -g VI_KEYMAP=main
function _vi-mode-set-cursor-shape-for-keymap() {
# https://vt100.net/docs/vt510-rm/DECSCUSR
local _shape=0
case "${1:-${VI_KEYMAP:-main}}" in
main) _shape=6 ;; # vi insert: line
viins) _shape=6 ;; # vi insert: line
isearch) _shape=6 ;; # inc search: line
command) _shape=6 ;; # read a command name
vicmd) _shape=2 ;; # vi cmd: block
visual) _shape=2 ;; # vi visual mode: block
viopp) _shape=0 ;; # vi operation pending: blinking block
*) _shape=0 ;;
esac
printf $'\e[%d q' "${_shape}"
}
# Updates editor information when the keymap changes.
function zle-keymap-select() {
# update keymap variable for the prompt
VI_KEYMAP=$KEYMAP
typeset -g VI_KEYMAP=$KEYMAP
zle reset-prompt
zle -R
if [[ "${VI_MODE_RESET_PROMPT_ON_MODE_CHANGE:-}" = true ]]; then
zle reset-prompt
zle -R
fi
_vi-mode-set-cursor-shape-for-keymap "${VI_KEYMAP}"
}
zle -N zle-keymap-select
function vi-accept-line() {
VI_KEYMAP=main
zle accept-line
# These "echoti" statements were originally set in lib/key-bindings.zsh
# Not sure the best way to extend without overriding.
function zle-line-init() {
typeset -g VI_KEYMAP=main
(( ! ${+terminfo[smkx]} )) || echoti smkx
_vi-mode-set-cursor-shape-for-keymap "${VI_KEYMAP}"
}
zle -N zle-line-init
zle -N vi-accept-line
function zle-line-finish() {
(( ! ${+terminfo[rmkx]} )) || echoti rmkx
_vi-mode-set-cursor-shape-for-keymap default
}
zle -N zle-line-finish
bindkey -v
# use custom accept-line widget to update $VI_KEYMAP
bindkey -M vicmd '^J' vi-accept-line
bindkey -M vicmd '^M' vi-accept-line
# allow v to edit the command line (standard behaviour)
autoload -Uz edit-command-line
zle -N edit-command-line
bindkey -M vicmd 'v' edit-command-line
# allow ctrl-p, ctrl-n for navigate history (standard behaviour)
bindkey '^P' up-history
bindkey '^N' down-history
@ -45,16 +73,56 @@ bindkey '^s' history-incremental-search-forward
bindkey '^a' beginning-of-line
bindkey '^e' end-of-line
function wrap_clipboard_widgets() {
# NB: Assume we are the first wrapper and that we only wrap native widgets
# See zsh-autosuggestions.zsh for a more generic and more robust wrapper
local verb="$1"
shift
local widget
local wrapped_name
for widget in "$@"; do
wrapped_name="_zsh-vi-${verb}-${widget}"
if [ "${verb}" = copy ]; then
eval "
function ${wrapped_name}() {
zle .${widget}
printf %s \"\${CUTBUFFER}\" | clipcopy
}
"
else
eval "
function ${wrapped_name}() {
CUTBUFFER=\"\$(clippaste)\"
zle .${widget}
}
"
fi
zle -N "${widget}" "${wrapped_name}"
done
}
wrap_clipboard_widgets copy vi-yank vi-yank-eol vi-backward-kill-word vi-change-whole-line vi-delete
wrap_clipboard_widgets paste vi-put-{before,after}
unfunction wrap_clipboard_widgets
# if mode indicator wasn't setup by theme, define default
if [[ "$MODE_INDICATOR" == "" ]]; then
MODE_INDICATOR="%{$fg_bold[red]%}<%{$fg[red]%}<<%{$reset_color%}"
if [[ -z "$MODE_INDICATOR" ]]; then
MODE_INDICATOR='%B%F{red}<%b<<%f'
fi
function vi_mode_prompt_info() {
# If we're using the prompt to display mode info, and we haven't explicitly
# disabled "reset prompt on mode change", then set it here.
#
# We do that here instead of the `if` statement below because the user may
# set RPS1/RPROMPT to something else in their custom config.
: "${VI_MODE_RESET_PROMPT_ON_MODE_CHANGE:=true}"
echo "${${VI_KEYMAP/vicmd/$MODE_INDICATOR}/(main|viins)/}"
}
# define right prompt, if it wasn't defined by a theme
if [[ "$RPS1" == "" && "$RPROMPT" == "" ]]; then
if [[ -z "$RPS1" && -z "$RPROMPT" ]]; then
RPS1='$(vi_mode_prompt_info)'
fi