根据是否使用制表符或缓冲区,将<c-j>映射到:tabnext OR:智能地显示bnext </c-j>

时间:2013-06-25 20:27:42

标签: vim

我想不时开始使用缓冲区(而不是总是使用制表符)。

我已经习惯使用快捷键,Ctrl + J&amp;按Ctrl + K在标签之间移动。

有没有办法以智能处理标签或缓冲区的方式映射这些快捷方式?

3 个答案:

答案 0 :(得分:2)

有一个有趣但未充分利用且半不切实际的选项,允许您切换到缓冲区而不是此处::help 'switchbuf'

这很有意思,因为:bn的默认行为(例如,对于所有:b*命令都是相同的)是将当前缓冲区替换为您要切换到的缓冲区,无论它是否已在其他位置显示或不。

它使用不足,因为它只适用于:sb - 相关和快速修复命令。

这是不切实际的,因为当您切换到的缓冲区尚未显示在某处时,:sb会以新的分割方式打开它。

这里显然有改进的余地。

无论如何,你可以尝试这样的事情:

set switchbuf=useopen,usetab
nnoremap <C-j> :sbnext<CR>

或完全停止使用标签,因为它们的设计和调整并不适合您希望它们如何工作。

答案 1 :(得分:2)

如果有多个切换标签怎么样,切换缓冲区只有一个标签页?!这可以通过简单的映射来完成:

:nnoremap <silent> <C-j> :<C-u>if tabpagenr('$') > 1<Bar>tabnext<Bar>else<Bar>bnext<Bar>endif<CR>

答案 2 :(得分:0)

这应该有效

:map <C-J> <Esc>:tabnext<CR>

这将显示一个编号列表,并且可以输入所需的数字以访问所需的缓冲区

:nnoremap <C-J> :buffers<CR>:buffer<Space>