Quantcast
Channel: Vimタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 5608

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

$
0
0

こんにちは、アイスタイルアドベントカレンダー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コマンドを作成する等の用途で利用しています。

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


Viewing all articles
Browse latest Browse all 5608

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>