我发现这个代码是在我在〜/ .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>
答案 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>