当我按下Vim中的tab时,转到关闭引号/括号

时间:2014-03-12 15:12:59

标签: vim

我一直在玩自动关闭引号和括号的Vim插件。

我认为我不会继续使用这些插件,因为他们有时会因为他们的行为而吓到我,但我认为这将是一个很好的插件创意。

基本上如下。当你在一个块(引号或括号或其他)内时,按Tab键会将你带到外面,块的末尾。

以下是一个示例,|是光标:

(let stuff (+ 1 2|)) ; yo!

; press tab:
(let stuff (+ 1 2)|) ; yo!

; press tab again:
(let stuff (+ 1 2))| ; yo!

希望得到这个想法。可能已经有一个插件或配置,但我仍然有兴趣看看如何实现这一点。

引用我的评论,如下:

  

我需要的是在插入模式下工作的东西,只有当我在其中一个块内时,否则就像插入一个真正的标签一样(因为你需要多长时间在一个字符串中放一个标签?)。

2 个答案:

答案 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>'