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

Vim smart insert с запятой

Есть ли плагин Vim, который может обрабатывать интеллектуальную точку с запятой, например, в Eclipse?

Пример (символ трубы - это курсор вставки):

foobar(|)

Я печатаю точку с запятой:

foobar();|

Аналогично:

foobar("blah|")

Я печатаю точку с запятой:

foobar("blah");|

Если я хочу точку с запятой в исходной позиции курсора, я нажимаю назад после умного повторного позиционирования:

foobar("hello|")
foobar("hello");|
foobar("hello;|")
4b9b3361

Ответ 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>'