VIM ctrl + tab更改标签向后移动光标

时间:2013-10-16 19:21:36

标签: vim tabs

我发现这个代码是在我在〜/ .vimrc中切换选项卡时让生活更轻松的论坛。令人高兴的是,它运作良好。不幸的是,每当我按c + + tab更改标签时,光标会向后移动一个字符。任何人都可以帮我把光标放在一个地方吗?

set showtabline=2
:nmap <C-S-tab> :tabprevious<cr>
:nmap <C-tab> :tabnext<cr>
:nmap <C-t> :tabnew<cr>
:map <C-t> :tabnew<cr>
:map <C-S-tab> :tabprevious<cr>
:map <C-tab> :tabnext<cr>
:map <C-w> :tabclose<cr>
:imap <C-S-tab> <ESC>:tabprevious<cr>i
:imap <C-tab> <ESC>:tabnext<cr>i
:imap <C-t> <ESC>:tabnew<cr>

2 个答案:

答案 0 :(得分:2)

光标向后移动一个字符,因为这是i的工作方式。从技术上讲,你可以改变

:imap <C-tab> <ESC>:tabnext<cr>i

:imap <C-tab> <ESC>:tabnext<cr>li

保持插入模式并不是一个好主意。如果您无法提供帮助,我建议您从imap中删除三个~/.vimrc,以强制您正确使用Vim。

顺便说一句......

  • 您的:

    中不需要那个~/.vimrc
    map <C-t> :tabnew<cr>
    
  • 你真的不需要那些:map因为你已经nmap(和imap,但它应该去了)。

  • <C-t>非常有用,无论是在插入模式下(缩进当前行)还是在正常模式下(返回tagstack)。你不应该这样覆盖它。

  • <C-S-Tab>可能无法在终端中使用。

  • 标签不是设计为文件的1对1代理,因此不应该这样使用。你应该使用缓冲区。

答案 1 :(得分:0)

romainl所说的一切都是很好的建议,特别是标签不应该作为文件的一对一代理工作,就像在其他编辑器中一样。学习使用缓冲液,你的生活将更容易。它们非常简单:您真正需要的只是:set hidden:ls:bn:bp,也许是您为标签设置的映射,还有一点Vim的帮助。

那就是说,romainl的映射会在一行结束时失败。更好的解决方案是使用<C-o>,它会暂时使您退出插入模式以执行一个命令,并考虑诸如行尾行为之类的内容。你可以使用:

:imap <C-tab> <C-o>:tabnext<cr>