Question Quels sont les coins sombres de Vim dont ta mère ne t'a jamais parlé? [fermé]


Il y a une pléthore de questions où les gens parlent de trucs communs, notamment "Vim + ctags trucs et astuces".

Cependant, je ne me réfère pas aux raccourcis couramment utilisés que quelqu'un de nouveau à Vim trouverait cool. Je parle d'un utilisateur chevronné d'Unix (que ce soit un développeur, un administrateur, les deux, etc.), qui pense savoir quelque chose que 99% d'entre nous n'ont jamais entendu ou rêvé. Quelque chose qui non seulement facilite leur travail, mais qui est aussi COOL et hackish. Après tout, Vim réside dans le système d'exploitation le plus sombre du monde, il devrait donc avoir des subtilités que seuls quelques privilégiés connaissent et veulent partager avec nous.


756


origine


Réponses:


Peut-être pas un que 99% des utilisateurs de Vim ne connaissent pas, mais c'est quelque chose que j'utilise tous les jours et que tout poweruser Linux + Vim doit savoir.

Commande de base, mais extrêmement utile.

:w !sudo tee %

J'oublie souvent de sudo avant d'éditer un fichier sur lequel je n'ai pas d'autorisation d'écriture. Quand je viens d'enregistrer ce fichier et d'obtenir une erreur d'autorisation, je viens de lancer cette commande vim afin de sauvegarder le fichier sans avoir besoin de le sauvegarder dans un fichier temporaire, puis de le recopier.

Vous devez évidemment être sur un système avec sudo installé et avoir des droits sudo.


746



Quelque chose que je viens de découvrir récemment que j'ai trouvé très cool:

:earlier 15m

Rétablit le document à 15 minutes plus tôt. Peut prendre divers arguments pour le temps que vous voulez annuler, et dépend des sous-niveaux. Peut être inversé avec la commande opposée :later


581



:! [command] exécute une commande externe pendant que vous êtes dans Vim.

Mais ajoutez un point après les deux points, :.! [command], et il va vider la sortie de la commande dans votre fenêtre actuelle. C'est : . ! 

Par exemple:

:.! ls

Je l'utilise beaucoup pour des choses comme l'ajout de la date actuelle dans un document que je suis en train de taper:

:.! date

385



Pas exactement obscur, mais il y a plusieurs commandes "delete in" qui sont extrêmement utiles, comme ..

  • diw pour supprimer le mot actuel
  • di( supprimer dans les parens actuels
  • di" pour supprimer le texte entre les citations

D'autres peuvent être trouvés sur :help text-objects


299



de Effacez tout jusqu'à la fin du mot en appuyant sur. au désir de votre coeur.

ci (xyz [Esc] - C'est un drôle. Ici, le 'i' ne signifie pas le mode d'insertion. Au lieu de cela, cela signifie à l'intérieur de la parenthèse. Cette séquence coupe le texte entre parenthèses et le remplace par "xyz". Il fonctionne également à l'intérieur des parenthèses carrées et de chiffres - faites simplement ci [ou ci {en conséquence. Naturellement, vous pouvez faire di (si vous voulez juste supprimer tout le texte sans rien taper. a au lieu de i si vous souhaitez également supprimer les parenthèses et pas seulement le texte qu'elles contiennent.

ci " - coupe le texte dans les citations actuelles

ciw - coupe le mot courant. Cela fonctionne comme le précédent sauf que ( est remplacé par w.

C - couper le reste de la ligne et passer en mode insertion.

ZZ - sauvegarder et fermer le fichier actuel (WAY plus rapidement que Ctrl-F4 pour fermer l'onglet en cours!)

ddp - déplacer la ligne actuelle d'une ligne vers le bas

xp - déplacer le caractère actuel d'une position vers la droite

U - majuscule, donc viwU apercu le mot

~ - cas de commutateurs, donc viw~ inversera l'enveloppe du mot entier

Ctrl + u / Ctrl + d faites défiler la page d'un demi-écran vers le haut ou vers le bas. Cela semble être plus utile que la pagination en plein écran habituelle, car il est plus facile de voir comment les deux écrans se rapportent. Pour ceux qui veulent toujours faire défiler tout l'écran à la fois, Ctrl + f pour Forward et Ctrl + b pour Backward. Ctrl + Y et Ctrl + E font défiler vers le bas ou le haut d'une ligne à la fois.

La commande folle mais très utile est zz - il fait défiler l'écran pour faire apparaître cette ligne au milieu. C'est excellent pour mettre le code sur lequel vous travaillez au centre de votre attention. Les commandes de frère et de sœur - zt et zb - font de cette ligne la ligne du haut ou du bas sur l'écran, ce qui n'est pas aussi utile.

% trouve et saute à la parenthèse correspondante.

de - supprimer du curseur à la fin du mot (vous pouvez également faire dE supprimer jusqu'à l'espace suivant)

bde - supprimer le mot courant, de gauche à droite délimiteur

df [espace] - supprimer jusqu'à et y compris l'espace suivant

dt. - supprimer jusqu'au point suivant

dd - supprimer toute cette ligne

ye (ou ye) - extrait le texte d'ici à la fin du mot

ce - coupe à travers la fin du mot

au revoir - copie le mot actuel (je me demande ce que "salut" fait!)

yy - copie la ligne actuelle

cc - coupe la ligne actuelle, vous pouvez aussi faire S au lieu. Il y a aussi un bouchon inférieur s qui coupe le caractère actuel et passe en mode insertion.

viwy ou viwc. Yank ou changer le mot courant. Frappé w plusieurs fois pour continuer à sélectionner chaque mot suivant, utilisez b reculer

vi { - sélectionner tout le texte entre crochets. va {- sélectionner tout le texte y compris {} s

VIP - mettre en évidence tout à l'intérieur du () s et le remplacer par le texte collé

b et e bougent le curseur mot par mot, de la même manière que Ctrl + Flèches. La définition de mot est un peu différente, car plusieurs suppresseurs consécutifs sont traités comme un seul mot. Si vous commencez au milieu d'un mot, appuyer sur b vous amènera toujours au début du mot courant, et chaque b consécutif passera au début du mot suivant. De même, et facile à retenir, e amène le curseur à la fin du courant et de chaque mot suivant.

semblable à b/e, Capitale B et E déplacez le curseur mot par mot en utilisant uniquement des espaces blancs comme délimiteurs.

capitale D (respirer profondément) Supprime le reste de la ligne à la droite du curseur, comme Shift + End / Del dans les éditeurs normaux (notez 2 pressions sur les touches - Shift + D - au lieu de 3)


225



Un que je trouve rarement dans la plupart des tutoriels Vim, mais il est INCROYABLEMENT utile (au moins pour moi), est le

g; and g,

déplacer (vers l'avant, vers l'arrière) à travers la liste des changements.

Laissez-moi vous montrer comment je l'utilise. Parfois j'ai besoin de copier et coller un morceau de code ou une chaîne, disons un code de couleur hexadécimal dans un fichier CSS, donc je cherche, saute (je ne me soucie pas de la correspondance), je le copie et je recule (g; Je modifiais le code pour finalement le coller. Pas besoin de créer des marques. Plus simple.

Juste mes 2cents.


193



:%!xxd

Faites vim dans un éditeur hexadécimal.

:%!xxd -r

Revenir.

Attention: Si vous ne modifiez pas avec binary (-b), vous risquez d'endommager le fichier. - Josh Lee dans les commentaires.


182



gv

Resélectionne la dernière sélection visuelle.


116



Parfois, un paramètre de votre fichier .vimrc sera remplacé par un plugin ou une autocommande. Pour déboguer ceci, un truc utile consiste à utiliser la commande: verbose en conjonction avec: set. Par exemple, pour déterminer où cindent a été activé / désactivé:

:verbose set cindent?

Cela produira quelque chose comme:

cindent
    Last set from /usr/share/vim/vim71/indent/c.vim

Cela fonctionne également avec des cartes et des faits saillants. (Merci à joeytwiddle de le signaler.) Par exemple:

:verbose nmap U
n  U             <C-R>
        Last set from ~/.vimrc

:verbose highlight Normal
Normal         xxx guifg=#dddddd guibg=#111111 font=Inconsolata Medium 14
        Last set from ~/src/vim-holodark/colors/holodark.vim

113



Je ne sais pas si cela compte comme un coin sombre du tout, mais je viens juste de l'apprendre ...

:g/match/y A

va tirer (copier) toutes les lignes contenant "match" dans le "a/@a registre. (La capitalisation comme A rend vim ajouter des vidages au lieu de remplacer le contenu du registre précédent.) Je l'ai beaucoup utilisé récemment lors de la création de feuilles de style Internet Explorer.


97



:%TOhtml

Crée un rendu HTML du fichier en cours.


92