4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

アイスタイルAdvent Calendar 2017

Day 23

vimでバッファの内容をコマンドとして実行する

Posted at

こんにちは、アイスタイルアドベントカレンダー23日目を担当します塚本です。
今年は簡単なvimネタです。

僕はvimをコーディングの他、何かのコマンドの標準出力から新たなコマンド作るのに利用しています。

知っているとほんのり便利な小技だと思いますので、ありがちなユースケースに沿ってご紹介します。

コマンドを組み立てる

極端な例ですが、例えばgitでバージョン管理しているファイルに対して下記のように変更があったとしましょう。
7c9aec7332e49cc58a476fe8ad0c86e2.png

この時、特定のファイルだけをステージングするには一つ一つ git add [ファイル名] するかgit add -p .すれば良いですが、今回はvimを使ってみます。

まずはgit status の標準出力をvimで受け取ります。vim - とすることで標準入力をバッファに取り入れることができます。

git status | vim -

a0a0b9f6afa2cf918f33a8ea79f6f018.png

次にステージングしたいファイル名だけを残し、余分な行をすべて消します。短形選択やglobalコマンドが役に立つでしょう。
2f5ec37e6afbe6a12e473903d1d809d0.png

ここから更にctrl+jを複数回実行、行頭にgit addを付けることでコマンドを組み立てます。
b73068ef5f59b8ea9a0873f4bd003772.png

バッファの内容をシェルで処理する

この状態で :%!sh すると目的のファイルがステージングされます。
19143777240f953266db2e4be5e35f11.png

!コマンドは指定範囲の内容を外部のコマンドを使って処理するコマンドです。{範囲}!{外部コマンド}とすることで指定された範囲を外部のコマンドで処理することが出来ます。

この例では!コマンドでバッファの内容をシェルの標準入力に渡し、実行しているわけですね。

!コマンドに関してはちょうど今年のvimアドベントカレンダーで解説されている方がいらっしゃいました。詳しくはこちらをどうぞ!
Vimと外部コマンドをつなぐ!コマンド(仮称)

まとめ

標準入力をvimの強力な編集機能で編集し、新たなコマンドとして実行する。地味ですが結構色々応用できそうな気がしませんか?

今回は極端な例でご紹介しましたが、僕は他にも外部APIへのリクエストログを加工してcurlコマンドを作成する等の用途で利用しています。

是非他にも色々な活用法を探してみてください。

4
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?