Pergunta

Parece haver muitos mecanismos alternativos de preenchimento automático do Emacs.Sem uma pesquisa exaustiva, vem à mente o seguinte:ido, preenchimento automático, icicles, conclusão de buffer, conclusão de minibuffer e conclusão padrão pronta para uso.E então há a conclusão do código.Muitos disso.E muito disso depende do idioma.Seria muito útil ter um guru do Emacs, ou três, resumindo os benefícios dos principais participantes no preenchimento automático de código e sem código.E sendo Stack Overflow, nem é preciso dizer que seria bom identificar os modos de preenchimento automático que funcionam melhor para os mecanismos semelhantes a IDE do Emacs.

Atualizar:acabei de descobrir a página de conclusão do Emacs Wiki o que amplifica minha pergunta básica:de todas essas opções, o que é bom, o que é menos bom e se você pudesse jogar apenas com 2-3, qual você recomendaria?

Foi útil?

Solução

Geralmente, uso dois pacotes de conclusão (exceto a conclusão da guia embutida nos buffers Minibuffer e Comint).

pabbrev.el - que fornece uma sugestão no cursor (pressione ABA) aceitar. As escolhas são feitas olhando para a frequência de palavras. Eu gosto disso por causa da indicação visual do que seria concluído - mas funciona principalmente para apenas uma conclusão.

hippie-expand - que geralmente está vinculado a M-// No lugar do Dabbrev, porque faz tudo o que Dabbrev faz e muito mais. Isso funciona bem quando você pode precisar percorrer algumas alternativas ou se deseja concluir um nome de arquivo ou outra coisa.

Eu gosto de ambos porque eles não exigem nenhum movimento do mouse e trabalham rapidamente.

Outras dicas

Escrita Sincelos --

Na maior parte, Icicles é sobre minibuffer conclusão.Existem alguns casos em que oferece algo para buffer (por exemplo,código), mas trata-se principalmente da conclusão do minibuffer.

Quando a maioria das pessoas pensa em conclusão de minibuffer, elas pensam em conclusão de nome de arquivo, conclusão de nome de buffer e conclusão de nome de comando.Mas há um muito mais para isso.

Como programador Emacs-Lisp, você pode usar o preenchimento sempre que quiser para dar aos usuários uma escolha interativa.Isso é muito geral!

A conclusão é realmente sobre correspondência de padrões para definir conjuntos, que você pode manipular.

A maioria das pessoas pensa que o único objetivo da conclusão do minibuffer é escolher um único nome (arquivo, buffer, comando, variável,...).Mas o poder da conclusão é realmente filtrar e possivelmente classificar o conjunto completo de nomes de arquivos, nomes de buffers, etc.de maneiras diferentes e, em seguida, permitir que os usuários façam algo com ou com o resultado definir (não necessariamente um único objeto).

Isso é o que Sincelos é sobre:deixando você definir conjuntos dinamicamente (incrementalmente) usando correspondência de padrões, e, em seguida, atue nos membros selecionados ou em todos os membros desses conjuntos.

Este não é tanto o objectivo Eu faço ou os outros pacotes de conclusão, com a possível exceção de Leme (qualquer coisa).

Diferente Leme (qualquer coisa), que privilegia o objeto nomes sobre tipos de objetos e ações como ponto de partida, em Sincelos você normalmente invoca um comando para fazer algo para um ou mais objetos de um determinado tipo (por exemplo.buffers) e então você restringe o conjunto desses objetos, normalmente por correspondência de nomes.Muitas vezes é o caso em Sincelos que você pode agir sobre esses objetos de maneiras múltiplas, mas relacionadas, dentro do mesmo comando.

Em Leme (qualquer coisa), em geral sua entrada é correspondido primeiro pelo nome do objeto contra todo o universo de objetos de todos os tipos e depois você seleciona algumas operações a serem executadas.

Finalmente, tenha em mente que cada uma das várias abordagens de conclusão oferece algo (por exemplo,comandos) para usuários finais e algo (por exemplo,recursos de conclusão) para programadores.

Se você está fazendo conclusão de código então você geralmente só quer complete o nome no ponto.A principal coisa interessante sobre a conclusão do código é determinar quais são os candidatos apropriados.Para isso, o textual (ex.contexto do código) normalmente é muito importante.Para oferecer escolhas inteligentes, o recurso de conclusão precisa analisar o contexto (código), incluindo qualquer contexto abrangente (por exemplo,Código do projeto).

A conclusão do minibuffer, por outro lado, pode ser usada para qualquer tipo de escolha e ação, incluindo múltipla escolha com múltiplas ações.Aqui, todas as partes são interessantes:quais candidatos oferecer, o que você pode fazer com eles, etc.

Não sei se isso ajuda, mas de qualquer maneira é minha opinião.

Eu uso a conclusão padrão da guia no minibuffer para nomes de arquivos, M-x comandos e outras coisas.

Eu também uso frequentemente o M-/ pressionamento de tecla (dabbrev-expand) para a conclusão dinâmica de qualquer palavra em qualquer um dos seus buffers da EMACS. É fantástico, especialmente para nomes longos de variáveis. Aqui está a documentação:

M-/ runs the command dabbrev-expand, which is an interactive
autoloaded Lisp function in `dabbrev.el'.

It is bound to M-/.

(dabbrev-expand ARG)

Expand previous word "dynamically".

Expands to the most recent, preceding word for which this is a prefix.
If no suitable preceding word is found, words following point are
considered.  If still no suitable word is found, then look in the
buffers accepted by the function pointed out by variable
`dabbrev-friend-buffer-function'.

A positive prefix argument, N, says to take the Nth backward *distinct*
possibility.  A negative argument says search forward.

If the cursor has not moved from the end of the previous expansion and
no argument is given, replace the previously-made expansion
with the next possible expansion not yet tried.

The variable `dabbrev-backward-only' may be used to limit the
direction of search to backward if set non-nil.

See also `dabbrev-abbrev-char-regexp' and C-M-/.

Você pode procurar no modo de empresa ou pacote de preenchimento automático, que pode usar fontes de conclusão diferentes, incluindo o CEDET, e elas também permitem definir novas fontes de conclusão ... para algumas linguagens de programação, você pode usar o CEDET diretamente ...

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top