如果我在插入模式下有一个标签,并且在我上次查看时切换到另一个处于正常模式的标签,则它会更改为插入模式。这让我失望了。如何更改选项卡的本地更改模式?
答案 0 :(得分:1)
如何切换到其他标签?用鼠标点击标签行(这是我可以重现的唯一方法)?!你应该避免在Vim中使用鼠标,但这会改变行为:
:autocmd TabEnter * stopinsert
要使用键盘切换标签,通常可以通过普通模式中的gt
命令来完成,因此您已经离开了插入模式(只需使用<Esc>
,不是<C-O>
)。
对于更类似浏览器的行为,我有以下键映射:
" CTRL-Tab next tab
noremap <C-Tab> :<C-U>tabnext<CR>
inoremap <C-Tab> <C-\><C-N>:tabnext<CR>
cnoremap <C-Tab> <C-C>:tabnext<CR>
" CTRL-SHIFT-Tab previous tab
noremap <C-S-Tab> :<C-U>tabprevious<CR>
inoremap <C-S-Tab> <C-\><C-N>:tabprevious<CR>
cnoremap <C-S-Tab> <C-C>:tabprevious<CR>
答案 1 :(得分:0)
Vim的当前模式是编辑范围的。你不能强迫它跟随标签或缓冲区或窗口或任何东西。
你可以做的事情是,当你离开标签时,它会以当前模式存储,并在你进入标签时恢复它。
这可以在正常模式和任何一种插入/替换模式之间切换;但是在插入/替换模式之间切换似乎不会出于某种原因:
augroup TAB_MODES
au!
autocmd TabLeave * let t:lastmode = mode(1)
autocmd TabEnter * if !exists('t:lastmode') | let t:lastmode = 'n' | endif
autocmd TabEnter * if t:lastmode ==# 'n' | stopinsert | endif
autocmd TabEnter * if t:lastmode ==# 'i' | startinsert | endif
autocmd TabEnter * if t:lastmode ==# 'R' | startreplace | endif
autocmd TabEnter * if t:lastmode ==# 'Rv' | startgreplace | endif
augroup END
这使用tab-local变量在您离开文件时存储当前模式,并在您重新进入选项卡时使用它来启动正确的插入或替换模式(或停止插入模式)。这里不包括一些模式;例如,我无法使用可视模式(我尝试了多种方式调用gv
但没有成功)。