Desvantagens do uso do Python para desenvolver novo código em um plug-in VIM

7

Em um dos plugins do vim que eu uso, estamos pensando em usar python vs vimscript daqui para frente ( https://github.com/python-mode/python-mode/issues/813#issuecomment-344754563 ).

Entendo que você pode usar o Python para escrever plugins para o VIM ( https://dzone.com/articles/how-write-vim-plugins-python ), desde que você tenha um +python/ +python3em sua distribuição do vim, o plug-in deve funcionar.

Não escrevi nenhum plug-in para o VIM, mas acho que escrever um plug-in VIM de código-fonte aberto para desenvolvimento em Python no Python é melhor comparado a escrevê-lo no VimL. Você notará que há vários usuários que sugeriram soluções, mas não conhecem o VimL e não querem aprender, porque já conhecem o Python e estão trabalhando no Python. Assim, escrever um novo código no Python daqui para frente nos permitirá obter mais usuários, bem como obter mais colaboradores e criar mais valor.

Questão

Quais são as desvantagens de escrever um plug-in Vim usando Python vs VimL? (Vamos supor que todos os usuários que usam este plugin já possuam +python/ +python3, porque o usarão para desenvolver Python)

alpha_989
fonte
6
Se você escolher python, use python3. O vim não pode usar os plugins python2 e python3 de maneira confiável ao mesmo tempo, e cada vez mais as distribuições não são mais enviadas com python2 e / ou uma versão do vim compilada com suporte ao python2, causando a quebra de alguns plugins (mesmo para usuários de python).
Mass
@ Mass, obrigado pelo feedback .. eu concordo .. a maioria das pessoas provavelmente se mudou para python3. Também eu não acho que temos recursos suficientes para suportar tanto python3 e python2 ..
alpha_989

Respostas:

9

TL; DR:

Exigindo +python/ +python3suporte para um plug-in de desenvolvimento baseado em python. Isso parece completamente razoável.

Sobre plugins Vim e comportamento humano

Geralmente, os humanos falantes querem que as coisas pareçam simples e "apenas funcionem". Quando se trata de plug-ins do Vim, o Vimmers normalmente deseja plug-ins com pouca ou nenhuma dependência. Basicamente, deve ser tão simples quanto um git clonee / ou algumas linhas em seu vimrcarquivo. Quanto mais um plug-in precisar ser configurado para funcionar inicialmente ou exigir alguma dependência, basta adicionar uma barreira à entrada.

Um ótimo exemplo desse comportamento é CommandT vs CtrlP :

  • CommandT usa Ruby e C para realizar a descoberta difusa
  • CtrlP, por outro lado, é puro VimL / Vimscript
  • CommandT é tipicamente mais rápido que CtrlP baunilha

Agora você assumiria que o CommandT é mais popular, especialmente desde que foi lançado primeiro, mas esse não é o caso. O CommandT possui aproximadamente 2000 usuários e o CtrlP possui aproximadamente 20.000 usuários . Na minha opinião, os requisitos do CommandT causam uma barreira à entrada. Você simplesmente não pode fazer git cloneo vim dotfiles e estar em funcionamento em uma nova máquina com o CommandT, como você pode com o CtrlP.

Contraponto:

Isso é C + Ruby não +python/ +python3. Existe suporte embutido para Python. Você está absolutamente correto. Um exemplo que comprova esse ponto seria Gundo (~ 5.000) usando +pythonvs undotree (~ 1.000), que é puro VimL. Eu argumentaria, na minha opinião pessoal, que o undotree é menos conhecido que o Gundo (o primeiro no mercado) e o fato de muitos estarem usando o undotree pode muito bem ter a ver com o fato de ser puro VimL vs python.

Bom o suficiente para mim, vou usar o Python no meu plugin Vim!

No final do dia, você precisa saber um pouco sobre o Vim e alguns VimL para fazer o plug-in do Vim em Python. O vimmódulo é muito melhor do que era antes, mas ainda requer uma quantidade razoável de situações semelhantes a avaliações do VimL:

vim.command("set tw=72")
vim.command("%s/aaa/bbb/g")
text_width = vim.eval("&tw")

Veja :h python-vim.

Você também precisará do VimL para "inicializar" a parte python do seu plug-in. Portanto, não há como escapar do VimL, ​​apenas reduzindo a quantidade.

Conclusões

Se você precisar +python/ +python3certamente use-o. Parece que você tem um maravilhoso caso de uso para suporte a python. No entanto, na minha opinião, você não escapará completamente do VimL / Vimscript. Eu recomendaria fazer coisas do Vim no VimL e usar python para coisas difíceis / difíceis / lentas de fazer no VimL.

Peter Rincker
fonte
Obrigado pela descrição detalhada e mostrando os exemplos. Eu não tinha esses exemplos, e isso meio que verifica minha intuição.
alpha_989
A seu ponto de tornar a instalação o mais simples possível, eu concordo com você e discutimos isso. Pode haver alguns benefícios em usar a git submodulepartir do ponto de desenvolvimento, mas talvez tenhamos que resumir isso em um script bash, para que as pessoas não precisem passar por muitos obstáculos para poder instalar este plug-in. Dessa forma, poderíamos abordar as preocupações dos desenvolvedores e usuários.
alpha_989
Isso pode levar algum tempo, portanto, no curto prazo, uma solução mais simples seria ter apenas um link alternativo para uma versão estável mais antiga do plug-in no modo python (haveria mais alguns bugs em comparação com a versão atual) que podem ser instalados diretamente incluindo uma linha no vimrc ou pelo git clone.
alpha_989
Eu também tive a mesma sensação de seguir a rota python, que poderia ser uma barreira à entrada. A razão pela qual pensei que seria bom usar + python3, é porque a maioria das pessoas provavelmente usa uma versão “enorme” que vem instalada com o python. Além disso, o modo python atual por padrão já requer + python3 e + python por padrão, portanto, os usuários atuais não precisarão alterar as versões do vim.
alpha_989
Além disso, obrigado pelas dicas sobre python-vim, vou ler sobre isso. Eu estava tentando minimizar o uso do VimL, ​​não necessariamente eliminá-lo. Se tivermos o objetivo de escrever o máximo possível em python (mas não tudo), à medida que a implementação do python no VIM melhorar, meu pensamento era que provavelmente poderíamos começar a converter mais da base de código em python.
alpha_989
2

Falando por mim, principalmente no Windows, mas às vezes em outras plataformas, nunca fiquei satisfeito com a realidade da integração do Python. Aprecio que esteja lá para as pessoas que precisam, mas não "apenas funciona"; você precisa obter a versão precisa da DLL do Python e isso foi tentativa e erro para mim quando o fiz pela última vez e, no final, descobri que o pagamento não valia o esforço.

Hoje, tenho algumas funcionalidades que escrevi em Python que utilizo dentro do Vim e a aciono com uma system('python ...')chamada para executar o script.

traço-tom-bang
fonte
Obrigado por compartilhar seus pensamentos. Não percebi que a integração com o python não funciona tão bem no Windows. Vou abordar isso também.
alpha_989
Aqui está uma exploração do problema: stackoverflow.com/questions/32025090/…
dash-tom-bang
... e outro: github.com/vim/vim/issues/526
dash-tom-bang
Para encerrar minha caminhada pela pista de memória: stackoverflow.com/questions/4718122/…
dash-tom-bang