Vim smart insert с запятой
Есть ли плагин Vim, который может обрабатывать интеллектуальную точку с запятой, например, в Eclipse?
Пример (символ трубы - это курсор вставки):
foobar(|)
Я печатаю точку с запятой:
foobar();|
Аналогично:
foobar("blah|")
Я печатаю точку с запятой:
foobar("blah");|
Если я хочу точку с запятой в исходной позиции курсора, я нажимаю назад после умного повторного позиционирования:
foobar("hello|")
foobar("hello");|
foobar("hello;|")
Ответы
Ответ 1
Я использую это отображение:
inoremap <leader>; <C-o>A;
Это не ;
, потому что я использую точки с запятой часто и в нескольких контекстах.
-
<C-o>
используется для ввода одной команды обычного режима.
-
A;
означает "добавить a ;
в конец строки".
Ответ 2
Я хочу сделать то же самое, я работаю над ним всю ночь, тонны кода, но, наконец, я получил простое решение.
inoremap ;<cr> <end>;<cr>
и если я в скобке, я хочу добавить точку с запятой или точку в конце, например
foo({
|
})
Я нажимаю ;;<cr>
или ..<cr>
, чтобы сделать это
inoremap ;<cr> <end>;<cr>
inoremap .<cr> <end>.
inoremap ;;<cr> <down><end>;<cr>
inoremap ..<cr> <down><end>.
Ответ 3
Вы должны попробовать Cosco.vim плагин.
Ответ 4
Я использую следующую функцию и сопоставление для вставки точки с запятой в конец строки и для удаления исправляющих пробелов:
imap <leader>. <C-R>=Semicolonfun()<CR>
fun! Semicolonfun() "{{{
call setline(line('.'), substitute(getline('.'), '\s*$', ';', ''))
return "\<End>"
endfunction "}}}
Итак, если у вас есть что-то вроде:
log.warning("you miss the |identifier")
Нажатие. или,. если вы переназначите лидера, вы получите следующее:
log.warning("you miss the identifier");|
Ответ 5
" ftplugin/c/c_snippet.vim
inoremap <expr> <buffer> ; getline('.')[col('.')-1:-1]=~')$' ? '<right>;' : ';'
Эта версия не должна создавать проблем с for
, если ваш механизм фрагментов расширяет ее на
for (...|) {
<+code+>
}<++>
Если открытая скобка находится в новой строке, это испортит ситуацию.
Вы можете легко изменить регулярное выражение на '"\=)\+$'
, чтобы ответить на свой первоначальный вопрос.
inoremap <expr> <buffer> ; getline('.')[col('.')-1:-1]=~'"\=)\+$' ? '<end>;' : ';'
Однако, я не думаю, что это хорошая идея. В этом случае отображение для <bs>
будет:
inoremap <expr> <buffer> <bs> getline('.')[:col('.')-2] =~ '.*")\+;$' ? '<bs><c-o>F";' : '<bs>'