Помощь плагина Vim: автоматическая вставка закрывающей скобки с курсором посередине - PullRequest
4 голосов
/ 26 января 2010

Я нашел несколько тем по этому вопросу, но им 3 года. У кого-нибудь есть плагин, чтобы рекомендовать для vim, что когда я набираю { это будет делать:

{
::cursor here::
}

Еще одна полезная вещь, если я наберу if, это будет делать:

if(::cursor here::)

Спасибо

Ответы [ 6 ]

3 голосов
/ 26 января 2010

Я использую delimiteMate.vim . Он обрабатывает это настраиваемым и не раздражающим способом.

2 голосов
/ 26 января 2010

Проверьте snipMate плагин. Это очень настраиваемый. Существует отличный скриншот , показывающий плагин в действии.

Например, в C с плагином snipMate.

if<Tab>

would produce:

if (::cursor:1::) {
    ::cursor:2::
}

Первый оставит курсор на :: cursor: 1 ::, а второй приведет вас к :: cursor: 2 ::.

Должно быть что-то похожее для скриптов bash в snipMate, если нет, то добавить его очень просто.

1 голос
/ 26 января 2010

Есть много плагинов и ftplugins, которые делают эту работу. В большинстве случаев новые плагины не лучше, так как они часто изобретают колесо, не принимая во внимание странные случаи.

В "старом" материале у меня есть:

  • Моя система брекетинга кода , которая упрощает определение отображений, направленных на вставку сбалансированной пары символов, подобных скобкам.
  • и связанных функций , которые направлены на упрощение задачи определения усовершенствованных (*) фрагментов кода (обычно это операторы управления). У меня есть примеры использования для C ++ .

(*) Расширение отображений / аббревиатур запрещено в контексте комментариев / строк, предоставляется несколько окружающих форм операторов управления C и поддерживаются несколько стилистических параметров (в случае операторов управления C они легко переносятся на другие языки)

1 голос
/ 26 января 2010

Эта статья показывает простое решение и содержит ссылки на некоторые из них, более надежные.

Вот часть решения с этой страницы:

inoremap {      {}<Left>
inoremap {<CR>  {<CR>}<Esc>O
inoremap {{     {
inoremap {}     {}
1 голос
/ 26 января 2010

Я использую следующий код (php-шаблоны):

function! EatChar()
    let l:char=getchar(0)
    return ''
endfunction

inoreabbrev function_ function <ESC>maa()<CR>{<CR><CR>}<ESC>`aa<C-O>:call EatChar()<CR>
inoreabbrev if_ if (<ESC>maa)<CR>{<CR><CR>}<ESC>`aa<C-O>:call EatChar()<CR>
inoreabbrev ifelse_ if (<ESC>maa)<CR>{<CR><CR>}<CR>else<CR>{<CR><CR>}<ESC>`aa<C-O>:call EatChar()<CR>
inoreabbrev for_ for (<ESC>maa; ; )<CR>{<CR><CR>}<ESC>`aa<C-O>:call EatChar()<CR>
inoreabbrev foreach_ foreach (<ESC>maa as $key=>$value)<CR>{<CR><CR>}<ESC>`aa<C-O>:call EatChar()<CR>
inoreabbrev while_ while (<ESC>maa)<CR>{<CR><CR>}<ESC>`aa<C-O>:call EatChar()<CR>
inoreabbrev <? <?php <ESC>maa ?><ESC>`aa<C-O>:call EatChar()<CR>
0 голосов
/ 27 января 2010

Если вам не нужны возможности различных плагинов для текстовых фрагментов (или вы просто не хотите выяснить, как настроить его в соответствии с вашими потребностями) и имеете всего несколько (один или два) простых шаблонов, вы можете запишите его создание и сопоставьте его с ярлыком.

Например,

:nmap <leader>b o{<cr>}<esc>O
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...