按下Vim中的tab键时,转到关闭报价/支架

按下Vim中的tab键时,转到关闭报价/支架,vim,Vim,我一直在玩自动关闭引号和括号的Vim插件 我不认为我会继续使用这些插件,因为它们的行为有时会让我抓狂,但我认为这将是一个很好的插件想法 基本上如下。当您在一个块(引号或括号或任何东西)内时,按tab键会将您带到块的外部,即块的末尾 下面是一个示例,|是光标: (let stuff (+ 1 2|)) ; yo! ; press tab: (let stuff (+ 1 2)|) ; yo! ; press tab again: (let stuff (+ 1 2))| ; yo! 希望这能

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

我不认为我会继续使用这些插件,因为它们的行为有时会让我抓狂,但我认为这将是一个很好的插件想法

基本上如下。当您在一个块(引号或括号或任何东西)内时,按tab键会将您带到块的外部,即块的末尾

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

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

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

; press tab again:
(let stuff (+ 1 2))| ; yo!
希望这能让大家明白这个想法。可能已经有一个插件或配置的地方,但我仍然有兴趣看到如何实现这一点

引用我的评论,如下:

我需要的是在插入模式下工作的东西,并且只有当我在这些块中的一个块中时,否则就做一些像插入一个真正的制表符这样的事情(因为您需要多长时间将制表符放入一个字符串?)


这将适用于您的一个需求,但如果您不在块中,则不会插入
选项卡

imap <tab> <esc>])a

这确实可以通过
:inoremap…
实现,它必须返回(例如
)键以将光标移动到结束括号之外(表达式映射比暂时离开插入模式更好,插入模式将创建新的撤消点等)

要实现这一点,您可以使用带有
n
标志的
search()
,这样它就不会移动,使用带有
\%\

:inoremap <expr> <Tab> search('\%#[]>)}]', 'n') ? '<Right>' : '<Tab>'
:inoremap搜索('\%\[]>)}],'n')?“”“”

谢谢!我需要的是在插入模式下工作的东西,并且只有当我在这些块中的一个块中时,否则就做一些像插入一个真正的制表符这样的事情(因为你需要多久将一个制表符放入一个字符串?)。你的问题没有提到你需要在插入模式下工作。你的解决方案非常好。英戈的更接近我的要求,所以我将把他的和你的结合起来使用。:)@格雷杜安-他的解决方案总是很好,而且总是有很多东西可以从中学习:)你尝试了什么?您是否愿意/有能力自己实施这一点?仅仅要求一个实现或现有的插件并不适合这个网站。@IngoKarkat我没有尝试过太多TBH。但是我自己还不能做到这一点(至少在不花费几个小时的情况下是这样),因为您使用的是lisp,所以您可能希望看到它,并且它也能很好地工作。抱歉耽搁了,直到今天才有时间彻底测试。:)是否可以添加对报价的支持?我试着在正则表达式中添加
,但没有效果。谢谢!@rendon:
搜索('\%\[]>)'''''''''''>“'),'n')
应该这样做,请注意引号不像其他字符那样不对称,所以您不必移出引号。@IngoKarkat,谢谢,我会测试它。
:inoremap <expr> <Tab> search('\%#[]>)}]', 'n') ? '<Right>' : '<Tab>'