我一直在玩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)
希望得到这个想法.可能已经有一个插件或配置,但我仍然有兴趣看到如何实现这一点.
引用我的评论,如下:
我需要的是在插入模式下工作的东西,只有当我在其中一个块内时,否则就像插入一个真正的标签一样(因为你需要多长时间在一个字符串中放一个标签?).
这将适用于您的一个要求,但tab如果您不在块内,则不会插入.
imap <tab> <esc>])a
Run Code Online (Sandbox Code Playgroud)
使用该])命令移动到括号的末尾,它将带您到右括号.
你可以把它映射到tab与
nnoremap <tab> ])
Run Code Online (Sandbox Code Playgroud)
这确实可以用 来实现:inoremap <expr> <Tab> ...,它必须返回(例如<Right>)键以将光标移到右括号之外(表达式映射比暂时离开插入模式更好,这会创建一个新的撤消点等)
要实现此目的,您可以使用search()withn标志,使其不会移动,使用正则表达式 with\%#断言光标周围的括号。
:inoremap <expr> <Tab> search('\%#[]>)}]', 'n') ? '<Right>' : '<Tab>'
Run Code Online (Sandbox Code Playgroud)