Maison  >  Article  >  Tutoriel système  >  Explorez les compétences opérationnelles avancées de VIM

Explorez les compétences opérationnelles avancées de VIM

WBOY
WBOYavant
2024-01-05 10:52:02856parcourir
Présentation Cet article rassemble quelques opérations VIM simples qui ne peuvent pas être effectuées par d'autres éditeurs de texte ordinaires ou qui sont effectuées très lentement. Grâce à l'introduction de cet article, les débutants peuvent renforcer leur détermination et leur confiance dans l'apprentissage de VIM. Si vous disposez de bonnes techniques simples et faciles à démontrer, veuillez laisser un message. De plus, sauf indication contraire, les clés mentionnées dans cet article sont sensibles à la casse. Par exemple, lorsque l'article dit « appuyez sur G », la touche sur laquelle vous appuyez doit être « Maj + G ».

Explorez les compétences opérationnelles avancées de VIM

1.Préparation

Tout d’abord, nous ouvrons VIM et saisissons un morceau de texte pour la démonstration d’aujourd’hui :

this is a test
2. Rechercher et remplacer

Appuyez plusieurs fois sur ESC pour passer en mode Normal et entrez la commande suivante : :%s/ /r/g/ . L'effet obtenu après avoir appuyé sur Entrée est le suivant :

this
is
a
test

Explication : La fonction de cette commande est de remplacer tous les espaces de l'article par des retours chariot. Presque tous les éditeurs prennent en charge la recherche et le remplacement, mais tous les éditeurs ne prennent pas en charge le remplacement des espaces par des retours chariot, cette fonction est donc relativement lourde à implémenter dans de nombreux autres éditeurs.

3. Épissage de ligne

Tout à l'heure, nous avons divisé une ligne de texte en 4 lignes, alors comment les relier ensemble ? Bien sûr, nous pouvons utiliser la méthode de recherche et de remplacement mentionnée précédemment pour remplacer les retours chariot par des espaces pour raccorder les lignes. Cependant, nous utilisons ici une autre méthode.

Appuyez plusieurs fois sur ESC pour passer en mode Normal, puis entrez cette commande : ggVG. gg signifie sauter au début du texte, V signifie entrer en mode de sélection de ligne et G signifie sélectionner jusqu'à la fin de l'article. Avec ces 3 commandes, 4 frappes au total, nous avons sélectionné l'intégralité de l'article.

Ensuite, appuyez sur les deux points : pour accéder au mode commande. Les mots :  : ' apparaissent dans la barre d'état. Entrez j après et appuyez sur Entrée. ​à nouveau ensemble, l'ensemble de l'opération, y compris Entrée, n'a nécessité que 7 pressions sur une touche :

this is a test
4. Copiez, collez et répétez les actions

Appuyez plusieurs fois sur ESC pour confirmer que vous êtes en mode Normal, puis appuyez sur yy pour copier la ligne actuelle dans le registre par défaut (équivalent au presse-papier). Appuyez ensuite sur 12p, VIM effectuera l'action de collage 12 fois, et 13 lignes de caractères comme celle-ci apparaîtront à l'écran :

this is a test
this is a test
this is a test
this is a test
this is a test
this is a test
this is a test
this is a test
this is a test
this is a test
this is a test
this is a test
this is a test

Explication : Dans VIM, les opérations de copier-coller sont très rapides. De plus, la plupart des commandes de VIM peuvent être répétées plusieurs fois en ajoutant un numéro avant la commande.

5. Opérations de colonne

Ensuite, nous changeons la première lettre au début de chaque ligne en majuscule.

Appuyez plusieurs fois sur ESC pour confirmer que vous êtes en mode Normal, puis appuyez sur gg pour passer à la première ligne et appuyez sur Ctrl + v pour entrer en mode de sélection de colonne (si vous appuyez sur Ctrl + v et ne parvenez pas à entrer en mode de sélection de colonne , veuillez voir ici), puis appuyez sur G pour passer à la dernière ligne de l'article. À ce stade, vous devriez voir que la première colonne de texte est sélectionnée et que seule la première colonne est sélectionnée. Appuyez sur la touche U et vous verrez que la première lettre de chaque ligne devient majuscule. Astuce : Après avoir sélectionné le texte, appuyez sur u pour mettre le texte en minuscules. Après avoir sélectionné le texte, appuyez sur ~ pour retourner la casse d'origine.

This is a test
This is a test
This is a test
This is a test
This is a test
This is a test
This is a test
This is a test
This is a test
This is a test
This is a test
This is a test
This is a test

Ensuite, on ajoute un astérisque devant chaque ligne. Appuyez sur gg pour passer à la première ligne, appuyez sur Ctrl + v pour entrer en mode de sélection de colonne, puis appuyez sur G pour sélectionner la première colonne du texte intégral, puis appuyez sur I pour entrer dans l'état d'insertion de colonne, entrez l'astérisque *, puis appuyez sur ESC Vous verrez que toutes les lignes sont précédées d'un astérisque :

*This is a test
*This is a test
*This is a test
*This is a test
*This is a test
*This is a test
*This is a test
*This is a test
*This is a test
*This is a test
*This is a test
*This is a test
*This is a test

Explication : Pour les personnes qui écrivent des programmes, commenter un morceau de code par lots est une opération très courante. Cela peut être facilement réalisé en utilisant l'insertion de colonnes. De plus, vous pouvez appuyer sur x après avoir sélectionné une colonne pour supprimer les blocs sélectionnés, et vous pouvez décommenter par lots.

6. Enregistrement macro

Ensuite, nous souhaitons remplacer la ligne paire de texte par : Ceci est un autre test. Puisque toutes les lignes paires doivent effectuer la même opération, nous pouvons terminer rapidement le travail en enregistrant cette opération puis en la rejouant plusieurs fois.

Tout d'abord, appuyez plusieurs fois sur ESC pour confirmer que vous êtes en mode Normal, puis appuyez sur gg pour passer à la première ligne et préparez-vous à démarrer l'opération. Nous appuyons d'abord sur la touche q, puis appuyons sur une autre lettre pour enregistrer cette macro dans le registre correspondant à cette lettre. Par exemple, si nous utilisons ici le registre m, appuyez sur qm. À ce moment, le mot « enregistrement » apparaît dans la barre d'état VIM, indiquant qu'il est entré dans l'état d'enregistrement.

然后,我们把第二行的 a 修改为 another。首先按 j 进入第二行,然后按 $ 跳到行末,再按两下 b 往前跳两个单词,此时光标停在字母 a 上。然后我们按下 caw键删除 a 并进入插入状态,然后输入 another ,按 ESC 回到 Normal 状态,按 j 进入下一行,整个操作步骤就完成了。最后,我们再按一下 q,结束该宏的录制。

接下来我们播放这个宏,完成整个操作步骤。在键盘上输入 1000@m,表示将 m 寄存器里的宏播放 1000 次,马上可以看到,文章中所有偶数行的 a 都变成了 another。

*This is a test
*This is another test
*This is a test
*This is another test
*This is a test
*This is another test
*This is a test
*This is another test
*This is a test
*This is another test
*This is a test
*This is another test
*This is a test

解说:虽然我们指定播放 1000 次,但事实上,执行到第 6 次的时候,光标挪到了屏幕最下方,于是执行过程就自动停止了。因此,在批量操作的时候,我们可以指定足够大的数字,而不用担心出现问题。

另外,修改 a 的时候,我们跳到行末后再使用 b 命令以单词为单位跳转,而没使用 h 一个字母一个字母往回挪,我们使用caw 修改整个单词,而不使用 s 命令删除单个字母并进入 Insert模式。这些细节可以保证录制得到的宏更具有一般性。

7. 行尾块操作

注:本章由 Jason Han 网友贡献,感谢他来信指出滇狐原先对于行尾块操作理解的错误。

下面,我们要在每行的尾部都添加一个感叹号。之前我们在每行头部添加一个星号的时候,用的是 Ctrl-V 列操作。现在要在行尾添加,能不能继续用列操作呢?直观上似乎是不行的,每行的长度不一样,行尾位置参差不齐,如何使用列模式往行尾添加东西呢?

事实上,Vim 提供了一种特殊的列模式,叫做行尾块模式,也就是说,我们是可以通过 Ctrl-V模式来选中长度不同的行的行尾,然后对行尾作统一操作的,操作步骤如下:

按下 gg 跳到第一行,按 Ctrl-V 进入列选择模式,再按 G,选中全文的第一列,然后按下 $,进入行尾块模式,按下 A,进入块插入状态,输入星号 !,再按下 ESC,你会看到,所有行尾部都出现了一个感叹号:

*This is a test!
*This is another test!
*This is a test!
*This is another test!
*This is a test!
*This is another test!
*This is a test!
*This is another test!
*This is a test!
*This is another test!
*This is a test!
*This is another test!
*This is a test!
8. 点命令

接下来,我们在每行的末尾加上一个小于号 。

由于我们需要在每行后面添加新行,因此我们无法使用块选择方式批量添加小于大于号。使用宏录制的方式是可以做到这点的,但操作稍嫌繁琐了一些。使用点命令,可以非常方便地做到这一点。

先按几下 ESC 确认当前出于 Normal 模式,然后使用 gg 跳到第一行,按 A 进行行尾插入,输入 ,最后 ESC 回到 Normal 状态,第一行修改就完成了。

然后,我们按 j 进入下一行,也就是第三行,再按 .,可以看到,第三行尾部也出现了小于号,并且自动添加了第四行的大于号。反复按j.j.j. ,直到每一行都完成了这个编辑动作为止。

*This is a test!
*This is another test!
*This is a test!
*This is another test!
*This is a test!
*This is another test!
*This is a test!
*This is another test!
*This is a test!
*This is another test!
*This is a test!
*This is another test!
*This is a test!

解说:点命令的作用是,重复最近一次所做的编辑操作。由于在第一行里做的操作是行尾添加并插入新行,因此在第三行(原先的第二行)重复这个动作的时候,也会在行尾添加同样的字符。点命令功能不如宏强大,但它使用起来比宏简便,因此也有着广泛的用途。

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer