1

В Vim, когда я программирования, я часто хочу Ctrl-N вести себя так , как будто - были частью ключевого слова; другими словами, включить это в iskeyword . Тем не менее, я хотел бы создать новое сопоставление клавиш для этого и иметь Ctrl-N, чтобы сохранить его существующее поведение.

Я пробовал это:

inoremap <C-B> <C-O>:set iskeyword+=-<CR><C-N>

... какой вид работы, но опция iskeyword включает в себя дополнительные - после, что не желаемое поведение.

Это также своего рода работы:

inoremap <C-B> <C-O>:set iskeyword+=-<CR><C-N><C-O>:set iskeyword-=-<CR>

... но всплывающее меню убито <C-O> .

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

В качестве альтернативы, есть ли другой способ решения этой проблемы?

1 ответ1

2

Это похоже на работу.

function! CustomComplete(type)
    set iskeyword+=-
    return a:type
endfunction
inoremap <expr> <C-B> CustomComplete("<C-N>")
autocmd CompleteDone * set iskeyword-=-

Мы используем отображение выражений для запуска функции, которая устанавливает iskeyword каждый раз при запуске (похоже, это не проблема. Я также не нашел autocmd для до завершения.) Возвращаемое значение функции затем используется в качестве замены для сопоставления. В этом случае вы хотели поведение <C-N> . Затем удалить набор - из множества iskeyword мы используем CompleteDone autocomand , который происходит после того, как модули завершения строительства завершен.


Кроме того, я попробовал оба ваших сопоставления, первое не работает должным образом, так как в нем также есть <C-O> который убивает окно завершения.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .