システムコマンドの使い方を勘違いしていた。

vim完全バイブルの第7章まで進んだ。

システムコマンドの利用

本を読んでいる時に理解ができなかった事があった。実際にやってみたら、「なんだ。そっか。」って内容でした。

:!10Gsort

として例があるのですがどうしてフィルタできるのか?
どうやって、rangeとコマンドを区別するのか?

実行してみると「10Gsortってコマンドありませんよ。」的なメッセージが表示されます。

そう、例題のシステムコマンドの「!」はコマンドラインモードではなくノーマルモードで行う事が前提だったようです。
ノーマルモードで、!10Gsortをタイプすると見事に実行したコマンドsortでフィルタされました。

ノーマルモードで!2jsortと入力するとコマンドラインモードに移ってこんな表示なりました。

:.,.+2!

この状態で!のあとにsortを入力しエンターを押下します。

:.,.+2!sort《エンター押下》

カーソル行を含めた3行がフィルタされました。

結論

  • フィルタと実行を使い分ける。
  • フィルタだけに入力するrangeは欲しいよね。(あたり前の事すぎる・・・)

よく使うビジュアルモードやノーマルコマンドの「!」は、外部コマンドのフィルタ
コマンドラインモードの「!」は、外部コマンドの実行

この違いがあるんだとわかった事が収穫。

【参照ヘルプ】

:h !
:h v_!
:h cmd!

メモの続きはまた明日以降にしよう。