Vim умная вставка точки с запятой - PullRequest
20 голосов
/ 25 августа 2011

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

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

foobar(|)

Вводу точку с запятой:

foobar();|

Аналогично:

foobar("blah|")

Я ввожу точку с запятой:

foobar("blah");|

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

foobar("hello|")
foobar("hello");|
foobar("hello;|")

Ответы [ 6 ]

25 голосов
/ 25 августа 2011

Я использую это отображение:

inoremap <leader>; <C-o>A;

Это не ;, потому что я часто использую точки с запятой и в нескольких контекстах.

  • <C-o> используется для ввода одной команды нормального режима.
  • A; означает «добавить ; в конце строки».
10 голосов
/ 12 ноября 2011

Я хочу сделать то же самое, я работаю над этим всю ночь, тонны кода, но, наконец, я получил простое решение.

inoremap ;<cr> <end>;<cr>

и если я в скобках, я хочу добавить точку с запятой или точку в конце, как это

foo({
  |
})

Я нажимаю ;;<cr> или ..<cr>, чтобы сделать это

inoremap ;<cr> <end>;<cr>
inoremap .<cr> <end>.
inoremap ;;<cr> <down><end>;<cr>
inoremap ..<cr> <down><end>.
5 голосов
/ 28 октября 2013

Вы должны попробовать Cosco.vim плагин.

2 голосов
/ 30 сентября 2012

Я использую следующую функцию и отображение, чтобы вставить точку с запятой в конец строки и удалить оставшиеся пробелы:

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");|
1 голос
/ 27 февраля 2019
inoremap <expr> ;<cr> getline('.')[-1:] == ';' ? '\<Nop>' : '<End>;<CR>'

Приведенный выше код проверит, есть ли ; в конце строки.

Если ; не существует, то будет добавлено ;, иначе ничего не делать.

0 голосов
/ 25 августа 2011
" 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>'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...