Créez un environnement Python moderne avec Neovim

Contexte

Postscript

Cela fait un moment que j'ai écrit cet article avant. Pourtant, parfois de bonnes choses volent, et avec un sentiment de gratitude, Le vimrc a considérablement changé depuis le moment où l'article a été créé, et je suis désolé que le contenu soit encore ancien, alors je l'ai ajouté. Je vous serais reconnaissant si vous pouviez vous référer aux paramètres de chaque plug-in. Si vous configurez tout cela, ce sera comme ça. Screen Shot 2017-09-06 at 22.11.38.png

Obligatoire

Après avoir rejoint l'entreprise, j'ai réécrit tous les paramètres de vim pour neovim. ~~ Si vous voulez créer un environnement maintenant, faisons-le avec neovim qui se déplace en douceur. ~~ Le statut de prise en charge du plug-in de vim8 a changé et il fonctionne avec vim8 sauf pour deoplete. Mais je suis néovim parce que je veux utiliser deoplete.

Consultez les articles précédents pour l'installation de neovim. Je l'ai écrit pour Ubuntu, mais c'est presque la même chose pour mac. Vous devriez pouvoir y aller en remplaçant ʻapt-getparbrew` Préférences pour zsh + neovim sur Ubuntu

Plug-in d'introduction

Si vous souhaitez écrire Python en vim, certains plugins sont indispensables. Les Pragins introduits cette fois sont les suivants.

dein.vim Shougo/dein.vim

Un gestionnaire de plug-ins qui facilite l'installation et la mise à jour des plug-ins est essentiel pour gérer de nombreux plug-ins. J'utilisais neobundle, le prédécesseur de dein.vim, mais j'ai changé de travail. Maintenant que vous pouvez créer des fichiers de configuration avec * .toml, les dépendances de plugins et les paramètres de chargement différé sont beaucoup plus faciles à lire qu'à l'ère du neobundle. Dark Mimuou est le Vimmer auquel je suis le plus redevable. Je ne suis pas le seul à le penser.

Exemple de réglage

let s:dein_dir = expand('$CACHE/dein')
if dein#load_state(s:dein_dir)
    call dein#begin(s:dein_dir)
    call dein#load_toml('~/.vim/rc/dein.toml',          {'lazy': 0})

    call dein#load_toml('~/.vim/rc/dein_lazy.toml',     {'lazy': 1})
    call dein#load_toml('~/.vim/rc/dein_neo.toml',      {'lazy': 1})
    call dein#load_toml('~/.vim/rc/dein_python.toml',   {'lazy': 1})
    call dein#load_toml('~/.vim/rc/dein_go.toml',       {'lazy': 1})
    call dein#load_toml('~/.vim/rc/dein_frontend.toml', {'lazy': 1})
    call dein#end()
    call dein#save_state()
endif

En plus des paramètres dein gonflés, les paramètres du plug-in sont gérés par toml.

Dein.toml sans chargement paresseux Dein_lazy.toml qui est lié à plusieurs types de fichiers et à une charge différée Dein_ {filetype} .toml pour le chargement différé associé à un seul type de fichier C'est dit.

denite.nvim

Shougo/denite.nvim

Principalement utilisé comme lanceur de fichiers. Mais ce n'est pas tout. denite est une plate-forme intégrée pour répertorier, filtrer et manipuler tout. Dans mon cas, l'essentiel est d'afficher la liste des fichiers dans le projet → affiner → ouvrir, ~~ Grep recherche la chaîne de caractères dans le fichier ~~ (Étant donné que le contenu de la commande système grep est sorti vers QuickFix, je l'utilise actuellement. Ne pas). Sous-utilisations telles que l'affichage d'une liste de fonctions.

Il est très polyvalent car il peut gérer non seulement des fichiers, mais aussi tout. Il y a beaucoup de personnalisation telles que l'ordre de tri, le changement de moteur de recherche et la commande Grep, le fonctionnement de la cible sélectionnée.

Non seulement l'unité principale fonctionne à grande vitesse, mais le flux de `denite start → rétrécir → ouvrir 'permet de sauter des fichiers et des lignes comme s'il reflétait vos propres pensées. Il ne fait aucun doute que la vitesse d'édition s'accélérera si vous la maîtrisez.

D'un autre côté, «denite» a tendance à être compliqué à mettre en place. Vous devrez le personnaliser pour votre corps tout en lisant l'aide. Il ne sera pas explosif immédiatement après l'insco.

Exemple de réglage

"Préfixe pour Denite
nmap [denite] <Nop>
map <C-j> [denite]

"Recherche de fichiers dans le projet
nmap <silent> [denite]<C-P> :<C-u>Denite file_rec -highlight-mode-insert=Search<CR>
"Rechercher les fichiers en cours de développement dans le tampon
nmap <silent> [denite]<C-B> :<C-u>Denite buffer -highlight-mode-insert=Search<CR>
"Fonctions dans le fichier/Rechercher des cours, etc.
nmap <silent> [denite]<C-O> :<C-u>Denite outline -highlight-mode-insert=Search<CR>
"fichier sous dotfiles_début de rec
nmap <silent> [denite]<C-V> :<C-u>call denite#start([{'name': 'file_rec', 'args': ['~/.dotfiles']}]) -highlight-mode-insert=Search=Search<CR>

"Monter et descendre<C-N>, <C-P>
call denite#custom#map('normal', '<C-N>', '<denite:move_to_next_line>')
call denite#custom#map('normal', '<C-P>', '<denite:move_to_previous_line>')
call denite#custom#map('insert', '<C-N>', '<denite:move_to_next_line>')
call denite#custom#map('insert', '<C-P>', '<denite:move_to_previous_line>')
"Déplacer l'historique des entrées<C-J>, <C-K>
call denite#custom#map('insert', '<C-J>', '<denite:assign_next_text>')
call denite#custom#map('insert', '<C-K>', '<denite:assign_previous_text>')
"Ouverture horizontale`<C-S>`
call denite#custom#map('insert', '<C-S>', '<denite:do_action:split>')
"Ouverture verticale`<C-I>`
call denite#custom#map('insert', '<C-I>', '<denite:do_action:vsplit>')
"Onglet ouvert`<C-O>`
call denite#custom#map('insert', '<C-O>', '<denite:do_action:tabopen>')

" file_Activer la correspondance floue lors de la recherche de rec et exclure les fichiers spécifiés de la cible de recherche
call denite#custom#source(
    \ 'file_rec', 'matchers', ['matcher_fuzzy', 'matcher_project_files', 'matcher_ignore_globs'])

"Spécification des fichiers qui ne sont pas recherchés
call denite#custom#filter('matcher_ignore_globs', 'ignore_globs',
    \ [ '.git/', '.ropeproject/', '__pycache__/',
    \   'venv/', 'images/', '*.min.*', 'img/', 'fonts/'])

Étant donné que denite a le taux d'utilisation le plus élevé de tous les plug-ins, il utilise des raccourcis clavier qui peuvent être atteints le plus rapidement possible. En conséquence, je me suis installé sur <C-J> <C - *>. Je pense que monter et descendre lors de la recherche de denite est complètement une question de goût.

deoplete.nvim

Shougo/deoplete.nvim

C'est un plug-in de complétion automatique. Et encore une fois, c'est le pouvoir sombre du Dark Bimuou. J'ai mentionné le système d'auto-complément dans ma tête car ce plug-in le distingue des autres plug-ins d'auto-complétion.

Par exemple, il existe un plug-in appelé jedi-vim pour le plug-in d'auto-complétion de Python, mais il s'agit d'un plug-in qui implémente uniquement l'auto-complétion de Python. En revanche, «deoplete» ne fournit que la base de la fonctionnalité de complétion, et la propre complétion de chaque langue ajoute la complétion en utilisant un plug-in externe «source» (on dit qu'il est appelé) qui suit l'interface de «deoplete». Ce sera sous la forme de. Notez que l'auto-complétion Python est ajoutée avec deoplete-jedi décrit plus tard.

Quand je l'écris de cette façon, je pense que ce que fait Dark Mimuou n'est pas un plug-in mais un écosystème.

Exemple de réglage

Actuellement en construction

vim-airline

vim-airline/vim-airline

Cela vous fait paraître à la mode en jouant avec la barre d'état. Lorsqu'on lui a demandé si cela aurait un grand impact sur l'édition, ce n'est pas tant que ça. Cependant, pour augmenter la tension du montage, vous avez besoin de quelque chose de cool comme "Je suis en train de monter avec un éditeur cool".

Il change les couleurs dans les modes Normal, Insertion et Visuel, affiche la branche Git en cours de modification, affiche virtualenv dans env et affiche d'autres informations sur la position du curseur. À la mode.

Exemple de réglage

"Définir le nom d'affichage du mode(La valeur par défaut est abrégée car elle est longue et réduit la largeur.)
let g:airline_mode_map = {
    \ '__' : '-',
    \ 'n'  : 'N',
    \ 'i'  : 'I',
    \ 'R'  : 'R',
    \ 'c'  : 'C',
    \ 'v'  : 'V',
    \ 'V'  : 'V',
    \ '' : 'V',
    \ 's'  : 'S',
    \ 'S'  : 'S',
    \ '' : 'S',
    \ }

"Cool avec la ligne électrique
let g:airline_powerline_fonts = 1
"Cool en spécifiant un thème de couleur
let g:airline_theme = 'badwolf'
"La barre d'onglets est cool
let g:airline#extensions#tabline#enabled = 1

"Affichage matriciel de sélection personnalisé(La valeur par défaut est longue et réduit la largeur, alors réduisez-la)
let g:airline_section_z = airline#section#create(['windowswap', '%3p%% ', 'linenr', ':%3v'])

"Afficher le virtualenv actuellement activé pour voir s'il reconnaît le virtulenv(vim-extension de virtualenv)
let g:airline#extensions#virtualenv#enabled = 1

"De la ligne modifiée depuis git HEAD+-Cacher(vim-extension gitgutter)
let g:airline#extensions#hunks#enabled = 0

"Afficher les erreurs et les avertissements de l'outil Lint(Extension ALE)
let g:airline#extensions#ale#enabled = 1
let g:airline#extensions#ale#error_symbol = 'E:'
let g:airline#extensions#ale#warning_symbol = 'W:'

Je l'ai essentiellement écrit pour être cool. Cependant, comme le nom du fichier ne peut pas être vu, les choses qui exercent une pression sur la largeur sont exclues autant que possible.

nerdtree

scrooloose/nerdtree

C'est un explorateur qui est souvent attaché à la gauche de l'EDI. Je pensais que je n'aurais pas besoin d'un explorateur de fichiers si j'avais denite. Les humains ne se souviennent pas de beaucoup de choses, et il arrive souvent que vous souhaitiez voir des fichiers dans une structure hiérarchique.

Si vous ne trouvez pas le nom du fichier à taper denite tout de suite, ouvrez nerdtree et vous trouverez une liste de fichiers sûrs.

Si vous utilisez nerdtree-git-plugin et fugitive décrit plus tard. Le statut d'édition du fichier est affiché sur nerdtree.

Ne dites pas: "Si c'est un Atom ou un VsCode, je vais le prendre depuis le début." Mon cœur se brise.

vim-fugitive

tpope/vim-fugitive

Fondamentalement, je ne suis pas une personne qui se sent mal à l'aise si je ne suis pas tout le temps dans vim, mais je fais généralement des va-et-vient entre le terminal et vim avec Ctrl + z, alors est-ce nécessaire? Je pensais. Cependant, il y a un avantage écrasant par rapport à son fonctionnement dans le terminal, qui est les commandes «: Gdiff» et «: Gblame» de «fugitif».

: Gdiff est utilisé lorsque vous pensez que c'était mieux avant l'édition. Dans un tel cas, je fais l'opération d'affichage du git diff et j'en tire le code d'origine. Retour au terminal → Afficher diff → Copier → Revenir à vim et coller Mais Exécutez "": Gdiff "→ Yank → Paste Sera. Amélioration significative de la vitesse.

Quant à : Gblame, tout en regardant le code, vous pouvez voir ce qui s'est passé comme ça sur place avec un seul: Glame et vous pouvez également vous référer aux informations du journal. Et la même chose est vraie pour : Gdiff, avec la coloration syntaxique de vim appliquée. vite.

Exemple de réglage

nmap [figitive] <Nop>
map <Leader>g [figitive]
nmap <silent> [figitive]s :<C-u>Gstatus<CR>
nmap <silent> [figitive]d :<C-u>Gdiff<CR>
nmap <silent> [figitive]b :<C-u>Gblame<CR>
nmap <silent> [figitive]l :<C-u>Glog<CR>

Je n'utilise pas de commandes autres que celles ci-dessus car elles sont exploitées par tig.

vim-gitgutter

airblade/vim-gitgutter

Les ajouts, suppressions et modifications de code à partir de HEAD de git sont affichés dans l'espace le plus à gauche (gitter). J'avais l'habitude de penser que c'était un obstacle, mais une fois que je l'ai utilisé, je ne pouvais pas m'en débarrasser.

deoplete-jedi

zchee/deoplete-jedi

Ajoutez l'auto-complétion Python au deoplete mentionné ci-dessus. Dans les coulisses, il semble utiliser la bibliothèque d'analyse statique de Python jedi (non liée à Star Wars?) Pour transmettre les résultats de l'analyse à deoplete.

Exemple de réglage

Actuellement en construction

vim-quickrun

thinca/vim-quickrun

Vous pouvez exécuter des programmes Python sur vim. Mon utilisation est de sortir vers Buffer s'il n'y a pas d'erreur dans le résultat de l'exécution, de l'afficher dans QuickFix s'il y a une erreur et de sauter le code tel quel. Notez que l'exécution asynchrone ne peut pas être prise en charge par elle-même, vous devez donc ajouter vimproc.vim et le définir avec vim-quickrun.

Il existe un plugin similaire qui effectue une exécution asynchrone appelée asyncrun avec la fonction de vim lui-même au lieu de vimproc, mais il semble qu'il lit bien le chemin. Je viens de l'installer et je ne l'ai pas utilisé parce que cela ne m'a pas donné.

Exemple de réglage

"Exécution asynchrone avec vimproc
"Affichage avec tampon en cas de succès et QuickFix en cas d'échec
"Ajuster la taille de l'affichage des résultats, etc.
let g:quickrun_config = {
    \ '_' : {
        \ 'runner' : 'vimproc',
        \ 'runner/vimproc/updatetime' : 40,
        \ 'outputter' : 'error',
        \ 'outputter/error/success' : 'buffer',
        \ 'outputter/error/error'   : 'quickfix',
        \ 'outputter/buffer/split' : ':botright 8sp',
    \ }
\}

"Fermer le contenu de l'affichage précédent au moment de l'exécution&Enregistrez puis exécutez
let g:quickrun_no_default_key_mappings = 1
nmap <Leader>r :cclose<CR>:write<CR>:QuickRun -mode n<CR>

Il est pratique d'ajouter la fermeture du résultat de l'exécution existante et l'enregistrement du fichier à la liaison de clé. Sans parler de vimproc.

~~neomake~~

neomake/neomake

Python a une règle de syntaxe appelée pep8, et une commande d'analyse statique appelée linter pour la détecter automatiquement. neomake exécute le linter de manière asynchrone et affiche le résultat de l'exécution comme un marqueur sur vim.

Dans mon cas, j'utilise «flake8», qui détecte «pylint» en plus de «pep8». A l'origine, j'ai utilisé un plugin similaire syntastic, mais comme il ne supporte pas l'exécution asynchrone, je suis passé à neomake. J'ai fait.

ALE

w0rp/ale

J'utilise neomake depuis un moment, mais lorsque je travaille sur un grand projet, je constate souvent un décalage considérable (quelques secondes) dans la réflexion du linter. Par conséquent, lorsque j'ai essayé ALE, auquel j'avais prêté attention pendant longtemps, je suis passé à ALE en raison de sa vitesse élevée, de son apparence bâclée, de ses fonctions abondantes et de ses démangeaisons, et README était poli.

Exemple de réglage

"Marque à afficher sur la ligne d'erreur
let g:ale_sign_error = '⨉'
let g:ale_sign_warning = '⚠'
"Format de message affiché lorsque le curseur est placé sur la ligne d'erreur
let g:ale_echo_msg_format = '[%linter%] %s [%severity%]'
"Toujours afficher la colonne d'affichage des erreurs
let g:ale_sign_column_always = 1

"Exécutez la charpie lors de l'ouverture du fichier
let g:ale_lint_on_enter = 1
"Exécutez la charpie lors de l'enregistrement du fichier
let g:ale_lint_on_save = 1
"Ne pas pelucher
let g:ale_lint_on_text_changed = 'never'

"charpie Ne pas afficher les résultats dans la liste des emplacements et QuickFix
"C'est assez ennuyeux quand il est sorti, et c'est un problème de pouvoir réécrire QuickFix
let g:ale_set_loclist = 0
let g:ale_set_quickfix = 0
let g:ale_open_list = 0
let g:ale_keep_list_window_open = 0

"Activer le linter
let g:ale_linters = {
\   'python': ['flake8'],
\}

"Préfixe ALE
nmap [ale] <Nop>
map <C-k> [ale]
"Aller à la ligne d'erreur
nmap <silent> [ale]<C-P> <Plug>(ale_previous)
nmap <silent> [ale]<C-N> <Plug>(ale_next)

Pour être honnête, si vous regardez le READ ME, il est principalement écrit, mais je le posterai pour le moment.

vim-virtualenv

jmcantrell/vim-virtualenv

Si vous développez en Python, il existe de nombreuses scènes dans lesquelles vous utilisez virtualenv. Dans ce cas, vous devrez vous référer à la bibliothèque etc. installée uniquement par virtualenv sur vim. Ce plugin est pour une telle situation. Si vous activez virtualenv et démarrez vim, vim démarrera avec la bibliothèque virtualenv chargée.

vim-python-pep8-indent

Vimjas/vim-python-pep8-indent

l'autoindent de vim n'est pas conforme aux conventions pep8. Si vous installez ce plug-in, il effectuera automatiquement des sauts de ligne conformes à pep8 au moment des sauts de ligne. Pratique.

#Auto-identification ordinaire
format_str = format('En quelque sorte:{}Kanya:',
    a, b)
#Auto-identification compatible pep8
format_str = format('En quelque sorte:{}Kanya:',
                    a, b)

jedi-vim

davidhalter/jedi-vim

C'est un plug-in qui fait diverses choses en utilisant Jedi. Au début de la construction de l'environnement Python, je ne l'ai pas utilisé car la complétion automatique était faite avec deoplete-jedi. Cependant, lors de l'exécution d'un saut de balise avec le même sort tout en effectuant un saut de balise à l'aide de ctags, il était difficile de sélectionner la cible à partir du saut de balise, donc je l'ai introduit pour référence de code. Par conséquent, la plupart des fonctions sont écrasées et il ne reste que la référence de code. Après tout, il est pratique de pouvoir voler vers la source de référence d'un seul coup. Cependant, je pense que vim devient plus lourd à cause de cela, alors je cherche s'il existe un meilleur moyen.

Exemple de réglage

"Je ferai les réglages de liaison des clés et la complétion automatique sans permission, alors écrasez
let g:jedi#auto_initialization = 0
let g:jedi#auto_vim_configuration = 0
let g:jedi#smart_auto_mappings = 0
let g:jedi#completions_enabled = 0
"Enregistrer les raccourcis clavier pour les références de code
let g:jedi#goto_command = "<Leader>d"

gen_tags.vim

jsfaint/gen_tags.vim

Il existe différents plug-ins de génération automatique pour les ctags, mais l'un d'eux est hors de question car il prend en charge l'exécution asynchrone par job et gtags. Si vous ne connaissez pas les ctags, veuillez rechercher divers articles d'introduction.

Exemple de réglage

let g:gen_tags#ctags_auto_gen = 1
let g:gen_tags#gtags_auto_gen = 1

Activez simplement la sauvegarde automatique. Facile.

vim-test + vim-dispatch

anko-m/vim-test tpope/vim-dispatch

Un plug-in de test est installé séparément de QuickRun. Veuillez vous référer à l'article suivant pour plus de détails. Préparez très sérieusement l'environnement de test Vim (pour Python)

gtags.vim + vim-qfreplace

vim-scripts/gtags.vim thinca/vim-qfreplace

Dans les ctags, GNU global est adopté séparément car la destination de référence ne peut pas être obtenue même si la source de la déclaration peut être obtenue. Obtenez une référence dans gtags.vim et remplacez-la par qfreplace. Bref, c'est un outil de refactoring.

Veuillez vous référer à l'article suivant pour la recherche par GNU global. Essayez le saut de code vim avec gtags

.vimrc

~~ Je veux vraiment lister l'extrait de vimrc pour chaque plugin, mais je suis épuisé donc je le mettrai à jour quand j'aurai encore le temps. ~~ Voir ci-dessous pour vimrc. lighttiger2505/.dotfiles

finalement

Cela fait un mois que je travaille chez ~~ vim, et maintenant j'ai un environnement beaucoup plus pratique que mon niveau de passe-temps, alors j'aimerais profiter de l'occasion pour le présenter. ~~ Je travaille sur vim depuis six mois, mais c'est encore loin. Je vais me consacrer. Si vous lisez cet article, je suis un meilleur vim. Je suis sûr qu'il y a des gens qui disent ça, alors je serais heureux si vous pouviez me le dire.

Recommended Posts

Créez un environnement Python moderne avec Neovim
Créez un environnement virtuel pour python avec pyenv
Créez un environnement python avec ansible sur centos6
[Python] Créer un environnement de développement Django avec Docker
Créer un environnement de construction python3 avec Sublime Text3
Créer un environnement python3 avec ubuntu 16.04
Construire un environnement python avec direnv
Construire un environnement Python avec OSX Elcapitan
Créer un environnement Python hors ligne
Créez rapidement un environnement Python Django avec IntelliJ
Créer un environnement d'apprentissage automatique Python avec des conteneurs
Créer un environnement d'exécution python avec VS Code
Créez un environnement virtuel python avec virtualenv et virtualenvwrapper
Créez un environnement python pour chaque répertoire avec pyenv-virtualenv
Créer un environnement de développement d'applications d'apprentissage automatique avec Python
Créez un environnement virtuel python avec virtualenv et virtualenvwrapper
Configurer un environnement Python moderne avec Homebrew
Créez un environnement virtuel avec Python!
Créer un environnement virtuel avec Python 3
Créer un environnement python3 sur CentOS7
Comment créer un environnement de développement de la série Python2.7 avec Vagrant
Créer un environnement python avec pyenv (OS X El Capitan 10.11.3)
Créer un environnement Python avec WSL + Pyenv + Jupyter + VSCode
[Pyenv] Construire un environnement python avec ubuntu 16.04
Créez facilement un environnement de développement avec Laragon
Créer un environnement Jupyter Lab (Python) avec Docker
Construire un environnement python sur MacOS (Catallina)
Créer un environnement Tensorflow avec Raspberry Pi [2020]
[Python] Créez un environnement virtuel avec Anaconda
Création d'un environnement Python 3.6 avec Windows + PowerShell
Créez un environnement d'API rapide avec docker-compose
Créer un environnement Python avec Anaconda sur Mac
[Linux] Créer un environnement Jenkins avec Docker
Créer un environnement Python + OpenCV sur Cloud9
Construction d'environnement AI / Machine Learning avec Python
[Linux] Construction de l'environnement Docker avec Amazon Linux 2
Créez un environnement Python 2.7 64 bits avec TDM-GCC et MinGW-w64 sous Windows 7
Créez un environnement Python sur votre Mac avec Anaconda et PyCharm
Créez un environnement d'exécution Python à l'aide de GPU avec GCP Compute Engine
environnement python avec docker-compose
Environnement virtuel avec Python 3.6
Créer un environnement de développement de langage C avec un conteneur
Créez un environnement WardPress sur AWS avec Pulumi
Créer un environnement python avec pyenv sur EC2 (ubuntu)
Construire un environnement python avec virtualenv et direnv
Créez simplement un environnement d'exécution Python 3 sous Windows
Créer un environnement Python sur Mac (Mountain Lion)
Créer un environnement virtuel avec conda avec Python
Créez un environnement Django avec Vagrant en 5 minutes
[Memo] Créez un environnement virtuel avec Pyenv + anaconda
Créer un environnement virtuel Python simple sans utiliser pyenv
Un mémo lors de la création d'un environnement python avec miniconda
Créez un environnement virtuel avec pyenv et venv
Créer un environnement de développement Django à l'aide de Doker Toolbox
Commandes pour créer un environnement python3 avec virtualenv
Travaillez dans un environnement virtuel avec Python virtualenv.