LoginSignup
1

More than 5 years have passed since last update.

xargsで受け取った複数のファイル名をvimで開く(BSD系以外の場合)

Posted at

TL;DR

シェルでfind、grep等をパイプしてxargsで受け取ってvimで開くには、
find . -type f -name hoge | xargs sh -c 'vim $* < /dev/tty'
とすれば良い。
これを毎回書くのは面倒なので、
alias xargsvim='xargs sh -c '\''vim $* < /dev/tty'\'''
とエイリアスを作っておくと
find . -type f -name hoge | xargsvim
と書けて便利。

背景

上記以外に言うべきことはほとんど無いのですが、背景を少し。
同じことを実現するために、素直に
find . -type f -name hoge | xargs vim
とすると、「Vim: Warning: Input is not from a terminal」という警告が出る上に、以降、ターミナルへの入力がおかしくなります。

仕方ないので
vim `find . -type f -name hoge`
とやっていたのですが、この方法だと途中でパスの補完が効かなかったり不便です。

そんな折に、こちらの記事を見つけました。
ファイル名をパイプで出力してvimで開く方法
(xargs vimでターミナルがおかしくなる理由も書いてありますので、興味のある人はぜひ読んでみてください)

find . -type f -name hoge | xargs -o vim
と、-oオプションを付けるだけでOKとのこと。
「おー、こういうのが欲しかったんだよ」思ったのですが、これはBSD系固有のオプションのようです。
https://linuxjm.osdn.jp/html/GNU_findutils/man1/xargs.1.html

という訳で、素直に環境に依存しない形式で、-oオプション相当のことを実現するエイリアスを作ればいい、という結論になりました。

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
1