web-dev-qa-db-fra.com

Commandes Vim simples que vous souhaiteriez connaître plus tôt

J'apprends constamment de nouvelles commandes dans Vim, mais je suis sûr que tout le monde apprend quelque chose de nouveau de temps en temps. J'ai récemment appris à ce sujet:

zz, zt, zb - positionne le curseur au milieu, en haut ou en bas de l'écran

Quelles sont les autres commandes utiles ou élégantes que vous auriez aimé apprendre il y a longtemps?

374
Lin

J'aurais vraiment aimé savoir que vous pouvez utiliser CtrlC au lieu de Esc pour sortir du mode insertion. Cela a été un réel gain de productivité pour moi.

310
yalestar

La plus récente astuce "wow" que j'ai apprise est une méthode de recherche et de remplacement compliquée. Assez souvent dans le passé, j'ai eu une expression rationnelle très compliquée pour effectuer des substitutions et cela n'a pas fonctionné. Il y a un meilleur moyen:

:set incsearch             " I have this in .vimrc
/my complicated regexp     " Highlighted as you enter characters
:%s//replace with this/    " You don't have to type it again

Le "truc" ici (faute d’un meilleur mot) est la façon dont vous pouvez utiliser la recherche pour créer l’expression rationnelle (et "incsearch" le surligne lorsque vous entrez des caractères), puis utilisez un motif vide dans la substitution: Le motif par défaut est le dernier motif de recherche.

Exemple:

/blue\(\d\+\)
:%s//red\1/

Équivalent à:

:%s/blue\(\d\+\)/red\1/

Voir:

:help 'incsearch'
:help :substitute
194
DrAl

J'ai créé cette référence de ma commande la plus utilisée pour un de mes amis. J'espère que les gens trouveront quelque chose d'utile:

select                                   v                                     
select row(s)                            SHIFT + v                             
select blocks (columns)                  CTRL  + v                             
indent selected text                     >                                     
unindent selected text                   <                                     
list buffers                             :ls                                   
open buffer                              :bN (N = buffer number)               
print                                    :hardcopy                             
open a file                              :e /path/to/file.txt                  
                                         :e C:\Path\To\File.txt                
sort selected rows                       :sort                                 
search for Word under cursor             *                                     
open file under cursor                   gf                                    
  (absolute path or relative)                                                  
format selected code                     =                                     
select contents of entire file           ggVG                                  
convert selected text to uppercase       U                                     
convert selected text to lowercase       u                                     
invert case of selected text             ~                                     
convert tabs to spaces                   :retab                                
start recording a macro                  qX (X = key to assign macro to)       
stop recording a macro                   q                                       
playback macro                           @X (X = key macro was assigned to)    
replay previously played macro *         @@                                    
auto-complete a Word you are typing **   CTRL + n                              
bookmark current place in file           mX (X = key to assign bookmark to)    
jump to bookmark                         `X (X = key bookmark was assigned to  
                                             ` = back tick/tilde key)          
show all bookmarks                       :marks                                
delete a bookmark                        :delm X (X = key bookmark to delete)   
delete all bookmarks                     :delm!                                 
split screen horizontally                :split                                
split screen vertically                  :vsplit                               
navigating split screens                 CTRL + w + j = move down a screen     
                                         CTRL + w + k = move up a screen       
                                         CTRL + w + h = move left a screen     
                                         CTRL + w + l = move right a screen    
close all other split screens            :only                                 

*  - As with other commands in vi, you can playback a macro any number of times.
     The following command would playback the macro assigned to the key `w' 100
     times: 100@w

** - Vim uses words that exist in your current buffer and any other buffer you 
     may have open for auto-complete suggestions.
153
brian newman

gi passe en mode insertion en plaçant le curseur au même endroit que précédemment.

138
Cyber Oliveira
: q!

J'aurais aimé savoir cela avant de commencer vi pour la première fois

104
Michał Piaskowski

^ X-F termine l'utilisation des noms de fichiers du répertoire actuel. Plus besoin de copier/coller à partir du terminal ni de double vérification douloureuse.

^ X-P termine l'utilisation de mots dans le fichier actuel

: set scrollbind oblige un tampon à défiler aux côtés d'un autre. par exemple. divisez votre fenêtre en deux panneaux verticaux. Chargez un fichier dans chacun (peut-être différentes versions du même fichier). Faites :set scrollbind dans chacun. Désormais, lorsque vous faites défiler un élément , les deux volets défilent ensemble. Idéal pour comparer des fichiers.

55
Brian Agnew
  1. Ne pas appuyer sur échapper jamais. Voir cette réponse pour savoir pourquoi . Comme mentionné ci-dessus, ctrl-c est une meilleure alternative. Je suggère fortement de mapper votre clé majuscule pour échapper.

  2. Si vous modifiez un langage compatible avec ctags, utiliser un fichier de balises et: ta, ctrl-], etc. constitue un excellent moyen de parcourir le code, même entre plusieurs fichiers. En outre, l’achèvement de ctrl-n et ctrl-p à l’aide du fichier de balises est un excellent moyen de réduire le nombre de frappes au clavier.

  3. Si vous éditez une ligne qui est enveloppée parce qu'elle est plus large que votre tampon, vous pouvez vous déplacer vers le haut ou le bas à l'aide de gk et de gj.

  4. Essayez de vous concentrer sur l'utilisation efficace des commandes de mouvement avant d'apprendre de mauvaises habitudes. Des choses comme utiliser 'dt' ou 'd3w' au lieu d'appuyer x plusieurs fois. Fondamentalement, chaque fois que vous vous retrouvez à presser la même touche à plusieurs reprises, il existe probablement un moyen meilleur/plus rapide/plus concis pour accomplir la même chose.

47
anthony

Vous pouvez utiliser tout un ensemble de commandes pour modifier le texte entre crochets/parenthèses/guillemets/balises. C'est super utile d'éviter de devoir trouver le début et la fin du groupe. Essayez ci(, ci{, ci<, ci", ci', ct en fonction du type d'objet que vous souhaitez modifier. Et les variantes ca(, ca{, ... suppriment également les crochets/guillemets.

Facile à retenir: changer à l'intérieur d'une déclaration entre crochets/changer une déclaration entre crochets.

46
Peter

ZZ (fonctionne comme :wq)

A propos de la position du curseur. J'ai trouvé ce curseur qui reste toujours au milieu de l'écran est cool

set scrolloff=9999
43
maykeye

La clé astérisque * va rechercher le mot sous le curseur.

[+Tab vous mènera à la définition d’une fonction C qui se trouve sous votre curseur. (ne fonctionne pas toujours bien.)

42
smcameron

Voici quelques-uns de mes derniers ajouts à mon brainstore:

  • ^wi: Accédez à la balise sous le curseur en scindant la fenêtre.
  • cib/ciB: Modifiez le texte à l'intérieur du jeu actuel de parenthèses () ou d'accolades {}, respectivement.
  • :set listchars=tab:>-,trail:_ list: Afficher les tabulations/espaces de fin visuellement différents des autres espaces. Aide beaucoup avec le codage Python.
40
Walter

: Shell pour lancer une console Shell à partir de Vim. Utile lorsque, par exemple, vous souhaitez tester un script sans quitter Vim. Appuyez simplement sur ^ d lorsque vous avez terminé avec la console Shell, puis vous revenez à Vim et à votre fichier modifié.

34
peroumal1

gv démarre le mode visuel et sélectionne automatiquement ce que vous aviez précédemment sélectionné.

34
too much php

ça me fait toujours plaisir

:help 42
31
dogbane

vimcryption

vim -x nomfichier.txt

On vous demandera une phrase secrète, éditer et sauvegarder. Maintenant, chaque fois que vous ouvrirez à nouveau le fichier dans vi, vous devrez entrer le mot de passe pour le visualiser.

29
anteatersa

Construisez et déboguez votre code depuis vim!

Configuration

Pas beaucoup, vraiment. Vous avez besoin d'un Makefile dans le répertoire en cours.

Compiler

Pendant que vous êtes dans vim, tapez :make pour appeler un shell, générez votre programme. Ne vous inquiétez pas lorsque la sortie défile; appuyez simplement sur _[Enter]_ lorsque vous avez terminé pour revenir à vim.

La magie

De retour dans vim, vous disposez des commandes suivantes:

  1. :cl répertorie les erreurs, avertissements et autres messages.
  2. :cc affiche le message d'erreur/avertissement actuel en bas de l'écran et passe à la ligne incriminée dans votre code.
  3. :cc n saute à la nth message.
  4. :cn passe au message suivant.
  5. :cp passe au message précédent.

Il y en a plus; si cela vous intéresse, tapez :help :cc depuis vim.

28
Adam Liss

^ P et ^ N

Complétez le texte précédent (^ P) ou suivant (^ N).

^ O et ^ I

Aller à l'emplacement précédent (^ O - "O" pour l'ancien) ou au prochain (^ I - "I" situé tout près de "O"). Lorsque vous effectuez des recherches, modifiez des fichiers, etc., vous pouvez naviguer dans ces "sauts" en avant et en arrière.

marques

Appuyez sur ma (m- marque, a - nom de la marque). Plus tard, pour revenir au type de position `a

25
dimba

Appuyez sur % lorsque le curseur se trouve sur une citation, une parenthèse, un crochet ou une accolade pour trouver sa correspondance.

24
Adam Liss

Jusqu'au [caractère] (t). Utile pour toute commande qui accepte une plage. Mon favori est ct; ou ct) qui supprime tout jusqu'à la fin du point-virgule/parenthèse, puis vous met en mode insertion.

De plus, G et gg sont utiles (Aller au bas et au haut respectivement).

21
MighMoS

^r^w pour coller le mot sous le curseur en mode commande. Vraiment utile lorsque vous utilisez les commandes grep ou replace

20
Canopus

J'aurais aimé connaître les bases du mode bloc visuel plus tôt. Même si vous n'utilisez pas VIM pour autre chose, ouvrir un fichier dans VIM peut vous faire gagner beaucoup de temps, uniquement pour certaines opérations de blocage. Je suis presque sûr d'avoir perdu une tonne de temps à faire ce genre de chose manuellement.

Des exemples que j'ai trouvés particulièrement utiles lorsque, par exemple, refactorise de manière cohérente des listes de noms de constantes symboliques:

Entrer en mode bloc visuel (Ctrl-Q pour moi sur Windows au lieu de Ctrl-V)

Déplacez le curseur pour mettre en surbrillance le bloc souhaité.

Ensuite, I whatever text et appuyez sur Esc avoir le texte inséré devant le bloc sur chaque ligne.

Utilisez A au lieu de I pour insérer le texte après le bloc sur chaque ligne.

En outre, le simple fait de basculer le cas d'une sélection visuelle avec ~ peut vous faire gagner beaucoup de temps.

Et simplement supprimer aussi des colonnes avec d bien sûr.

17
Anon

Taper un numéro de ligne suivi de gg vous mènera à cette ligne.

17
xastor

^ y va copier le caractère au-dessus du curseur.

15
innaM

q <lettre> - enregistre une macro.

et

@ <same-letter> - le reproduit.

Ce sont de loin les commandes les plus utiles dans vim car vous pouvez faire en sorte que l'ordinateur fasse beaucoup de travail pour vous et vous n'avez même pas besoin d'écrire un programme ou quoi que ce soit.

14
leeand00

qx va commencer à enregistrer des frappes. Vous pouvez faire à peu près n'importe quelle tâche d'édition et Vim s'en souvient. Appuyez à nouveau sur q lorsque vous avez terminé, puis appuyez sur @ x pour rejouer vos frappes au clavier. C'est parfait pour les éditions répétitives qui sont trop complexes pour écrire un mappage. Vous pouvez avoir plusieurs enregistrements en utilisant un caractère autre que x.

12
too much php

Ouverture de plusieurs fichiers à l'aide d'onglets:

:tabe filepath

naviguer entre les fichiers ouverts

gt and gT or :tabn and :tabp

Enregistrez la session ouverte pour pouvoir revenir à votre liste de fichiers ouverts ultérieurement:

:mksession session_file_name.vim

Ouvrir une session créée

vim -S session_file_name.vim

ferme tous les fichiers à la fois

:qa

Une autre commande que j'ai apprise récemment:

autocmd

Il vous permet d'exécuter une commande sur un événement afin de pouvoir, par exemple, exécuter la commande make lorsque vous enregistrez un fichier en utilisant quelque chose comme:

:autocmd BufWritePost *.cpp :make
12
Mansuro

Je dois dire que l’un de mes favoris est de placer la fenêtre d’aide dans un nouvel onglet:

:tab help <help_topic>

Cela ouvre de l’aide dans un nouvel onglet et, en tant que personne qui aime les onglets de vim, c’est ridiculement utile.

11
Robert Massaioli

:b [any portion of a buffer name] pour changer de tampon. Donc, si vous avez deux tampons "somefile1.txt" et "someotherfile2.txt", vous pouvez passer à la seconde avec simplement ":b 2.t<enter>". Il prend également en charge la complétion par un onglet, bien que ce ne soit pas obligatoire.

En parlant d’achèvement de la tabulation, le réglage :set wildmode=full wildmenu est également très utile. Il permet la complétion complète des onglets en mode commande, ainsi qu'un menu très utile dans le style ncurses contenant toutes les correspondances possibles lors de son utilisation.

9
Michael

:% s,/search,/replace,

Vous pouvez utiliser des caractères autres que "/" pour séparer les modèles de substitution. De cette façon, vous n’avez pas à échapper aux barres obliques des chemins de fichiers.

8
hfs

cw

Changer le mot - supprime le mot sous le curseur et vous met en mode insertion pour en saisir un nouveau. Bien sûr, cela fonctionne avec d'autres touches de mouvement, vous pouvez donc faire des choses comme c $ pour passer à la fin de la ligne.

f + caractère

Recherche l'occurrence suivante du caractère sur la ligne en cours. Donc, vous pouvez faire vft pour sélectionner tout le texte jusqu'au prochain "t" sur la ligne en cours. C'est une autre touche de mouvement, donc cela fonctionne aussi avec d'autres commandes.

7
Adam Neal
:x #(Save and Quit a File)

Identique à: wq ou ZZ

7
jmohr

interface à onglets
Mis à part Windows fractionné, vous pouvez également avoir Windows en onglets. En mode d'échappement, tapez: tabnew. Vous pouvez ouvrir plusieurs onglets comme celui-ci. Pour naviguer entre les onglets, tapez tabn. Cela passera à l'onglet suivant. Pour passer à une fenêtre à onglets, tapez: tabn2 pour déplacer le deuxième onglet, etc.

Pour fermer un onglet, tapez: tabc ou: tabclose ou simplement: close.

Si vous êtes dans un émulateur de terminal (essentiellement un terminal dans l'interface graphique), vous pouvez essayer: set mouse = a. Une fois que c'est fait, vous pouvez cliquer dans l'éditeur avec votre souris. Et cela vous aidera également à naviguer entre les onglets en cliquant et à fermer en cliquant sur le bouton de fermeture situé à droite.

Alignez votre code - Fichier complet
Tapez simplement G = gg en mode d'échappement.

pliez votre code
Disons que votre fonction est terminée. Vous souhaitez minimiser (ou plier) cette partie du code afin de libérer de l'espace et de réduire l'encombrement. Il suffit de sélectionner le code. Ensuite, tapez: fold.

Cela pliera le code. Si vous voulez développer le code, allez-y simplement et tapez zo. Pour replier, tapez zc.

7
Nikhil Baliga

Je suis surpris que personne n'ait mentionné le soutien de Vim. CTRL-W s est quelque chose que j'utilise presque chaque fois que j'ouvre vim.

6
Kris Jenkins

Je crée souvent des fonctions pour les tâches d'édition et les stocke dans mon fichier .vimrc pour pouvoir les retrouver. Par exemple, la lecture de piles d’appels .Net converties en une seule ligne:

function! FixCallStacks()
:%s;\[NLN\];\r;g
:%s;\[TAB\];\t;g
endfunction
5
Igor Dvorkin

: wall et: wall pour fermer tous les écrans divisés

5
Vijay Dev

Prenant la suggestion de xcramps un peu plus loin, je ne peux pas vous dire combien de fois j'ai utilisé:

:%!sort

pour trier une liste d'éléments dans un fichier.

Détails:

: plage ! commande

exécutera une commande Shell sur la plage de lignes spécifiée. Une plage est généralement spécifiée comme suit: start , end

Exemples:
1,3 spécifie les 3 premières lignes
'a,'b sélectionne le texte entre les signets a et b
.,$ sélectionne le document entier (. = première ligne; $ = dernière ligne)
% est un raccourci pour .,$ et permet également de sélectionner l'ensemble du document.

N'hésitez pas à mélanger et faire correspondre les chiffres, les signets, . et $.

5
Adam Liss
ma
move cursor down
:'a,.!program

Cela prendra tout le texte entre l'endroit où vous avez défini le repère (ma) sur la ligne actuelle (.), L'exécutez dans le programme et remplacez le contenu de la région marquée par les résultats. Vous pouvez même l'utiliser pour voir le contenu d'un répertoire (par exemple) en créant une ligne vierge, puis avec le curseur sur cette ligne,

:.!ls

Oh, et vous pouvez définir des marques comme celle-ci pour a-z (c’est-à-dire ma), et

'a

vous mènera à la position que vous avez marquée "a".

/ cherche en avant, et? répète la recherche en arrière sans avoir à réapprovisionner le modèle de recherche.

Trucs Groovy. vi est très sous-estimé. Une fois que vous avez compris, vous ne voudrez plus jamais utiliser les éditeurs fournis par IDE.

4
xcramps

Je viens de découvrir celui-ci en consultant l'aide de vim:

:help index

Ceci vous mène à une seule ( page consultable! ) avec toutes les commandes pour tous les modes.

Ainsi, si vous savez que la commande que vous essayez de mémoriser/apprendre commence avec ou implique une certaine frappe, vous pouvez la rechercher et parcourir toutes les possibilités. Ou vous pouvez simplement parcourir le mode qui vous intéresse pour voir/apprendre les possibilités de montage.

Je ne peux pas compter le nombre de fois que je me suis contenté de :help CTRL-R ou de quoi que ce soit et que je n'ai eu que la première chose à faire, qui n'est bien sûr jamais celle que vous voulez. C'est beaucoup mieux que: helpgrep IMO.

Éditer

Et dans le .vimrc ça va:

nnoremap <silent> <F1> :help normal-index<CR>
inoremap <silent> <F1> <C-O>:help insert-index<CR>

:help vous permet toujours d'accéder à la page F1 par défaut.

4
David Pope

Commentez une série de lignes:

  1. Commencez par définir un signet au début de la plage: ma

  2. Va la dernière ligne dans la gamme

  3. La commande est :'a,.s/^/# / En supposant que # soit le caractère de votre commentaire.
4
alps123

Utilisez vim-bindings sur la ligne de commande dans bash:

    set -o vi

Dans les autres programmes utilisant readline, appuyez sur control-alt-j pour passer des liaisons emacs à vim.

3
Michael Fox
:Te[xplore]

Tab & Explorer (fait un nouveau tab avant de générer la fenêtre du navigateur)

3
user176776

Dans notre magasin de logiciels, les déclarations de variables doivent être triées. Dans le langage que nous utilisons, plusieurs variables peuvent apparaître sur la même ligne.

new var1,var2,var3,etc

Il est très pénible d’essayer de classer chaque variable visuellement. Le bloc surlignant et la commande de tri dans Vim sont mes amis ici:

  1. Déplacez le curseur sur la première variable à trier.
  2. Émettez la commande v pour passer en mode visuel.
  3. Déplacez le curseur à la fin de la dernière variable à trier dans mon cas, entrez $ pour aller à la fin de la ligne).
  4. Exécutez la commande! Sort pour indiquer à Vim de trier le texte en surbrillance.

Cela ne fonctionnera que s'il existe une commande 'sort' sur le système sous-jacent.

2
igotmumps

Je sais que ce n'est pas complètement vim. Mais je trouve l’intégration de cscope vraiment bonne et elle m’aide beaucoup lors du piratage du noyau Linux.

Ctrl-\g pour atteindre la définition d'une fonction Ctrl-\s pour rechercher toutes les utilisations d'une fonction/macro/variable.

1
LB40

set confirm vous permet de quitter vim normalement avec : q. Vous n'avez pas besoin d'utiliser ZZ ou d'autres mécanismes lourds qui enregistrent ou ignorent aveuglément toutes les modifications.

0
too much php