システムコマンドの使い方を勘違いしていた。
vim完全バイブルの第7章まで進んだ。
システムコマンドの利用
本を読んでいる時に理解ができなかった事があった。実際にやってみたら、「なんだ。そっか。」って内容でした。
:!10Gsort
として例があるのですがどうしてフィルタできるのか?
どうやって、rangeとコマンドを区別するのか?
実行してみると「10Gsortってコマンドありませんよ。」的なメッセージが表示されます。
そう、例題のシステムコマンドの「!」はコマンドラインモードではなくノーマルモードで行う事が前提だったようです。
ノーマルモードで、!10Gsortをタイプすると見事に実行したコマンドsortでフィルタされました。
ノーマルモードで!2jsortと入力するとコマンドラインモードに移ってこんな表示なりました。
:.,.+2!
この状態で!のあとにsortを入力しエンターを押下します。
:.,.+2!sort《エンター押下》
カーソル行を含めた3行がフィルタされました。
結論
- フィルタと実行を使い分ける。
- フィルタだけに入力するrangeは欲しいよね。(あたり前の事すぎる・・・)
よく使うビジュアルモードやノーマルコマンドの「!」は、外部コマンドのフィルタ。
コマンドラインモードの「!」は、外部コマンドの実行。
この違いがあるんだとわかった事が収穫。
【参照ヘルプ】
:h ! :h v_! :h cmd!
メモの続きはまた明日以降にしよう。