我一直在玩自动关闭引号和括号的Vim插件。
我认为我不会继续使用这些插件,因为他们有时会因为他们的行为而吓到我,但我认为这将是一个很好的插件创意。
基本上如下。当你在一个块(引号或括号或其他)内时,按Tab键会将你带到外面,块的末尾。
以下是一个示例,|
是光标:
(let stuff (+ 1 2|)) ; yo!
; press tab:
(let stuff (+ 1 2)|) ; yo!
; press tab again:
(let stuff (+ 1 2))| ; yo!
希望得到这个想法。可能已经有一个插件或配置,但我仍然有兴趣看看如何实现这一点。
引用我的评论,如下:
我需要的是在插入模式下工作的东西,只有当我在其中一个块内时,否则就像插入一个真正的标签一样(因为你需要多长时间在一个字符串中放一个标签?)。
答案 0 :(得分:6)
这适用于您的一项要求,但如果您不在某个区块内,则不会插入tab
。
imap <tab> <esc>])a
使用])
命令移动到括号末尾,它将转到右括号。
您可以使用
将其映射到tab
nnoremap <tab> ])
答案 1 :(得分:4)
这确实可以用:inoremap <expr> <Tab> ...
来实现,它必须返回(例如<Right>
)键以将光标移动到结束括号之外(表达式映射优于暂时离开插入模式,这将创建一个新的撤销点等。)
要实现这一点,您可以将search()
与n
标志一起使用,以便它不会移动,使用带有\%#
的正则表达式来断言光标周围的括号。 / p>
:inoremap <expr> <Tab> search('\%#[]>)}]', 'n') ? '<Right>' : '<Tab>'