Почему vim не соблюдает мои сопоставления с помощью shift и alt

В iTerm2 (а также в терминале) для OS X в Vim 7.4.1941 я пытаюсь сопоставить alt-right, чтобы переместить одно слово вправо, и alt-left, чтобы переместить одно слово влево. В .vimrc у меня есть

noremap <A-LEFT> b
noremap <A-RIGHT> w

Альтернативный левый работает, а альтернативный правый ничего не делает...

Также я пытаюсь сопоставить Shift вправо, чтобы войти в визуальный режим, нажать «вправо» map <S-RIGHT> v<RIGHT> и сдвинуть влево, чтобы войти в визуальный режим и переместиться влево map <S-LEFT> v<LEFT>. Вместо этого сдвиг вправо ничего не делает, а сдвиг влево выдает ошибку: E388: Couldn't find definition. И моя конфигурация карты (см. ниже) не указывает, что другие плагины настраивают эти сопоставления, поэтому я не уверен, что происходит.

n  \j            <Plug>(CommandTJump)
n  \b            <Plug>(CommandTBuffer)
n  \t            <Plug>(CommandT)
v  gx            <Plug>NetrwBrowseXVis
n  gx            <Plug>NetrwBrowseX
v  <Plug>NetrwBrowseXVis * :<C-U>call netrw#BrowseXVis()<CR>
n  <Plug>NetrwBrowseX * :call netrw#BrowseX(expand((exists("g:netrw_gx")? g:netrw_gx : '<cfile>')),netrw#CheckIfRemote())<CR>
n  <Plug>(CommandTTag) * :CommandTTag<CR>
n  <Plug>(CommandTSearch) * :CommandTSearch<CR>
n  <Plug>(CommandTMRU) * :CommandTMRU<CR>
n  <Plug>(CommandTLine) * :CommandTLine<CR>
n  <Plug>(CommandTCommand) * :CommandTCommand<CR>
n  <Plug>(CommandTJump) * :CommandTJump<CR>
n  <Plug>(CommandTHistory) * :CommandTHistory<CR>
n  <Plug>(CommandTHelp) * :CommandTHelp<CR>
n  <Plug>(CommandTBuffer) * :CommandTBuffer<CR>
n  <Plug>(CommandT) * :CommandT<CR>
v  <BS>          "-d
v  <D-x>         "*d
v  <D-c>         "*y
v  <D-v>         "-d"*P
n  <D-v>         "*P

Также мой .vimrc:

" Use arrow keys
map <D-A-RIGHT> <C-w>l
map <D-A-LEFT> <C-w>h
map <D-A-DOWN> <C-w><C-w>
map <D-A-UP> <C-w>W

" Go to last active tab
nnoremap <C-Left> :tabprevious<CR>
nnoremap <C-Right> :tabnext<CR>
" Go to tab by number
noremap <leader>1 1gt
noremap <leader>2 2gt
noremap <leader>3 3gt
noremap <leader>4 4gt
noremap <leader>5 5gt
noremap <leader>6 6gt
noremap <leader>7 7gt
noremap <leader>8 8gt
noremap <leader>9 9gt
noremap <leader>0 :tablast<CR>

" option/alt selection/navigation
noremap <A-LEFT> b
noremap <A-RIGHT> w
imap <A-RIGHT> <ESC>w
imap <A-LEFT> <ESC>b
vmap <A-RIGHT> w
vmap <A-LEFT> b

" shift+arrow selection
noremap <S-Up> v<Up>
noremap <S-Down> v<Down>
noremap <S-Left> v<Left>
noremap <S-Right> v<Right>
vmap <S-Up> <Up>
vmap <S-Down> <Down>
vmap <S-Left> <Left>
vmap <S-Right> <RIGHT>
imap <S-Up> <Esc>v<UP>
imap <S-Down> <Esc>v<DOWN>
imap <S-Left> <Esc>v<LEFT>
imap <S-Right> <Esc>v<RIGHT>

" Cut, copy, paste
vmap <C-c> y<Esc>i
vmap <C-x> d<Esc>i
map <C-v> pi
imap <C-v> <Esc>pi
imap <C-z> <Esc>ui

" Begin vim-plug plugins
call plug#begin('~/.vim/plugged')

Plug 'wincent/command-t', {
    \   'do': 'cd ruby/command-t && ruby extconf.rb && make'
    \ }


call plug#end()

ИЗМЕНИТЬ

Мне удалось сопоставить все клавиши, кроме shift+ и shift+, с помощью :map < kbd>ctrl+k, за которым следует желаемая клавиша/комбинация. Затем, используя то, что ctrl+k выводит как код клавиши вместо S-Up, S-Down и т. д. Единственные, которые не работают, это сдвиг влево и сдвиг правильно. Они оба входят в визуальный режим, но не продолжают регистрироваться как левый и правый. Мне приходится убрать руку с кнопки Shift, чтобы продолжить выбор... Предложение установить vim-fixkey помогло тем, что оно сделало эту текущую конфигурацию переносимой. Надеюсь, это поможет тем, кто в будущем будет иметь аналогичную настройку. Если кто-нибудь знает, почему сдвиг влево и сдвиг вправо не отображаются на h и l в визуальном режиме, это завершит ответ на мой вопрос. Клавиши Alt теперь работают. Обновленный конфиг выглядит следующим образом:

" Go to last active tab
nnoremap [5D :tabprevious<CR> " Ctrl+left
nnoremap [5C :tabnext<CR> " Ctrl+right
" Go to tab by number
noremap <leader>1 1gt
noremap <leader>2 2gt
noremap <leader>3 3gt
noremap <leader>4 4gt
noremap <leader>5 5gt
noremap <leader>6 6gt
noremap <leader>7 7gt
noremap <leader>8 8gt
noremap <leader>9 9gt
noremap <leader>0 :tablast<CR>

" option/alt selection/navigation
nmap æ vw
nmap â vb
vmap â b
vmap æ w
imap â <Esc>vb
imap æ <Esc>vw

" shift+arrow selection
nmap [A vk " Shift+up
nmap <T-S-Up> vk
nmap [B vj " Shift+down
nmap <T-S-Up> vj
nmap [D vh " Shift+left
nmap [C vl " Shift + right

nmap <T-S-Right> vw
nmap <T-S-Left> vb
imap <T-S-Left> <Esc>vb
imap <T-S-Right> <Esc>vw
vmap <T-S-Left> b
vmap <T-S-Right> w

vmap [A k
vmap <T-S-Up> k
vmap [B j
vmap <T-S-Down> j
vmap [D h
vmap [C l
imap [A <Esc>vk
imap <T-S-Up> <Esc>vk
imap [B <Esc>vj
imap <T-S-Down> <Esc>vj
imap [D <Esc>vh
imap [C <Esc>vl

" Cut, copy, paste
vmap <C-c> y<Esc>i
vmap <C-x> d<Esc>i
map <C-v> pi
imap <C-v> <Esc>pi
imap <C-z> <Esc>ui

person thed0ctor    schedule 07.07.2016    source источник
comment
Часть этого сводится к вашему терминалу и тому, что он способен кодировать. В зависимости от вашей среды вам может быть полезен vim-fixkey. документы определенно стоит прочитать.   -  person John Szakmeister    schedule 08.07.2016
comment
Да, я знаю, что вы (к сожалению) не можете переназначить Shift-Enter в iTerm2. Я не уверен в ваших сопоставлениях. Возможно, вам повезет больше, используя macvim вместо iTerm.   -  person lwassink    schedule 08.07.2016
comment
Клавиша <Alt> невидима для Vim, а <S-Arrow> неотличима от <Arrow>. Используйте другие более переносимые сопоставления или, что лучше, привыкайте к командам Vim по умолчанию, поскольку они намного эффективнее всего, что вы могли бы придумать.   -  person romainl    schedule 08.07.2016