blob: 1dd28428e4c0767781bf8c6693726ddcde9fd7aa (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
|
bindkey -v
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 -s '[32;2u' ' '
bindkey '[127;2u' backward-delete-char
bindkey -s '[225;2u' ' '
bindkey -v '^?' backward-delete-char
bindkey -v '' backward-delete-char
autoload edit-command-line
zle -N edit-command-line
bindkey '' edit-command-line
# This allows a ctrl-w motion with neovim, so one does not have do a terminal
# escape to switch panes.
nvim-move-pane() {
read -sk key
nvimctl feedkeys "$key"
}
# Does anyone actually use the execute prompt in zsh? Rebind to go directly to
# the neovim command prompt.
nvim-cmd-mode() {
if [[ -z "$NVIM" ]] ; then
# fallback to original behavior.
zle execute-named-cmd
else
nvimctl feedkeys ":"
fi
}
quote-escape() {
sed "s/'/'\"'\"'/g;s/\\\\/\\\\\\\\/g" <<< "$1"
}
expand-last-file() {
local before_cursor=$LBUFFER
local after_cursor=$RBUFFER
local after_cursor_first_word=${after_cursor/ *}
local after_cursor_remaining=${after_cursor[${#after_cursor_first_word}+1,-1]}
local before_cursor_last_word=${before_cursor//* }
local before_cursor_remaining=${before_cursor[0, -${#before_cursor_last_word}-1]}
local file="${before_cursor_last_word}${after_cursor_first_word}"
if [ -f "${file}" ] ; then
local catted_file="$(cat ${file})"
catted_file="'$(quote-escape "${catted_file}")'"
local new_l_buffer="${before_cursor_remaining}${catted_file}"
BUFFER="${new_l_buffer}${after_cursor_remaining}"
CURSOR=$#new_l_buffer
fi
}
select-nvim-reg() {
read -sk reg
ZSH_VIM_REGISTER_SEL="$reg"
}
put-after-reg-override() {
reg_sel="$ZSH_VIM_REGISTER_SEL"
ZSH_VIM_REGISTER_SEL=""
if [ -z "$NVIM" ] || [ -z "$reg_sel" ] ; then
zle vi-put-after
else
new_l_buffer="${BUFFER[0,$CURSOR+1]}"
new_l_buffer="${new_l_buffer}$(nvimctl getreg "$reg_sel")"
new_r_buffer="${BUFFER[$CURSOR+2,-1]}"
BUFFER="${new_l_buffer}$new_r_buffer"
CURSOR=$#new_l_buffer
fi
}
nvim-complete-lst() {
compadd "lol" "hi" "you" "apples"
compadd "good" "day" "sir"
}
zle -C nvim-complete menu-select nvim-complete-lst
zle -N nvim-move-pane
zle -N nvim-cmd-mode
zle -N expand-last-file
zle -N select-nvim-reg
zle -N put-after-reg-override
bindkey -M vicmd '' nvim-move-pane
bindkey -M vicmd ':' nvim-cmd-mode
bindkey -M viins '' expand-last-file
# Allow selecting and pasting registers from neovim using @<reg>p
bindkey -M vicmd '@' select-nvim-reg
bindkey -M vicmd 'p' put-after-reg-override
bindkey -M viins '' nvim-complete
|