Vim magic закрывающая скобка - PullRequest
13 голосов
/ 21 мая 2011

Было бы здорово в vim, если бы я мог набрать ] (или какой-то другой символ, может быть <C-]>) и заставить его автоматически вставлять любую скобку, которая правильно закрывает открывающую скобку. Например. если у меня есть это в моем буфере:

object(function(x) { x+[1,2,3

И я нажимаю ]]], символы ]}) будут вставлены. Как можно это сделать?

Ответы [ 3 ]

10 голосов
/ 21 мая 2011

Вот эскиз того, что вы, вероятно, хотели. Встроенные функции 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>

Редактировать : чрезмерное экранирование регулярного выражения поиска, поэтому \ было включено в поиск. Теперь на одну проблему меньше.

3 голосов
/ 21 мая 2011

В сочетании с плагином autoclose вы можете установить:

imap <c-l> <c-o>l

Autoclose вставит соответствующую скобку, затем ctrl-L пропустит ее, не выходя из режима вставки. Ctrl-L имеет для меня больше смысла, чем ctrl -].

Это настолько близко, насколько я могу получить к тому, о чем я бы сказал, что вы просите: «позвольте мне просто нажимать одну и ту же клавишу каждый раз, чтобы пропустить ввод правильной скобки, независимо от того, что это за скобка». Я бы не стал использовать] (без модификатора), но вас ничто не остановит, если вы захотите попробовать.

1 голос
/ 21 мая 2011

Вы можете добавить это в свой .vimrc, и он автоматически закроет скобки

inoremap ( ()<Left>
inoremap [ []<Left>
inoremap { {}<Left>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...