ホームページ  >  記事  >  システムチュートリアル  >  VIM の高度な操作スキルを学ぶ

VIM の高度な操作スキルを学ぶ

WBOY
WBOY転載
2024-01-05 10:52:02859ブラウズ
###導入### この記事では、他の通常のテキスト エディタでは完了できない、または完了が非常に遅い、いくつかの単純な VIM 操作を集めます。この記事の紹介を通じて、初心者は VIM を学習する決意と自信を強化することができます。簡単にデモンストレーションできる優れたテクニックがあれば、メッセージを残してください。また、特に明記されていない限り、この記事で説明されているキーでは大文字と小文字が区別されます。たとえば、テキストに「G を押してください」と書かれている場合、押すキーは「Shift G」である必要があります。

VIM の高度な操作スキルを学ぶ

1.準備

まず、VIM を開いて、今日のデモ用のテキストを入力します。

リーリー 2. 検索と置換

ESC を数回押して通常モードに入り、コマンド :%s/ /\r/g/ を入力します。 Enter キーを押した後の効果は次のとおりです:

リーリー

説明: このコマンドの機能は、記事内のすべてのスペースを復帰に置き換えることです。ほとんどすべてのエディターは検索と置換をサポートしていますが、すべてのエディターがスペースをキャリッジ リターンで置換することをサポートしているわけではないため、この機能を他の多くのエディターで実装するのは比較的面倒です。

3. 線の接合

先ほど、テキスト行を 4 行に分割しましたが、それらを再びつなぎ合わせるにはどうすればよいでしょうか?もちろん、上で説明した検索と置換の方法を使用して、改行をスペースに置き換えることによって行を結合することができます。ただし、ここでは別の方法を使用します。

ESC を数回押して通常モードに入り、コマンド ggVG を入力します。 gg はテキストの先頭へのジャンプを意味し、V は行選択モードへの移行を意味し、G は記事の末尾への選択を意味します。これら 3 つのコマンド、合計 4 つのキーストロークを使用して、記事全体を選択しました。

次に、コロンを押します: コマンド モードに入り、ステータス バーが表示されます: :'、その後に j を入力して Enter キーを押すと、記事全体が表示されます記事は再び結合され、Enter キーを含む操作全体で 7 回のキーを押すだけで済みました:

リーリー 4. アクションをコピー、貼り付け、繰り返します

ESC を数回押して現在がノーマル モードであることを確認し、yy を押して現在の行をデフォルトのレジスタ (クリップボードに相当) にコピーします。次に 12p を押すと、VIM は貼り付けアクションを 12 回実行し、次のような 13 行の文字が画面に表示されます。 リーリー

説明: VIM では、コピーと貼り付けの操作が非常に高速です。さらに、VIM のほとんどのコマンドは、コマンドの前に数字を追加することで数回繰り返すことができます。

5. 列の操作 次に、各行の先頭の最初の文字を大文字に変更します。

ESC を数回押して通常モードであることを確認し、gg を押して最初の行にジャンプし、

Ctrl v を押して列選択モードに入ります (Ctrl v を押しても失敗した場合)列選択モードに入り (ここを参照)、G を押して記事の最後の行にジャンプします。この時点で、テキストの最初の列が選択され、最初の列のみが選択されていることがわかります。 U キーを押すと、各行の最初の文字が大文字になることがわかります。ヒント: テキストを選択した後、u を押すとテキストが小文字に変更され、~ を押すと元の大文字と小文字が反転します。 リーリー

次に、各行の前にアスタリスクを追加します。 gg を押して最初の行にジャンプし、

Ctrl v を押して列選択モードに入り、G を押して全文の最初の列を選択し、I を押して列挿入状態に入り、アスタリスク * を入力します。 ESC を押すと、すべての行の前にアスタリスクが表示されることがわかります: リーリー

説明: プログラムを作成する人にとって、コードの一部をバッチでコメント アウトすることは非常に一般的な操作であり、列の挿入を使用すると簡単に行うことができます。さらに、列を選択した後に [x] を押すと、選択したブロックを削除したり、バッチでコメントを解除したりできます。

6. マクロの記録 次に、テキストの偶数行を次のように変更します:

これは別のテストです。すべての偶数行で同じ操作を実行する必要があるため、この操作を記録して数回繰り返し再生することで、作業をすばやく完了できます。

まず、ESC を数回押して通常モードであることを確認し、次に gg を押して最初の行にジャンプし、操作を開始する準備をします。まず q キーを押し、次に別の文字を押して、その文字に対応するレジスタにこのマクロを記録します。たとえば、ここで m レジスタを使用する場合は、qm を押します。このとき、VIM ステータス バーに「録画中」という文字が表示され、録画状態になったことを示します。

然后,我们把第二行的 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!

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

以上がVIM の高度な操作スキルを学ぶの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はlinuxprobe.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。