我想在Vim中进行映射,以便 Ctrl Tab 切换到上一个缓冲区(:b#
),但是如果再次按下Tab 而不释放 Ctrl ,切换到下一个缓冲区(:bn
)。
这类似于MS Windows中的 Alt Tab 功能。有没有办法达到这个效果?
我似乎无法在其他任何地方找到这个问题。
答案 0 :(得分:1)
Vim仅处理完整的按键操作; <LeftMouse>
与<LeftRelease>
之间只有轻微的语义差异。你不知何故需要将关键的chording处理成不同的,单独的键击(可能是一些未使用的<F13>
键?),然后可以在Vim内部:map
。在Windows上,AutoHotkey tool可以让您实现这一目标。
或者,您可以:nmap <C-Tab>
,并检查上一次调用是否仅在最近发生(使用localtime()
)。这应该会给你一些实际上你想要的东西。
答案 1 :(得分:0)
这是我写的vimscript,对任何感兴趣的人。我使用AutoHotkey将 Ctrl 的发布映射到 F13 。 (见Ingo Karkat的回答)
let g:ctrl_held = 0
let g:prev_buf = 1
function! Ctrltab()
if g:ctrl_held == 0
let cmd = ":b".g:prev_buf."\<CR>"
if g:prev_buf == bufnr('')
let cmd = ":bn\<CR>"
endif
let g:prev_buf = bufnr('')
let g:ctrl_held = 1
return cmd
else
return ":bn\<CR>"
endif
endfunction
nmap <expr> <C-Tab> Ctrltab()
nmap <silent> <F13> :let g:ctrl_held = 0<CR>