1

我在论坛上找到了这段代码,让我在标签之间切换时更轻松,我把它放在我的 ~/.vimrc 中。令人高兴的是,它运作良好。不幸的是,每当我 ctrl+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>
4

2 回答 2

2

光标向后移动一个字符,因为它是这样i工作的。从技术上讲,您可以更改

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

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

保持插入模式不是一个好主意。如果你忍不住,我建议你删除这三个imap~/.vimrc以强制你正确使用 Vim。

顺便说一句……</p>

  • 您不需要:在您的~/.vimrc:

    map <C-t> :tabnew<cr>
    
  • 你并不真的需要那些:map,因为你已经拥有nmap(并且imap,但它应该去)。

  • <C-t>非常有用,无论是在插入模式(缩进当前行)还是在普通模式(返回标签堆栈)。你不应该那样覆盖它。

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

  • 选项卡并非设计为文件的一对一代理,因此不应这样使用。您应该改用缓冲区。

于 2013-10-16T20:21:46.127 回答
0

romainl 所说的一切都是很好的建议,特别是选项卡不应该像其他编辑器那样作为文件的一对一代理。学会使用缓冲器,你的生活会更轻松。它们真的非常简单:你真正需要的只是:set hidden, :ls, :bn, :bp, 可能是一些映射,比如你为选项卡设置的映射,以及一些 Vim 帮助。

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

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

于 2013-10-17T07:24:23.690 回答