GNU/Linux >> Tutoriels Linux >  >> Linux

La vanille Vim est amusante

Lorsque vous démarrez Vim avec le --clean option, il apparaît en mode "vanille". Pas de plugins, pas de configuration, juste un retour aux sources. J'ai collecté une tonne d'instructions de configuration au fil des ans, certaines datant de MS-DOS ou de Windows 3.1. Voici le deal :je vais repartir de zéro pour trouver une bonne configuration de départ avec juste les plugins disponibles dans Fedora 35. Vais-je survivre à une semaine de codage ? Je vais me renseigner !

Voici les règles :Déclarations de configuration minimales possibles et uniquement les plugins livrés avec Fedora 35+. Au fait, si vous n'êtes pas un utilisateur de Fedora, continuez à lire. Vous pouvez toujours installer ces plugins à partir de votre gestionnaire de packages de système d'exploitation manuellement ou à l'aide d'un gestionnaire de plugins Vim.

Avant de commencer, il y a l'éléphant dans la pièce :question Vim ou Neovim (fork of Vim). Eh bien, c'est à vous de décider. Tout ce qui est dans cet article devrait fonctionner pour les deux. Cependant, je n'ai testé qu'avec Vim. Toutes les compétences vous seront utiles lorsque vous vous connecterez à un serveur où seul vi est disponible. Il peut s'agir d'un ancien système UNIX, d'un serveur Linux avec un minimum de logiciels installés pour une meilleure sécurité, d'un shell interactif dans un conteneur ou d'un système embarqué où l'espace est précieux.

Sans plus tarder, voici ce que j'ai distillé au strict minimum pour être efficace avec Vim pour coder :

# dnf install --allowerasing vim-default-editor \
        vim-enhanced \
        vim-ctrlp \
        vim-airline \
        vim-trailing-whitespace \
        vim-fugitive \
        vim-ale \
        ctags

Ne vous inquiétez pas du --allowerasing option. Passez simplement en revue la transaction d'installation avant de confirmer. Cette option est là pour dire au gestionnaire de paquets de remplacer le paquet existant nano-default-editor avec vim-default-editor . C'est un petit paquet qui supprime les fichiers de configuration du shell pour définir la variable d'environnement EDITOR sur vim , et c'est indispensable si vous voulez utiliser Vim (par exemple, avec git). C'est une chose spéciale pour Fedora. Vous n'aurez pas besoin de le faire sur d'autres distributions ou systèmes d'exploitation. Assurez-vous simplement que votre variable shell EDITOR est correctement définie.

Plus de ressources Linux

  • Aide-mémoire des commandes Linux
  • Aide-mémoire des commandes Linux avancées
  • Cours en ligne gratuit :Présentation technique de RHEL
  • Aide-mémoire sur le réseau Linux
  • Aide-mémoire SELinux
  • Aide-mémoire sur les commandes courantes de Linux
  • Que sont les conteneurs Linux ?
  • Nos derniers articles Linux

Aperçu

Un bref aperçu de ce que je considère comme un ensemble de plugins bon et propre :

  • CtrlP :Plugin fuzzy-finder le plus petit possible (pur vimscript)
  • Fugitive :Un outil indispensable pour git
  • Espace de fin  :affiche et corrige, eh bien, les espaces blancs de fin
  • Compagnie aérienne :Une ligne de statut améliorée (pur vimscript)
  • Bière  :met en surbrillance les fautes de frappe ou les erreurs de syntaxe lors de la saisie
  • Ctags :Pas un plugin Vim mais un outil indispensable

Il existe d'autres plugins de recherche floue comme command-t ou mon préféré (très rapide) fzf.vim . Le truc, c'est fzf.vim n'est pas dans Fedora, et je veux la plus petite configuration possible. CtrlP fera très bien l'affaire, et il est beaucoup plus facile à configurer car il ne nécessite rien.

Si je devais choisir une configuration minimale absolue, ce serait :

# cat ~/.vimrc
let mapleader=","
let maplocalleader="_"
filetype plugin indent on
let g:ctrlp_map = '<leader><leader>'
let g:ctrlp_user_command = ['.git/', 'git --git-dir=%s/.git ls-files -oc --exclude-standard']
set exrc
set secure

Mais c'est probablement trop extrême, alors voici une configuration légèrement plus grande avec mon explication détaillée ci-dessous :

" vim: nowrap sw=2 sts=2 ts=2 et:

" leaders
let mapleader=","
let maplocalleader="_"

" filetype and intent
filetype plugin indent on

" incompatible plugins
if has('syntax') && has('eval')
  packadd! matchit
end

" be SSD friendly (can be dangerous!)
"set directory=/tmp

" move backups away from projects
set backupdir=~/.vimbackup

" fuzzy searching
let g:ctrlp_map = '<leader><leader>'
let g:ctrlp_user_command = ['.git/', 'git --git-dir=%s/.git ls-files -oc --exclude-standard']
nnoremap <leader>b :CtrlPBuffer<cr>
nnoremap <leader>t :CtrlPTag<cr>
nnoremap <leader>f :CtrlPBufTag<cr>
nnoremap <leader>q :CtrlPQuickfix<cr>
nnoremap <leader>m :CtrlPMRU<cr>

" buffers and quickfix
function! ToggleQuickFix()
  if empty(filter(getwininfo(), 'v:val.quickfix'))
    copen
  else
    cclose
  endif
endfunction
nnoremap <leader>w :call ToggleQuickFix()<cr>
nnoremap <leader>d :bd<cr>

" searching ang grepping
nnoremap <leader>g :copen<cr>:Ggrep!<SPACE>
nnoremap K :Ggrep "\b<C-R><C-W>\b"<cr>:cw<cr>
nnoremap <leader>s :set hlsearch! hlsearch?<cr>

" ctags generation
nnoremap <leader>c :!ctags -R .<cr><cr>

" per-project configs
set exrc
set secure

Utilisation d'une virgule pour la clé de leader

J'aime avoir ma clé de leader mappée sur une virgule au lieu de la barre oblique inverse par défaut. C'est la clé libre la plus proche dans Vim lorsque vos mains sont en position d'écriture. De plus, cette touche est la même dans la plupart des dispositions de clavier tandis que \ varie selon le modèle ou la disposition. J'utilise rarement un leader local, mais le soulignement semble être un bon choix.

Lectures complémentaires :

  • Voir :help map-which-keys dans le manuel de référence de Vim
  • Voir les clés inutilisées dans Vim sur le Vim Tips Wiki

Type de fichier et syntaxe désactivés

Vient ensuite le très important filetype commande. Vous voyez, Vim est livré avec des "piles incluses", la version 8.2 contient la coloration syntaxique pour 644 langues, 251 définitions de types de fichiers (ftplugins ) et des règles d'indentation pour 138 langues. Cependant, l'indentation n'est pas activée par défaut, peut-être pour offrir une expérience d'édition cohérente pour tous. J'aime l'activer.

Un petit conseil :si vous éditez un fichier très volumineux et que Vim semble lent, vous pouvez désactiver la coloration syntaxique pour accélérer les choses. Juste le type :syn off commande.

Lectures complémentaires :

  • Voir :help filetype dans le manuel de référence de Vim
  • Voir :help syntax dans le manuel de référence de Vim
  • Voir :help indent dans le manuel de référence de Vim

Plug-in Matchit

Vim est même livré avec des plugins supplémentaires, ce qui rend certaines fonctionnalités incompatibles, l'une d'entre elles est très utile. C'est le matchit plugin qui fait % key trouve des parenthèses correspondantes pour fonctionner avec certaines langues. En règle générale, vous pouvez trouver le début ou la fin d'un bloc (début et fin) ou des balises de correspondance HTML et similaires.

Lectures complémentaires :

  • Voir :help matchit dans le manuel de référence de Vim

Fichier d'échange

L'un des nombreux paramètres que je souhaite conserver de mon ancienne configuration utilise /tmp pour échanger et créer des sauvegardes dans un répertoire séparé dans ma maison, que vous devez créer avec mkdir ~/.vimbackup . Il est important de comprendre que Vim crée une copie appelée "fichier d'échange" lorsque vous commencez à éditer, et tout le travail non enregistré est enregistré dans ce fichier. Ainsi, même en cas de panne de courant, votre swap contient la plupart des travaux non enregistrés. Je préfère utiliser tmpfs car tous mes ordinateurs portables et serveurs sont protégés par UPS, et j'économise souvent. De plus, la plupart du temps, vous utilisez des fichiers d'échange lorsque votre connexion SSH est perdue plutôt qu'en raison d'une panne de courant. Les fichiers d'échange peuvent être assez volumineux pour les fichiers volumineux et j'apprécie mon SSD, donc je prends la décision ici. Si vous n'êtes pas sûr, supprimez cette déclaration pour utiliser /var/tmp , ce qui est plus sûr.

Lectures complémentaires :

  • Voir :help swap-file dans le manuel de référence de Vim

Plug-in Fuzzy-finder

Maintenant, le fuzzy finder est un plugin dont je ne peux pas me passer. Ouverture de fichiers à l'aide de commandes telles que :Ex ou :e ou :tabe est correct sur un serveur lorsque vous devez ouvrir environ 20 fichiers par jour. Lors du codage, j'ai généralement besoin d'en ouvrir des centaines. Comme je l'ai dit, CtrlP fait bien le travail. Il est petit, sans dépendances - du pur Vim. Il s'ouvre avec la touche Ctrl +P combinaison, ce qui est un peu bizarre pour moi. Je sais que certains éditeurs célèbres l'utilisent (VSCode, je pense). Le fait est que ce sont déjà des raccourcis clavier Vim importants que je ne veux pas remplacer. Donc le gagnant pour moi est leader +chef (virgule appuyée deux fois).

La ctrlp_user_command change simplement la façon dont CtrlP obtient la liste des fichiers. Au lieu du listeur de fichiers récursif intégré (glob), il utilise git ls-files ce qui est généralement mieux car il ignore les éléments de .gitignore , donc des choses comme node_modules ou d'autres répertoires non pertinents qui peuvent ralentir la liste ne sont pas gênants.

Chef +B /T /F /Q /M pour ouvrir une liste de tampons, de balises, de balises du fichier actuel, de tampon de correction rapide et des fichiers les plus récemment utilisés est très utile. Plus précisément, une fois que vous avez généré une taglist avec ctags , il s'agit essentiellement de "Go To Definition" pour des centaines de langages de programmation - aucun plugin n'est nécessaire ! Tout cela est intégré à Vim. Maintenant, pour mettre les choses au clair, lorsque je tape leader +B , cela signifie appuyer sur la virgule puis appuyer sur B clé, pas ensemble comme avec Contrôle ou Shift .

Lectures complémentaires :

  • Voir :help Explore dans le manuel de référence de Vim
  • Voir le GitHub ctrlp.vim

Gestion des tampons

Bien que Vim supporte les onglets de nos jours, la gestion des tampons est une compétence importante pour maîtriser Vim. Je me retrouve généralement avec trop de tampons et je dois faire :bdelete bien trop souvent. Eh bien, chef +D semble être une bonne option pour le faire plus rapidement. J'aime aussi fermer la fenêtre Quickfix, donc il y a le leader +O combinaison pour cela aussi. Je l'utilise très souvent lorsque je parcours les résultats de recherche.

Lectures complémentaires :

  • Voir :help buffer-hidden dans le manuel de référence de Vim

Ggrep et le plugin fugitif

En parlant de recherche, c'est aussi important que d'ouvrir des fichiers. Je veux pouvoir grep la base de code. Pour cela, il y a le génial :Ggrep commande du plugin fugitif, qui utilise git grep, qui ignore les fichiers inutiles et ne recherche que ce qui se trouve dans git. Depuis Shift +K est une clé libre dans Vim, elle convient parfaitement pour saisir automatiquement le terme sous le curseur. Et enfin, pouvoir saisir des modèles de recherche arbitraires à l'aide de leader +G est aussi sympa. Notez que cela ouvre une fenêtre appelée la fenêtre Quickfix où vous pouvez naviguer dans les résultats, aller à l'occurrence suivante, précédente, dernière, première, etc. La même fenêtre est utilisée pour la sortie des compilateurs ou d'autres outils, alors familiarisez-vous avec elle. Je suggère de lire davantage dans la documentation si cela est nouveau pour vous.

Lectures complémentaires :

  • Voir :help quickfix dans le manuel de référence de Vim
  • Voir le GitHub vim-fugitif

Rechercher et attraper un fugitif

Au fait, la recherche avec / key est intelligent et sensible, ce qui signifie que si tous les caractères sont en minuscules, Vim recherche en ignorant la casse. Par défaut, il met en évidence les résultats, et je pense avoir tapé :noh (tour de surbrillance) environ un million de fois. C'est pourquoi j'ai un chef +S pour basculer cela. Je suggère également de lire plus d'informations sur la recherche dans le manuel plus tard.

La recherche et le grep viennent ensuite. Le plugin fugitif vous a couvert. Utilisez la commande :Ggrep pattern pour faire un git grep, et les résultats iront dans la fenêtre Quickfix. Ensuite, naviguez simplement dans les résultats à l'aide des commandes de correction rapide (:cn , :cp , et autres) ou utilisez simplement :CtrlPQuickfix (ou chef +Q ) pour les faire défiler visuellement. Ce qui est cool avec l'intégration du correctif rapide CtrlP, c'est que vous pouvez rechercher davantage les résultats en tapant pour faire correspondre les noms de fichiers ou le contenu si cela a du sens - en recherchant les résultats de la recherche.

Lectures complémentaires :

  • Voir :help grep dans le manuel de référence de Vim
  • Voir :help noh dans le manuel de référence de Vim
  • Voir le GitHub vim-fugitif

Ctags

Chef +C pour générer un ctags Le fichier pour une meilleure navigation est utile lorsqu'il s'agit d'une nouvelle base de code ou d'une session de codage plus longue avec de nombreux sauts. Ctags prend en charge des centaines de langues et Vim peut utiliser toutes ces connaissances pour y naviguer. Plus d'informations sur la façon de le configurer plus tard. Notez que j'ai déjà parlé de leader +T pour ouvrir la recherche floue pour toutes les balises, vous vous souvenez ? C'est exactement la même chose.

Lectures complémentaires :

  • Voir :help ctags dans le manuel de référence de Vim
  • Consulter le site Web d'Universal Ctags

Mappage des clés

Pouvoir remplacer tout autre paramètre dans les projets en créant un .vimrc fichier dans un répertoire de projet est une bonne idée. Il suffit de le mettre dans le (global) .gitignore pour vous assurer que vous n'avez pas besoin de modifier des milliers de fichiers git ignore dans chaque projet. Un tel projet .vimrc pourrait être quelque chose comme (pour un projet C/C++ avec GNU Makefile) :

" coding style
set tabstop=4
set softtabstop=4
set shiftwidth=4
set noexpandtab
" include and autocomplete path
let &path.="/usr/local/include"
" function keys to build and run the project
nnoremap <F9> :wall!<cr>:make!<cr><cr>
nnoremap <F10> :!LD_LIBRARY_PATH=/usr/local/lib ./project<cr><cr>

Comme vous pouvez le voir, je mappe généralement F2 -F10 clés pour compiler, exécuter, tester et actions similaires. Utilisation de F9 pour appeler make parait à peu près juste. Vous vous souvenez de l'IDE Borland bleu de MS-DOS ?

Comme mentionné précédemment, c'est une bonne idée d'ignorer à la fois .vimrc et tags (généré par ctags ) globalement, il n'est donc pas nécessaire de mettre à jour chaque .gitignore :

# git config --global core.excludesfile ~/.gitignore
# cat ~/.gitignore
/.vimrc
/tags
/TAGS

Quelques déclarations supplémentaires dans ma configuration personnelle ne sont pertinentes que pour ceux qui ont des dispositions de clavier non américaines (je suis en tchèque). J'ai besoin d'utiliser des touches mortes pour de nombreux caractères, et ce n'est tout simplement pas possible, et je préfère taper la commande au lieu de faire ces combinaisons difficiles à atteindre. Voici une solution au problème :

" CTRL-] is hard on my keyboard layout
map <C-K> <C-]>
" CTRL-^ is hard on my keyboard layout
nnoremap <F1> :b#<cr>
nnoremap <F2> :bp<cr>
nnoremap <F3> :bn<cr>
" I hate entering Ex mode by accident
map Q <Nop>

Lectures complémentaires :

  • Voir :help map dans le manuel de référence de Vim

Les touches de fonction sont toutes gratuites dans Vim, sauf F1 , qui ne manquera pas d'aider. Je n'ai pas besoin d'aide, pas que je saurais déjà tout sur Vim. Pas du tout. Mais je peux simplement taper :help si besoin. Et F1 est une clé cruciale, si proche de la Échap clé. J'aime utiliser l'échange de tampons (:b# ) pour cela et F2 -F3 pour le suivant/précédent. Plus vous travaillez avec des tampons, plus vous en aurez besoin. Si vous n'avez pas utilisé Ctrl +^ , je suggère de s'y habituer. Oh, êtes-vous déjà entré dans le mode Ex avec le type laid :visual ? De nombreux débutants ne savaient pas comment quitter Vim à partir de ce mode. Pour moi, c'est juste dérangeant car je l'utilise rarement.

Maintenant, familiarisez-vous avec les ctags est un élément clé pour réussir avec Vim. Cet outil prend en charge des centaines de langues et il peut facilement créer des balises pour les fichiers que vous ne souhaitez pas créer, c'est pourquoi je suggère d'ignorer les répertoires indésirables typiques :

# cat ~/.ctags.d/local.ctags
--recurse=yes
--exclude=.git
--exclude=build/
--exclude=.svn
--exclude=vendor/*
--exclude=node_modules/*
--exclude=public/webpack/*
--exclude=db/*
--exclude=log/*
--exclude=test/*
--exclude=tests/*
--exclude=\*.min.\*
--exclude=\*.swp
--exclude=\*.bak
--exclude=\*.pyc
--exclude=\*.class
--exclude=\*.cache

Plug-in de compagnie aérienne

Je ne dois pas oublier le plugin Vim Airlines. Sur les deux de Fedora, celle-ci est légère, aucune dépendance externe n'est nécessaire et elle fonctionne immédiatement avec toutes mes polices. Vous pouvez le personnaliser, et il y a des thèmes et des choses comme ça. Il se trouve que j'aime le paramètre par défaut.

Je dois mentionner qu'il existe deux principaux ctag projets :Exuberant Ctags et Universal Ctags. Ce dernier est une fourche plus moderne. Si votre distribution l'a, utilisez-le. Si vous êtes sur Fedora 35+, vous devez savoir que vous êtes maintenant sur Universal Ctags.

Récapitulez

En conclusion, voici ce que je propose. Essayez de garder votre configuration Vim lisse et propre. Cela portera ses fruits à l'avenir. Après avoir changé, j'ai dû réapprendre les commandes "écrire et quitter" car je les tapais sous la forme :Wq accidentellement tout le temps, et j'ai eu un "hack" dans l'ancienne configuration qui a fait ce que je voulais dire. D'accord, celui-ci pourrait être utile et faire la différence. J'espère que vous comprenez ce que je veux dire :

:command Wq wq
:command WQ wq

Voici un dernier conseil rapide :vous devrez peut-être modifier beaucoup votre configuration Vim par défaut tout en trouvant le point idéal de ce que je vous ai présenté ici et votre propre goût. Utilisez l'alias suivant, vous n'avez donc pas besoin de rechercher l'historique tout le temps. Croyez-moi, lorsqu'un utilisateur de Vim recherche "vim" dans l'historique, rien n'est pertinent :

alias vim-vimrc='vim ~/.vimrc'

Voilà. Peut-être que cela peut vous aider à naviguer dans le monde riche de Vim sans une tonne de plugins. Vanille Vim est amusant !

Pour essayer ce que vous venez de lire, installez les packages et vérifiez la configuration :

test -f ~/.vimrc && mv ~/.vimrc ~/.vimrc.backup
curl -s https://raw.githubusercontent.com/lzap/vim-lzap/master/.vimrc -o ~/.vimrc
mkdir ~/.vimbackup

Remerciements particuliers à Marc Deop et Melanie Corr pour la révision de cet article.


Mise à jour : J'ai survécu ! La seule difficulté que j'ai eue était l'ordre différent des résultats du plugin CtrlP. L'algorithme flou pour les fichiers est différent du fzf.vim plugin, donc les fichiers que j'avais l'habitude de trouver en utilisant divers termes de recherche ne fonctionnent plus maintenant. J'ai fini par installer le paquet fzf de Fedora, qui est livré avec une fonction vim FZF qui peut être liée à la combinaison leader pour une recherche de fichiers plus pertinente. Consultez le fichier de configuration mis à jour dans mon référentiel GitHub. J'ai beaucoup appris en cours de route. Il y a des raccourcis clavier que j'ai déjà oubliés grâce à de nombreux plugins.


Cet article a initialement été publié sur le site Web de l'auteur et est republié avec son autorisation.


Linux
  1. Syntaxe_highlight | Lpr ?

  2. Centos 7 :Configurer vim

  3. comment utiliser pylint dans vim

  4. Évaluer des expressions dans Vim

  5. Vim pour remplacer Vi

Comment supprimer des lignes dans Vim / Vi

Comment effectuer une recherche dans Vim / Vi

Principes de base de l'éditeur Vim

Comment utiliser Ansible pour configurer Vim

Éditeur VIM

Activer la coloration syntaxique dans Vim