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

gre*_*uan 4 vim

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

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

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

这是一个例子,|是光标:

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

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

; press tab again:
(let stuff (+ 1 2))| ; yo!
Run Code Online (Sandbox Code Playgroud)

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

引用我的评论,如下:

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

Ami*_*mit 6

这将适用于您的一个要求,但tab如果您不在块内,则不会插入.

imap <tab> <esc>])a
Run Code Online (Sandbox Code Playgroud)

使用该])命令移动到括号的末尾,它将带您到右括号.

你可以把它映射到tab

nnoremap <tab> ])
Run Code Online (Sandbox Code Playgroud)


Ing*_*kat 4

这确实可以用 来实现:inoremap <expr> <Tab> ...,它必须返回(例如<Right>)键以将光标移到右括号之外(表达式映射比暂时离开插入模式更好,这会创建一个新的撤消点等)

要实现此目的,您可以使用search()withn标志,使其不会移动,使用正则表达式 with\%#断言光标周围的括号。

:inoremap <expr> <Tab> search('\%#[]>)}]', 'n') ? '<Right>' : '<Tab>'
Run Code Online (Sandbox Code Playgroud)

  • @rendon: `search('\%#[]&gt;)}''"]', 'n')` 应该这样做,请注意引号不像其他字符那样不对称,因此您不必将 _out_ 移出一个报价。 (3认同)