使用<tab>和<s-tab> </s-tab> </tab>在Vim窗口之间移动

时间:2012-02-07 03:04:58

标签: vim window keyboard-shortcuts minibufexplorer

我的.vimrc中有以下几行:

nnoremap <tab> :wincmd w<cr>
nnoremap <s-tab> :wincmd W<cr>

我希望在普通模式下快速在Vim窗口之间移动。上面的映射在窗口之间可以正常工作,但是当我到达MiniBufExplorer时,它会卡住并且不会旋转到第一个窗口。

我该如何映射它以便它不会进入MiniBufExplorer?

2 个答案:

答案 0 :(得分:3)

minibufexpl.vim插件中有两行重新映射Tab以循环显示MiniBufExplorer窗口中显示的缓冲区名称。如果您删除/评论这些,您的标签重新映射将起作用。

nnoremap <buffer> <TAB>   :call search('\[[0-9]*:[^\]]*\]')<CR>:<BS>
nnoremap <buffer> <S-TAB> :call search('\[[0-9]*:[^\]]*\]','b')<CR>:<BS>

此外,还有一些全局设置已经控制了用于在窗口或缓冲区之间切换的C-Tab功能。您可能想要修改这些或至少知道此功能。注意,您仍然需要删除上面的Tab映射以获得基于Tab(而不是C-Tab)的移动。

if !exists('g:miniBufExplMapCTabSwitchBufs')
  let g:miniBufExplMapCTabSwitchBufs = 0
endif

" Notice: that if CTabSwitchBufs is turned on then
" we turn off CTabSwitchWindows.
if g:miniBufExplMapCTabSwitchBufs == 1 || !exists('g:miniBufExplMapCTabSwitchWindows')
  let g:miniBufExplMapCTabSwitchWindows = 1
endif 

" If we have enabled <C-TAB> and <C-S-TAB> to switch buffers
" in the current window then perform the remapping
"
if g:miniBufExplMapCTabSwitchBufs
  noremap <C-TAB>   :call <SID>CycleBuffer(1)<CR>:<BS>
  noremap <C-S-TAB> :call <SID>CycleBuffer(0)<CR>:<BS>
endif

" If we have enabled <C-TAB> and <C-S-TAB> to switch windows
" then perform the remapping
"
if g:miniBufExplMapCTabSwitchWindows
  noremap <TAB>   <C-W>w
  noremap <S-TAB> <C-W>W
endif

答案 1 :(得分:0)

不完全是你要求的,但这些是在窗口之间移动的有用的键盘快捷键。

map <c-j> <c-w>j
map <c-k> <c-w>k
map <c-h> <c-w>h
map <c-l> <c-w>l

这使得Ctrl + <direction>在窗口之间移动(包括MiniBufExpl打开时)。 Tab可能最好保留用于代码完成,请查看SuperTab plugin