1126 votes

Quel est votre raccourci le plus productif avec Vim ?

J'ai entendu beaucoup de choses sur Vim les avantages et les inconvénients. Il semble vraiment que vous devriez (en tant que développeur) être plus rapide avec Vim qu'avec n'importe quel autre éditeur. J'utilise Vim pour faire quelques trucs de base et je suis au mieux 10 fois plus rapide que les autres éditeurs. moins productif avec Vim.

Les deux seules choses dont vous devriez vous préoccuper lorsque vous parlez de vitesse (vous ne vous en souciez peut-être pas assez, mais vous devriez le faire) sont les suivantes :

  1. Utiliser alternativement la main gauche et la main droite est la le plus rapide manière d'utiliser le clavier.
  2. Ne jamais toucher la souris est la deuxième moyen d'être le plus rapide possible. Il faut des siècles pour que vous bougiez votre main, attraper la souris, la déplacer, et la ramener et la ramener au clavier (et vous devez souvent souvent regarder le clavier pour s'assurer que vous que vous avez bien ramené votre main au bon endroit)

Voici deux exemples qui montrent pourquoi je suis beaucoup moins productif avec Vim.

Copier/couper/coller. Je le fais tout le temps. Avec tous les éditeurs contemporains que vous pressez Shift avec la main gauche, et vous déplacez le curseur avec la main droite pour sélectionner le texte. Ensuite, Ctrl + C copies, vous déplacez le curseur et Ctrl + V des pâtes.

Avec Vim, c'est horrible :

  • yy pour copier une ligne (vous ne voulez presque jamais la ligne entière !)
  • [number xx]yy pour copier xx dans le tampon. Mais vous ne savez jamais exactement si vous avez sélectionné ce que vous vouliez. Je dois souvent faire [number xx]dd puis u à défaire !

Un autre exemple ? Recherche et remplacement.

  • Sur PSPad : Ctrl + f puis tapez ce que vous voulez rechercher, puis appuyez sur Enter .
  • Dans Vim : / puis tapez ce que vous voulez rechercher, puis s'il y a des caractères spéciaux, mettez \ avant chaque caractère spécial, puis appuyez sur Enter .

Et tout ce qui concerne Vim est comme ça : on dirait que je ne sais pas comment m'y prendre.

NB : J'ai déjà lu le manuel de Vim tricher feuille :)

Ma question est la suivante :

Quelle est la façon dont vous utilisez Vim qui vous rend plus productif qu'avec un éditeur contemporain ?

34voto

agfe2 Points 98

Session

a. sauvegarder la session

:mks nom de la session

b. forcer la sauvegarde de la session

:mks ! nom de la session

c. session de chargement

gvim ou vim -S nom de la session


Addition et soustraction

a. Addition et soustraction

CTRL-A ;Ajoute [nombre] au chiffre ou au caractère alphabétique se trouvant à ou après le curseur. {pas dans Vi

CTRL-X ;Soustraire [nombre] du caractère numérique ou alphabétique qui se trouve ou alphabétique situé au niveau du curseur ou après. {pas dans Vi}

b. Dé-mappage des touches de la fenêtre

Dans la fenêtre, Ctrl-A déjà mappé pour la sélection du fichier entier, vous avez besoin de démapper dans le fichier rc. marquer la partie du mappage de CTRL-A de mswin.vim comme commentaire ou ajoutez votre fichier rc avec unmap

c. Avec Macro

La commande CTRL-A est très utile dans une macro. Exemple : Suivez les étapes suivantes pour créer une liste numérotée.

  1. Créez la première entrée de la liste, assurez-vous qu'elle commence par un numéro.
  2. qa - Début de l'enregistrement dans le tampon 'a'.
  3. Y - arracher l'entrée
  4. p - mettre une copie de l'entrée en dessous de la première
  5. CTRL-A - incrémenter le nombre
  6. q - arrêter l'enregistrement
  7. @a - répétez les fois où vous tirez, mettez et incrémentez.

32voto

Dave Kirby Points 12310

La semaine dernière au travail, notre projet a hérité de beaucoup de code Python d'un autre projet. Malheureusement, le code ne s'intégrait pas dans notre architecture existante - tout était fait avec des variables et des fonctions globales, ce qui ne fonctionnerait pas dans un environnement multithread.

Nous avions ~80 fichiers qui devaient être retravaillés pour être orientés objet - toutes les fonctions déplacées dans des classes, les paramètres changés, les déclarations d'importation ajoutées, etc. Nous avions une liste d'environ 20 types de corrections à apporter à chaque fichier. Nous avions une liste d'environ 20 types de corrections à apporter à chaque fichier. J'estime qu'en le faisant à la main, une personne pouvait en faire 2 à 4 par jour.

J'ai donc fait la première à la main, puis j'ai écrit un script dans vim pour automatiser les changements. La plus grande partie était une liste de commandes vim, par ex.

" delete an un-needed function "
g/someFunction(/ d

" add wibble parameter to function foo "
%s/foo(/foo( wibble,/

" convert all function calls bar(thing) into method calls thing.bar() "
g/bar(/ normal nmaf(ldi(`aPa.

Le dernier mérite un peu d'explication :

g/bar(/  executes the following command on every line that contains "bar("
normal   execute the following text as if it was typed in in normal mode
n        goes to the next match of "bar(" (since the :g command leaves the cursor position at the start of the line)
ma       saves the cursor position in mark a
f(       moves forward to the next opening bracket
l        moves right one character, so the cursor is now inside the brackets
di(      delete all the text inside the brackets
`a       go back to the position saved as mark a (i.e. the first character of "bar")
P        paste the deleted text before the current cursor position
a.       go into insert mode and add a "." 

Pour quelques transformations plus complexes, comme la génération de toutes les déclarations d'importation, j'ai incorporé du python dans le script de vim.

Après quelques heures de travail, j'avais un script qui fera au moins 95% de la conversion. J'ouvre simplement un fichier dans vim puis je lance :source fixit.vim et le fichier est transformé en un clin d'œil.

Nous avons encore le travail de modifier les 5% restants qui ne valaient pas la peine d'être automatisés et de tester les résultats, mais en passant une journée à écrire ce script, j'estime que nous avons économisé des semaines de travail.

Bien sûr, il aurait été possible d'automatiser cela avec un langage de script comme Python ou Ruby, mais cela aurait pris beaucoup plus de temps à écrire et aurait été moins flexible - le dernier exemple aurait été difficile puisque la regex seule ne serait pas capable de gérer les parenthèses imbriquées, par exemple pour convertir bar(foo(xxx)) a foo(xxx).bar() . Vim était parfait pour cette tâche.

28voto

soulmerge Points 37314

Utilisez l'explorateur de fichiers intégré ! La commande est :Explore et il vous permet de naviguer dans votre code source très très rapidement. J'ai ces mappings dans mon .vimrc :

map <silent> <F8>   :Explore<CR>
map <silent> <S-F8> :sp +Explore<CR>

L'explorateur vous permet également de modifier des fichiers. Je vais poster certaines de mes touches préférées, en appuyant sur <F1> vous donnera la liste complète :

  • - : Les plus utiles : Passage au répertoire supérieur ( cd .. )
  • mf : Marquer un fichier
  • D : Supprimer les fichiers marqués ou le fichier sur lequel se trouve le curseur, si rien n'est marqué.
  • R : Renommer le fichier sur lequel se trouve le curseur.
  • d : Créer un nouveau répertoire dans le répertoire courant
  • % : Créer un nouveau fichier dans le répertoire courant

25voto

Jeff Dege Points 2143

Je suis membre de l'Association américaine des cryptogrammes. Le magazine bimestriel comprend plus de 100 cryptogrammes de différentes sortes. Environ 15 d'entre eux sont des "cryptarithmes" - divers types de problèmes arithmétiques avec des lettres remplaçant les chiffres. Deux ou trois d'entre eux sont des sudokus, mais avec des lettres à la place des chiffres. Lorsque la grille est terminée, les neuf lettres distinctes forment un ou plusieurs mots, sur une ligne, une diagonale, une spirale, etc.

Plutôt que de travailler au crayon ou de taper les problèmes à la main, je télécharge les problèmes depuis la zone réservée aux membres de leur site Web.

Lorsque je travaille avec ces sudokus, j'utilise vi, tout simplement parce que j'utilise des fonctionnalités de vi que peu d'autres éditeurs possèdent. Il s'agit principalement de convertir la grille de lettres en une grille de chiffres, parce que je trouve cela plus facile à résoudre, puis de réintégrer la grille de chiffres complétée dans la grille de lettres pour trouver le ou les mots de la solution.

Le problème se présente sous la forme de neuf groupes de neuf lettres, avec - s représentant les blancs, écrits sur deux lignes. La première étape consiste à les formater en neuf lignes de neuf caractères chacune. Il n'y a rien de particulier à cela, il suffit d'insérer huit sauts de ligne aux endroits appropriés.

Le résultat ressemblera à ceci :

T-O-----C
-E-----S-
--AT--N-L
---NASO--
---E-T---
--SPCL---
E-T--OS--
-A-----P-
S-----C-T

La première étape de la conversion en chiffres consiste donc à dresser une liste des lettres distinctes. D'abord, je fais une copie du bloc. Je positionne le curseur en haut du bloc, puis je tape :y}}p . : me met en mode de commandement, y retire l'ordre de mouvement suivant. Puisque } est un déplacement vers la fin du paragraphe suivant, y} arrache le paragraphe. } puis déplace le curseur à la fin du paragraphe, et p colle ce que nous avions arraché juste après le curseur. Donc y}}p crée une copie du paragraphe suivant, et se retrouve avec le curseur entre les deux copies.

Ensuite, je dois transformer l'une de ces copies en une liste de lettres distinctes. Cette commande est un peu plus complexe :

:!}tr -cd A-Z | sed 's/\(.\)/\1\n/g' | sort -u | tr -d '\n'

: me met à nouveau en mode commande. ! indique que le contenu du prochain yank doit être acheminé par une ligne de commande. } supprime le paragraphe suivant, et la ligne de commande utilise alors l'option tr pour supprimer tout sauf les lettres majuscules, la commande sed pour imprimer chaque lettre sur une seule ligne, et la commande sort pour trier ces lignes, supprimer les doublons, puis tr supprime les retours à la ligne, laissant les neuf lettres distinctes sur une seule ligne, remplaçant les neuf lignes qui composaient le paragraphe à l'origine. Dans ce cas, les lettres sont : ACELNOPST .

L'étape suivante consiste à faire une autre copie de la grille. Et ensuite d'utiliser les lettres que je viens d'identifier pour remplacer chacune de ces lettres par un chiffre de 1 à 9. C'est simple : :!}tr ACELNOPST 0-9 . Le résultat est :

8-5-----1
-2-----7-
--08--4-3
---4075--
---2-8---
--7613---
2-8--57--
-0-----6-
7-----1-8

Vous pouvez ensuite le résoudre de la manière habituelle ou le saisir dans le logiciel de résolution de sudoku de votre choix. La solution obtenue peut ensuite être reconvertie en lettres à l'aide de la fonction :!}tr 1-9 ACELNOPST .

Il y a une puissance dans le vi qui n'est égalée que par très peu d'autres. Le plus gros problème est que seuls quelques livres de tutoriels vi, sites web, fichiers d'aide, etc. font plus qu'effleurer la surface de ce qui est possible.

23voto

jqno Points 7831

Manipulations de texte en masse !

Soit par le biais de macros :

  • Commencez par l'enregistrement : qq
  • Faire des choses
  • Arrêtez l'enregistrement : q
  • Répète : @q (la première fois), @@ après cela.
  • Répétez 20 fois : 20@@

Ou par le biais d'expressions régulières :

  • Remplacer des trucs : :%s/[fo]+/bar/g

(Mais attention : si vous faites cette dernière, vous aurez 2 problèmes :).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X