为什么vim不使用shift和alt来表达我的映射

时间:2016-07-07 23:50:00

标签: macos vim iterm2

在Vim 7.4.1941中的OS X的iTerm2(以及终端)中,我试图将alt-right映射为向右移动一个单词,向左移动alt-left以向左移动一个单词。在.vimrc我有

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

alt-left可以正常工作,但alt-right则无效......

此外,我正在尝试向右移动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 ctrl + k 后跟所需的键/组合。然后使用什么 ctrl + k 作为键码而不是S-Up,S-Down等输出。唯一不起作用的是左移和左移对。它们都进入可视模式,但它们不会继续注册为左右。我必须将我的手从移位按钮上移开以继续选择...安装vim-fixkey的建议有助于它使这个当前配置可移植。希望这有助于未来的类似设置。如果有人知道为什么左移和右移不会在视觉模式下与hl进行匹配,这将完成我的问题的答案。 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

0 个答案:

没有答案