Сделать Vim Curly Braces, Square Braces, Parens действовать как Textmate
Итак, я думаю, что я не искал правильную вещь, но я хочу посмотреть, как вы можете заставить VIM действовать, как Textmate, когда дело доходит до написания набора фигурных скобок, парен или квадратных скобок. вы получите это. Труба указывает курсор.
function doSomething(){
|
}
#selector{
|
}
Вместо этого мусора
function doSomething(){
|}
#selector{
|}
У меня уже есть [{(закрывая друг друга, когда они печатаются только с возвратом и отступом). Как обычно, любая помощь будет оценена.
Ответы
Ответ 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, который, я считаю, делает то, что вы хотите?