あるディレクトリから、
ある文字列が含まれているファイルおよび含まれていないファイルを
検索表示する方法を教えてください。
正規表現を使ってどうにかできそうな気がするのですが、分かりません。
EmacsしかわからないのでEmacsだけ。
/home/hoge/ が「あるディレクトリ」だとして。
(1) "foo"が含まれるファイルの一覧
M-x grep [Enter]
Run grep (like this): grep -n -e foo /home/hoge/* [Enter]
(2) "foo"が含まれないファイルの一覧
M-x grep [Enter]
Run grep (like this): grep -v -n -e foo /home/hoge/* [Enter]
M-xはメタキーを押しながら[x]キーを打鍵すること、
[Enter]は[Enter]キーを打鍵することを表現しています。
grepには他にもオプションが渡せますので柔軟に処理できます。
ポイント不要です。勘違いしてました。ごめんなさい。
(2) "foo"が含まれないファイルの一覧は正しくないですね。
"foo"が含まれない行の一覧しか見られません。
(1)"foo"が含まれるファイルの一覧もファイルの一覧とは言いがたいですね。
エディタからということで少し異なるかもしれませんが
含まれるファイル
grep -l hogehoge DIR/*
含まれないファイル
grep -vl hogehoge DIR/*
grep -rv hoge DIR とすれば再帰的にディレクトリを検索。
emacsですとshellモードから。viならば!!grep ...とすれば結果が編集しているファイルに挿入されます。
単発のコマンドも(emacsなら)いけそうですが、Unixらしく組み合わせる方が便利かもです。grepだけ覚えておけば他のケースにも応用できますし。
URLはダミーです。
vim しかわからないので vim だけ。
vi とのことですが vim ですよね?
GNU grep があり、シェルで back-tick が使える (`...` という記述ができる) 環境ならば、コマンドモードで :argadd `grep -l foo ./*` が使えそうです。
カレントディレクトリ内の foo を含むファイルが全て引数リストに入りますから、:bn で (必要に応じて :bp や :ls なども使って) 順に編集できます。
逆に foo を含まない方は :argadd `grep -L foo ./*` で。
より詳しくは vim のヘルプの :argadd の項 (:h :argadd で見られます) あたりをどうぞ。
しかし、本当にファイルの一覧を表示したいのでしょうか。
通常「foo を含むファイルを検索したい」という場合、foo または foo の近辺を編集したいのではないかと勝手に想像するのですが。
(mass3 さんもそれを念頭において回答されているように思います)
もしそうであるなら、:vimgrep foo **/* が使えます。
こちらは、カレントディレクトリ以下のファイルで foo を含む行が全て検索され (て quickfix リストに入) るので、:cn で (必要に応じて :cp や :cl なども使って) 順に foo のある行を辿っていけます。
ちなみにこちらは GNU grep 不要ですが、vim が quickfix オプション付きでコンパイルされている必要があります。(普通されてます)
より詳しくは、ヘルプの :vimgrep の項 (:h :vimgrep) や quickfix の項 (:h quickfix) をどうぞ。
http://www.ac.cyberhome.ne.jp/~yakahaira/vimdoc/index.html
vim のヘルプの日本語訳です。
そうなんですか。
今にも試そうと思っていたところこの回答を開きました。
残念です。