Подтвердить что ты не робот

Сделать Vim Curly Braces, Square Braces, Parens действовать как Textmate

Итак, я думаю, что я не искал правильную вещь, но я хочу посмотреть, как вы можете заставить VIM действовать, как Textmate, когда дело доходит до написания набора фигурных скобок, парен или квадратных скобок. вы получите это. Труба указывает курсор.

      function doSomething(){
          |
      }

      #selector{
          |
      }

Вместо этого мусора

      function doSomething(){
      |}

      #selector{
      |}

У меня уже есть [{(закрывая друг друга, когда они печатаются только с возвратом и отступом). Как обычно, любая помощь будет оценена.

4b9b3361

Ответ 1

Я использую следующие сопоставления в своем .vimrc:

inoremap {<cr> {<cr>}<c-o>O<tab>
inoremap [<cr> [<cr>]<c-o>O<tab>
inoremap (<cr> (<cr>)<c-o>O<tab>

Итак, когда я ввожу:

function foo(){<cr>

Я получаю:

function foo(){
    |
}

Аналогично (<cr> и [<cr>.

Ответ 2

Это моя модификация ответа Рэнди Мориса, который работает лучше для меня:

inoremap {<cr> {<cr>}<c-o><s-o>
inoremap [<cr> [<cr>]<c-o><s-o>
inoremap (<cr> (<cr>)<c-o><s-o>

Ответ 3

Заметка для разметки пользователей

При использовании плагина delimitMate сопоставления других ответов мешают плагину. К счастью, это поведение уже доступно в delimitMate (но отключено по умолчанию), установив параметры delmitMateExpansion. Например. добавить

let delimitMate_expand_cr = 1

на .vimrc

Ответ 4

Мое решение для этого заключалось в том, чтобы поместить эту небольшую функцию (с соответствующим вставным режимом) в мой .vimrc:

fun! MyCR()
    if strpart(getline('.'), col('.') - 2, 2) == '{}'
        return "\<CR>\<CR>\<Up>\<Tab>"
    endif
    return "\<CR>"
endfun
autocmd FileType c,cpp inoremap <CR> <C-R>=MyCR()<CR>

Вы можете изменить autocmd так, чтобы он работал для ваших предпочтительных типов файлов.

Он переназначает <CR> в режиме вставки, чтобы проверить, находится ли курсор в настоящее время внутри фигурных скобок и добавляет дополнительную строку и отступ, где это необходимо.

Ответ 5

Если вам нравится Text make, вы должны проверить плагин Vim, snipMate, как указано tarek11011.

Для C/С++ он имеет по умолчанию фрагмент для функций

# Function
snippet fun
   ${1:void} ${2:function_name}(${3}) {
      ${4:/* code */}
   }

что позволит решить проблему фигурных фигурных скобок.

Ответ 6

У меня есть следующее на моем .vimrc

  imap {<Space> {<Space><Space>}<left><left>
  imap { {<CR>}
  imap {<CR> {<CR><CR>}<Up>;<Esc>==i

  imap ( ()
  imap () ()
  inoremap <silent> (. ().<C-x><C-o>
  inoremap <silent> (- ()-><C-x><C-o>
  imap (<space> (<space><space>)<left><left>

  imap [ []
  imap [<space> [<space><space>]<left><left>

  inoremap " ""<left>
  inoremap "" ""

ok, объяснения: когда вы нажимаете {, иногда вы хотите разбить строку и поставить и завершать}, но иногда вы просто хотите оставаться в одной строке, как: a = {1,2,3};

# означает, где находится курсор:

Итак, когда вы нажмете { и сразу после этого коснитесь пробела → { # } когда вы нажмете { после небольшой задержки или используется любое другое, кроме пробела, линия будет разбита когда вы нажмете { сразу после ввода, код будет выглядеть следующим образом:

foo(){
   #
}

Когда вы нажмете (. результаты в ().<call to omnicomplete> Простое пространство имен строк:: Singleton:: Create().

Вы должны использовать inoremap с ", чтобы избежать бесконечных "" " "" " "" " "" " "" " ""

Ответ 7

У меня есть set ai в моем vimrc, который, я считаю, делает то, что вы хотите?