Emeditor・Emacs・viそれそれにおいて、

あるディレクトリから、
ある文字列が含まれているファイルおよび含まれていないファイルを
検索表示する方法を教えてください。

正規表現を使ってどうにかできそうな気がするのですが、分かりません。

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:2007/06/25 12:37:56
  • 終了:2007/07/02 12:40:03

回答(4件)

id:mass3 No.1

mass3回答回数118ベストアンサー獲得回数152007/06/25 20:51:34

ポイント23pt

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には他にもオプションが渡せますので柔軟に処理できます。

http://www.linux.or.jp/JM/html/GNU_grep/man1/grep.1.html

id:mass3 No.2

mass3回答回数118ベストアンサー獲得回数152007/06/26 01:09:11

ポイント23pt

ポイント不要です。勘違いしてました。ごめんなさい。

(2) "foo"が含まれないファイルの一覧は正しくないですね。

"foo"が含まれない行の一覧しか見られません。

(1)"foo"が含まれるファイルの一覧もファイルの一覧とは言いがたいですね。

http://www.linux.or.jp/JM/html/GNU_grep/man1/grep.1.html

id:tetlis

そうなんですか。

今にも試そうと思っていたところこの回答を開きました。

残念です。

2007/06/26 09:48:02
id:nyamap No.3

nyamap回答回数22ベストアンサー獲得回数02007/06/26 17:44:05

ポイント22pt

エディタからということで少し異なるかもしれませんが


含まれるファイル

grep -l hogehoge DIR/*

含まれないファイル

grep -vl hogehoge DIR/*

grep -rv hoge DIR とすれば再帰的にディレクトリを検索。


emacsですとshellモードから。viならば!!grep ...とすれば結果が編集しているファイルに挿入されます。

単発のコマンドも(emacsなら)いけそうですが、Unixらしく組み合わせる方が便利かもです。grepだけ覚えておけば他のケースにも応用できますし。

URLはダミーです。

http://localhost/

id:kizz No.4

kizz回答回数13ベストアンサー獲得回数02007/06/26 17:53:51

ポイント22pt

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 のヘルプの日本語訳です。

コメントはまだありません

この質問への反応(ブックマークコメント)

トラックバック

  • gvim覚え書き windowsの香り屋gvimよりdiffがコマンドが使えな無かったのでメモメモ。備忘録がわりにいろいろ追記してます。 diff :vert diffsplit [ファイルパス] で、現在バッファで開いているフ
「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません