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?
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.
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
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.
gi passe en mode insertion en plaçant le curseur au même endroit que précédemment.
: q!
J'aurais aimé savoir cela avant de commencer vi pour la première fois
^ 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.
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.
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.
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.
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.
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.
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
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.)
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.: 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é.
gv démarre le mode visuel et sélectionne automatiquement ce que vous aviez précédemment sélectionné.
ça me fait toujours plaisir
:help 42
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.
Pas beaucoup, vraiment. Vous avez besoin d'un Makefile
dans le répertoire en cours.
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.
De retour dans vim, vous disposez des commandes suivantes:
:cl
répertorie les erreurs, avertissements et autres messages.:cc
affiche le message d'erreur/avertissement actuel en bas de l'écran et passe à la ligne incriminée dans votre code.:cc n
saute à la n
th message.:cn
passe au message suivant.:cp
passe au message précédent.Il y en a plus; si cela vous intéresse, tapez :help :cc
depuis vim.
^ 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
Appuyez sur %
lorsque le curseur se trouve sur une citation, une parenthèse, un crochet ou une accolade pour trouver sa correspondance.
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).
^r^w
pour coller le mot sous le curseur en mode commande. Vraiment utile lorsque vous utilisez les commandes grep ou replace
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.
Taper un numéro de ligne suivi de gg
vous mènera à cette ligne.
^ y va copier le caractère au-dessus du curseur.
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.
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.
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
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.
: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.
:% 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.
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.
:x #(Save and Quit a File)
Identique à: wq ou ZZ
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.
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.
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
: wall et: wall pour fermer tous les écrans divisés
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 signetsa
etb
.,$
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 $
.
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.
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.
Commentez une série de lignes:
Commencez par définir un signet au début de la plage: ma
Va la dernière ligne dans la gamme
:'a,.s/^/# /
En supposant que # soit le caractère de votre commentaire.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.
:Te[xplore]
Tab & Explorer (fait un nouveau tab avant de générer la fenêtre du navigateur)
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:
Cela ne fonctionnera que s'il existe une commande 'sort' sur le système sous-jacent.
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.
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.