Articles

neovim ruby/rails omnicomplete

Na mensagem de erro que você está recebendo, parece que seu Vim não tem suporte a Ruby compilado em.

Veja este código snippet:

if !has('ruby') call s:ErrMsg( "Error: Rubycomplete requires vim compiled with +ruby" ) call s:ErrMsg( "Error: falling back to syntax completion" ) " lets fall back to syntax completion setlocal omnifunc=syntaxcomplete#Complete finishendif

A mensagem de erro em negrito é a que você está vendo. (Se escrever :messages provavelmente verá a outra mensagem de erro, mais explícita, sobre o suporte para Ruby em falta.)

Pode confirmar que o suporte para Ruby está em falta usando o comando :version no Vim para obter uma lista de funcionalidades. Irá ver -ruby, uma vez que lhe falta o suporte para Ruby. (Você veria +ruby se estivesse disponível).)

Da sua pergunta, você está usando o NeoVim no Debian Buster, então talvez tente instalar o pacote ruby-neovim para ver se isso resolve o problema e habilita o suporte a Ruby no seu NeoVim?

set omnifunc=syntaxcomplete#Complete parece funcionar. Não tenho a certeza se essa é a forma correcta?

Isso vai dar-lhe alguma conclusão, mas provavelmente não tão rica como a conclusão específica do Ruby de rubycomplete.

A função syntaxcomplete#Complete irá usar as regras de realce de sintaxe do Vim para oferecer conclusão de inserção, que na sua maioria cobre palavras-chave de linguagem que são realçadas por regras de sintaxe.

Ver :help ft-syntax-omni:

Vim tem a capacidade de realce de sintaxe de cor cerca de 500 linguagens. Parte deste destaque inclui saber quais palavras-chave são parte de uma língua. Muitos tipos de arquivos já têm scripts de conclusão personalizados escritos para eles, o plugin syntaxcomplete fornece conclusão básica para todos os outros tipos de arquivos. Ele faz isso preenchendo a lista de conclusão omni com o texto Vim já sabe como colorir o destaque. Ele pode ser usado para qualquer tipo de arquivo e fornece um preenchimento mínimo sensível ao idioma.

Então isto pode ser adequado e melhor do que nada… Mas eu esperaria que você conseguisse uma conclusão superior usando rubycomplete em vez disso.

Com estas configurações:

autocmd FileType ruby,eruby let g:rubycomplete_buffer_loading = 1autocmd FileType ruby,eruby let g:rubycomplete_classes_in_global = 1autocmd FileType ruby,eruby let g:rubycomplete_rails = 1

Estes são globais e são destinados a serem definidos diretamente do seu vimrc e não em um autocmd tipo de arquivo.

Isso pode ser importante uma vez que pode ter problemas de ordenação (estes só são definidos após os plugins vim-ruby tentarem inspecioná-los, produzindo o resultado incorreto), ou você pode ter um comportamento diferente do primeiro arquivo Ruby que você editar para os subseqüentes (uma vez que o primeiro os define globalmente, eles já serão definidos quando o segundo arquivo for aberto.)

Evite estes problemas completamente definindo-os diretamente, como pretendido:

let g:rubycomplete_buffer_loading = 1let g:rubycomplete_classes_in_global = 1let g:rubycomplete_rails = 1