LINUX.ORG.RU

Vim: как запретить загрузку плагина при определенном filetype?

 


0

1

Есть такая проблема с кложурой и использованием neocomplete: когда начинаю работать с ft=clj, после первого перехода в insert mode получаю ругань, которую не пропустить не нажав два раза Enter:

^@  completefunc=clojurecomplete#Complete^@^ILast set from ~/.vim/bundle/neocomplete.vim/autoload/neocomplete/init.vim
Press ENTER or type command to continue
Another plugin set completefunc! Disabled neocomplete.
Press ENTER or type command to continue
в целом, это, наверное, в будущем пофиксят в neocomplete и/или в самой поддержке кложуры вима, но хотелось бы знать: как можно отключить загрузку конкретного плагина при открытии определенного типа файла?

Наверняка, здесь не обойтись без менеджеров плугинов, я готов использовать любой, который это умеет, сейчас использую NeoBundle (ранее использовал pathogen, потом vundle).

У меня кроме кложуры есть еще парочка несовместимых плагинов и кишок вима при определенных ft=, кто сталкивался с проблемой?

// если что, нужно именно запрещать определенный плагин для ft=, а не настроить, какие плагины грузить, это большая разница.



Последнее исправление: clojure (всего исправлений: 1)

Похоже, что даже если можно не загружать какой-то плагин, то выгрузить уже загруженный все равное не выйдет, то есть толку мало от этого будет. Так что надо править плагины.

keyran ★★
()

Тебе нужно neocomplete для всех и clojurecomplete для ft=clj? Тогда для ft=clj должно быть setlocal completefunc=clojurecomplete#Complete

kulti ★★
()
Ответ на: комментарий от kulti

не работает, хотя должно:

filetype detect
if &ft == 'clojure'
    setlocal completefunc=clojurecomplete#Complete
endif
au BufRead,BufNewFile *     if &ft == 'clojure' | setlocal completefunc=clojurecomplete#Complete | endif
au BufRead,BufNewFile *.clj     setlocal completefunc=clojurecomplete#Complete

clojure
() автор топика
Ответ на: комментарий от clojure

здесь бы идеально подошел вариант отключения плугина.

clojure
() автор топика

Гы, автор neocomplete знатный упорыш.

" Set completefunc.
  let completefunc_save = &l:completefunc
  let &completefunc = 'neocomplete#complete#manual_complete'
  if completefunc_save != ''
    let &l:completefunc = completefunc_save
  endif

Заводи багу.

anonymous
()
Ответ на: комментарий от keyran

пробовал во всех возможных вариантах.

clojure
() автор топика
Ответ на: комментарий от anonymous

так и делаю уже, но все же хотелось бы знать на будущее, возможно ли отключать плугины по filetype.

clojure
() автор топика

Если кому-то интересно, то neocomplete по filetype можно отключить вот так:

autocmd FileType clojure call neocomplete#initialize() | NeoCompleteDisable
но что делать-то с плугинами, которые не предоставляют интерфейсов.

clojure
() автор топика
Ответ на: комментарий от clojure

но что делать-то с плугинами, которые не предоставляют интерфейсов.

Ничего, потому что «плагины» в виме — не более чем условность.

anonymous
()
Ответ на: комментарий от anonymous

как решить проблему с neocomplete для clojure, автор подсказал:

let g:neocomplete#force_overwrite_completefunc=1
но вопрос с отключением других дополнений остается открытым.

clojure
() автор топика
Ответ на: комментарий от clojure

У каждого плагина есть (должен быть) вот такой

if exists("g:loaded_pluginname")
  finish
endif
let g:loaded_pluginname = 1
код в начале. В .vimrc можно присвоить g:loaded_pluginname значения (единицы) и соотв. плагины не будут загружены. На отключение уже после загрузки, насколько я знаю, соглашений нет.

anonymous
()
Ответ на: комментарий от anonymous

Спасибо.

Суть такова, три нерабочих варианта - плагин продолжает работать (даже если подставлять перед каждым из них filetype detect):

au FileType            clojure  let g:loaded_neocomplete=1
au BufRead,BufNewFile  *.clj    let g:loaded_neocomplete=1
au BufRead,BufNewFile  *        if &ft == 'clojure' | let g:loaded_neocomplete=1 | endif
а вот рабочий вариант (плагин отключен):
filetype detect
if &ft == 'clojure' | let g:loaded_neocomplete=1 | endif

Еще раз спасибо.

clojure
() автор топика
Ответ на: комментарий от clojure

autocommands выполняются уже после загрузки плагинов, .vimrc сканируется до. Плагин только в момент момент проверяет, не установлен ли g:loaded_pluginname, и, если установлен, не загружается.

Третий вариант корректен, в чём проблема?

anonymous
()
Ответ на: комментарий от anonymous

момент момент

момет загрузки

anonymous
()
Ответ на: комментарий от anonymous

Четвёртый
вариант корректен, в чём проблема?

проблем нет, я же указал, что четвертый вариант - рабочий, отключает плугин.

clojure
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.