É possível ter nomes de funções, variáveis ​​etc. do preenchimento automático do vim ao usá-lo para programar?


56

Muitos IDEs automaticamente completam nomes de funções, variáveis, nomes de métodos etc., conforme o usuário digita. Os melhores completam os nomes com base na biblioteca interna do idioma e no que já foi definido em outros arquivos do mesmo programa.

Por exemplo, enquanto digito o seguinte programa Python:

hungy = True

def eatFood(food):
    pass

if hungry:
    eatF

a linha eatFserá exibida automaticamente eatFood()como uma opção de preenchimento automático disponível.

O Vim tem esse recurso? Se sim, como posso habilitá-lo?

Respostas:


42

Existem muitos tipos diferentes de preenchimento automático no vim. Uma maneira pode ser usar o SuperTab . Isso fornece uma maneira de usar o preenchimento de guias mais ou menos a qualquer momento. Isso permitiria que você pressionasse Tabdepois de digitar parcialmente a palavra para obter uma lista de conclusão. Por exemplo, digitando eatFseguido de Tabpara expandir paraeatFood.

Nota : todas essas fotos têm links para exemplos de gifs em ação.

conclusões da superguia

Vim tem excelentes outras opções. Você deve ler :h ins-completionpara ver a variedade de opções de conclusão internas. O uso do vim Ctrl- XCtrl- O, combinado com um plug-in compatível com python como o jedi, pode dar um sabor final. O Jedi pode ser configurado para fornecer documentação sobre omni-complete (é isso que Ctrl- XCtrl- Ofaz). Em seguida, a documentação para os candidatos à conclusão apareceria em uma janela dividida.

conclusão ctrlxctrlo

O uso de plug-ins semelhantes, mas opções diferentes, leva a todos os tipos de comportamentos. É possível, por exemplo, não precisar solicitar o preenchimento automático (se é isso que você procura). Em vez disso, depois de digitar um número de letras (digamos, 2 ou 3) de uma palavra, um plug-in pode tentar oferecer de forma inteligente possíveis conclusões em um menu.

insira a descrição da imagem aqui

Portanto, a resposta curta é um sim! Mas o processo de configuração pode ser um pouco complicado. Penso nisso como um passo na longa escada para dominar o vim.


Eu tentei todos eles e sempre volto à SuperTab, é a menos invasiva.
craigp

11
Também gosto muito do plug-in YouCompleteMe, pois ele sugere à medida que você digita e você pode escolher ou ignorar sugestões. Sim, visualmente, é difícil ignorar, mas é muito pouco invasivo no meu fluxo de trabalho porque requer menos pressionamentos de tecla.
Thriveth

3
Alterei as animações para "clicar", no sentido de que elas estão vinculadas às animações gif.
Davidlowryduda

11
Não consigo usar o YouCompleteMe no meu computador de trabalho porque não tenho raiz para instalar as dependências, o SuperTab é de longe a próxima melhor opção.
Charles Clayton

@mixedmath No meu caso, o superTab não funciona.
Alhelal

24

Essa funcionalidade - ou seja, pesquisar o arquivo atual (e todos os arquivos abertos) para preenchimento automático, deve ser ativada por padrão com Ctrl+P:

captura de tela do preenchimento automático em uso

Você pode ir para o n sugestão ext com Ctrl+No p sugestão revious com Ctrl+Pe selecione-lo digitando qualquer carta (que será anexado logo após a sugestão).


11
Para o editor (Jasper): É mais provável que eu queira escrever novamente algo que escrevi recentemente, não algo que escreverei no futuro ou que esteja no início do arquivo. Portanto, ^Pé mais natural IMHO. Caso contrário, obrigado pela edição (espero ter clicado no botão direito e você tenha o seu +2).
yo '

11
Sim, eu tenho esses pontos de internet imaginários :) Eu sempre pensei que a lista de sugestões seriam classificados em ordem alfabética ...
Jasper

@ Jasper ordem de aparência é (pelo menos para mim certamente, também veja acima: world,word,woode não o contrário). Assim ^Pé a última conclusão usada, o que é muito útil (eu raramente vou além de três itens na lista, mesmo em um arquivo longo).
yo '

protip:inoremap <C-Space> <C-N>
wchargin

20

O Vim tem suporte para conclusão de forma nativa. Você pode ler sobre as várias conclusões diferentes às quais o Vim suporta :h ins-completion.

Em geral, para todos os propósitos que encontrei, as inserções completas são suficientes para o meu gosto, no entanto, existem alguns plugins de conclusão que agregam mais valor além do que as inserções concluídas oferecem. NeoComplete , YCM (YouCompleteMe) são alguns dos mesmos. Eles são mais avançados no sentido de tentarem combinar diferentes tipos de conclusões com mais precisão e também possuem mecanismos avançados de armazenamento em cache, portanto, tendem a ser mais rápidos. O YCM chega a trabalhar com compiladores / utilitários externos para fornecer um melhor IntelliSense.


9

Sim, existem scripts de conclusão automática para o vim. A "melhor" opção depende da sua linguagem de programação. Como seu código de exemplo é Python, sugiro dar uma olhada no Jedi . Além disso, você me completa , que também tem suporte para outros idiomas, mas às vezes é visto como muito grande. Para outros idiomas, você pode navegar pelo longo conjunto de scripts vim .


7

No modo de inserção, digite o primeiro par de caracteres de uma palavra e pressione:

Ctrl-N to insert the next matching word; or
Ctrl-P to insert the previous matching word. 

Isso é particularmente útil ao inserir os nomes das variáveis ​​em um programa.

A opção 'complete' controla onde as palavras-chave são pesquisadas (incluem arquivos, arquivos de tags, buffers e muito mais).

A opção 'completeopt' controla como a conclusão ocorre (por exemplo, se um menu é exibido).

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.