如果我可以键入]
(或其他一些字符,可能是<C-]>
),并且让它自动插入正确关闭开括号的任何一个括号,那么在vim中会很棒。例如。如果我在缓冲区中有这个:
object(function(x) { x+[1,2,3
然后按]]]
,将插入字符]})
。一个人怎么可能做到这一点?
答案 0 :(得分:10)
这是你可能想要的草图。内置函数searchpair
和searchpairpos
对各种文本编辑任务有很大帮助:)
" Return a corresponding paren to be sent to the buffer
function! CloseParen()
let parenpairs = {'(' : ')',
\ '[' : ']',
\ '{' : '}'}
let [m_lnum, m_col] = searchpairpos('[[({]', '', '[\])}]', 'nbW')
if (m_lnum != 0) && (m_col != 0)
let c = getline(m_lnum)[m_col - 1]
return parenpairs[c]
endif
return ''
endfun
要轻松使用它,请制作imap
:
imap <C-e> <C-r>=CloseParen()<CR>
修改:对搜索正则表达式进行了过度转义,因此\
已包含在搜索中。现在少了一个问题。
答案 1 :(得分:3)
结合autoclose插件,您可以设置:
imap <c-l> <c-o>l
Autoclose将插入匹配的括号,然后ctrl-L将跳过它而不离开插入模式。 Ctrl-L对我来说比ctrl - ]更有意义。
这就像我能说到你要求的那样接近:“让我每次都按相同的键跳过进入正确的支架,无论支架是什么”。我不是imap](没有修饰符),但如果你想尝试一下,没有什么能阻止你。
答案 2 :(得分:1)
您可以将其添加到.vimrc中,它会自动关闭括号
inoremap ( ()<Left>
inoremap [ []<Left>
inoremap { {}<Left>