Вот эскиз того, что вы, вероятно, хотели. Встроенные функции 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>
Редактировать : чрезмерное экранирование регулярного выражения поиска, поэтому \
было включено в поиск. Теперь на одну проблему меньше.