É 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?
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.
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.
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.
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:
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).
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.
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 .
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
:Você pode ir para o n sugestão ext com
Ctrl+N
o p sugestão revious comCtrl+P
e selecione-lo digitando qualquer carta (que será anexado logo após a sugestão).fonte
^P
é mais natural IMHO. Caso contrário, obrigado pela edição (espero ter clicado no botão direito e você tenha o seu +2).world,word,wood
e 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).inoremap <C-Space> <C-N>
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.
fonte
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 .
fonte
No modo de inserção, digite o primeiro par de caracteres de uma palavra e pressione:
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).
fonte