-
Notifications
You must be signed in to change notification settings - Fork 0
/
modifiers.vim
102 lines (84 loc) · 3.07 KB
/
modifiers.vim
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
""" Modifier Setup: Alt and Mod4
" http://vim.wikia.com/wiki/Fix_meta-keys_that_break_out_of_Insert_mode
" http://vim.wikia.com/wiki/Mapping_fast_keycodes_in_terminal_Vim
" Set value of keycode or map in all modes {{{1
function! s:Setmap(map, seq)
try
" Some named values can be `set'
execute 'set ' . a:map . '=' . a:seq
catch
" The rest can simply be mapped
execute 'map <special> ' . a:seq . ' ' . a:map
execute 'map! <special> ' . a:seq . ' ' . a:map
endtry
endfunction
let namedkeys = {
\ ' ': 'Space',
\ '\': 'Bslash',
\ '|': 'Bar',
\ '<': 'lt'
\ }
" Map {Alt,Mod4} + ASCII printable chars {{{1
for n in range(0x20, 0x7e)
let char = nr2char(n)
let key = char
if has_key(namedkeys, char)
let char = namedkeys[char]
let key = '<' . char . '>'
endif
" Escaped Meta (i.e. not 8-bit mode)
" * Esc-[ is the CSI prefix (Control Sequence Introducer)
" * Esc-O is the SS3 prefix (Single Shift Select of G3 Character Set)
if char !=# '[' && char !=# 'O'
call s:Setmap('<M-' . char . '>', "\<Esc>" . key)
endif
" Super / Mod4
" * Assumes terminal sends \033\007 as the Mod4 prefix. This can be
" accomplished in rxvt-unicode using the keysym-list extension:
"
" ~/.Xdefaults:
" URxvt.keysym.Mod4-0x20: list \033\007 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~
"
" Note that literal tab characters are used as delimiters as the
" resource argument contains a list of all printable ASCII characters.
call s:Setmap('<4-' . char . '>', "\<Esc>\<C-g>" . key)
endfor
unlet namedkeys n char key
""" Special Keys {{{1
" Backspace
call s:Setmap("<C-BS>", "\<C-h>")
call s:Setmap("<M-BS>", "\<Esc><BS>")
" Return
call s:Setmap("<M-CR>", "\<Esc>\<CR>")
call s:Setmap("<4-CR>", "\<Esc>\<C-g>\<CR>")
" Backslash
call s:Setmap("<M-Bslash>", "\<Esc>\\")
" Arrow keys
if exists('$TMUX')
call s:Setmap("<C-Up>", "\<Esc>[A")
call s:Setmap("<C-Down>", "\<Esc>[B")
call s:Setmap("<C-Right>", "\<Esc>[C")
call s:Setmap("<C-Left>", "\<Esc>[D")
else
call s:Setmap("<C-Up>", "\<Esc>Oa")
call s:Setmap("<C-Down>", "\<Esc>Ob")
call s:Setmap("<C-Right>", "\<Esc>Oc")
call s:Setmap("<C-Left>", "\<Esc>Od")
endif
call s:Setmap("<S-Up>", "\<Esc>[a")
call s:Setmap("<S-Down>", "\<Esc>[b")
call s:Setmap("<S-Right>", "\<Esc>[c")
call s:Setmap("<S-Left>", "\<Esc>[d")
call s:Setmap("<M-Up>", "\<Esc><Up>")
call s:Setmap("<M-Down>", "\<Esc><Down>")
call s:Setmap("<M-Right>", "\<Esc><Right>")
call s:Setmap("<M-Left>", "\<Esc><Left>")
call s:Setmap("<4-Up>", "\<Esc>\<C-g>\<C-g>a")
call s:Setmap("<4-Down>", "\<Esc>\<C-g>\<C-g>b")
call s:Setmap("<4-Right>", "\<Esc>\<C-g>\<C-g>c")
call s:Setmap("<4-Left>", "\<Esc>\<C-g>\<C-g>d")
call s:Setmap("<4-S-Up>", "\<Esc>\<C-g>\<C-g>A")
call s:Setmap("<4-S-Down>", "\<Esc>\<C-g>\<C-g>B")
call s:Setmap("<4-S-Right>", "\<Esc>\<C-g>\<C-g>C")
call s:Setmap("<4-S-Left>", "\<Esc>\<C-g>\<C-g>D")
delfunction s:Setmap