2

Я использую плагины xml и omnicppcompl для Vim и использую два отображения вставки, которые эти плагины определяют для клавиши «>». Моя проблема заключается в том , что в то время как omnicppcompl плагин будет счастливо imap ключ «>» , когда я вхожу в буфер filetype CPP или с, но когда это делает, imap XML - плагина ключа «>» больше не будет работать, как это привычка переназначить себя, когда я вхожу в буфер типа файла xml. Это приводит к тому, что я больше не могу использовать функциональность, предоставляемую отображением при редактировании файлов XML, то есть автоматически писать закрывающий тег (хотя карта omnicppcompl остается).

То, что я ищу, - это то, что эти два сопоставления доступны в их соответствующем filetype , и я считаю, что проблема заключается в том, что плагин xml не переопределяет себя так, как это делает omnicppcompl . Я попытался написать быстрые autocmd в моем .vimrc, чтобы вручную переназначить клавишу '>', но подключаемый модуль xml imap 'к локальной функции в своем скрипте с битом <SID> .

Кто-нибудь знает, как я могу обойти это? Есть ли способ заставить плагин xml перезапустить его сопоставление? Я не очень разбираюсь в сценариях vim и в том, как работают плагины, но потому ли, что в плагине xml нет скриптов autoload ?

Для справки, плагин xml отображает ключ «>» в строке 1485 ftplugin/xml.vim , а плагин omnicppcompl отображает ключ «>» в строке 40 файла autoload autoload/omni/cpp/complete.vim

Я был бы очень признателен за любую помощь и предложения о том, как исправить / обойти это.

1 ответ1

2

Я просто быстро взглянул на эти два файла, и из того, что я понял, похоже, что в плагине xml все сделано правильно:

inoremap <silent> <buffer> > ><Esc>:call <SID>CloseTagFun()<Cr>

в то время как это сделано неправильно в плагине omnicppcomplete :

inoremap <expr> > omni#cpp#maycomplete#Arrow()

При выполнении такого рода отображения авторам плагинов следует стараться максимально ограничить их область действия: отображения, относящиеся к типу файлов, должны быть локальными по отношению к буферу, используя <buffer> как в первом примере.

В зависимости от того, как вы загрузили свои файлы, отображение cpp может иметь приоритет над отображением xml потому что оно кажется слишком широко примененным ко всему экземпляру Vim вместо буферов cpp .

Кроме того, плагин omnicppcomplete не использует ftplugin что является нормой для файлов, специфичных для типов файлов.

В качестве немедленного решения я предлагаю вам добавить <buffer> в сопоставление cpp и, если это сработает, попытаться связаться с автором и убедить его / ее изменить плагин вверх по течению.

inoremap <buffer> <expr> > omni#cpp#maycomplete#Arrow()

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