いつもお世話になります。
表題の通り、vimgrep で完全一致の正規表現の記述方法がわかりません。
ネットいろいろ探しましたが、みつからなくて困ってます。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
どういう意味で完全一致と言っておられるのか分かりません。書いた正規表現が1行として完全一致という意味ですか?それとも書いたパターン(たとえばドットがドットとしてマッチする)がそもままマッチするという意味での完全一致ですか?前者であればネットで検索すればすぐに見つかります。前の質問もそうでしたが、質問が少し雑すぎます。
例えばerror と error123 があったら、最初のerrorだけが検索される方法を完全一致としてます。

回答2件
0
ベストアンサー
:vimgrep /\<error\>/ *
で言っておられる結果が得られるかと思います。
投稿2017/08/16 15:58
総合スコア5030
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/08/16 16:23
単語の境界にマッチ、これですね。
ありがとうございます。
なかなか思い出せませんでしたorz
ありがとうございます。できました。
しかしこの表現で /\<error\>/ 何でできるのか記号の意味がわからないです。
help vimgrep に :vimgrep /\<FileName\>/ *.h include/* のような同じ書き方がのってましたが
意味はのってなく、他のサイトで探してもみつからないです。 よろしくお願いします。
:help /\<
に載っています。
2017/08/17 00:53
https://msdn.microsoft.com/ja-jp/library/cc392020.aspx
このページで「単語の境界」を検索すると解説が書かれています。
いろいろご教授ありがとうございます。
\ は単語の境界とわかりました。
< はどんな意味があるのでしょう? これがないと成立しないです。
\ が境界なのでなく \< もしくは \> が境界なのです。 :help /\< を見て下さい。
*/\<*
\< Matches the beginning of a word: The next char is the first char of a
word. The 'iskeyword' option specifies what is a word character.
|/zero-width|
\< が境界と示すために先頭に /を入れてると\がメタキャラから記号に変化して
\< の2つセットでメタキャラと認識させて境界の意味を示していると考えれば良いでしょうか?
2017/08/17 02:56
\<、\>はこれ自体がメタキャラなのでどちらか片方だけでも使えます。\<が単語の左側の境界、\>が単語の右側の境界です。
error\>ならerror123は外せますが123errorがヒットします。
/ がないと検索できないのはなぜでしょうか?
\<、\> は理解しました。
/ が無いと検索できないの意味が分かりませんでした。vim の検索コマンドは / です。
2017/08/17 04:28
vimgrepでは検索条件の文字列は/で囲まないと検索条件として認識されないからですね。
/以外で囲むやり方もあるようですが良くわかりません。
vimgrep は // で括ると正規表現で、括らない場合は固定文字列として検索します。単語の境界というのは固定文字列では表現できませんので正規表現でパターンを作る必要があります。
2017/08/17 04:40
すごく勉強になりますm(_ _)m
この質問を通じていろいろ勉強になりました。

0
まず vimを起動して
:help vimgrep
してみたら簡単な使用例は載っていますよ。
vimgrep /error/ .
と書けば現在の作業フォルダ内のファイル全てにerrorの文字が無いか検索かけてくれます。
//の間に検索したい文字を入れればまず完全一致になると思います。
投稿2017/08/16 14:23
編集2017/08/16 14:29総合スコア157
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
もし正規表現自体初めてであればVimの正規表現はクセがあるので
可能ならサクラエディタの検索機能で勉強した方がはかどると思います。
お世話になります。上記のやり方で、errorをerror123 としてvimgrep /error/ *.* としても
検索されてしまいますよ。
んー完全一致というのは例えば"error"5文字だけの行を探したいってことなら
vimgrep /^error$/ *.*
ですかね? ^は行頭って意味で$は行末です。
コメントした後で説明見ちゃいました。すみません。
/^error$/ だと 例えばこの行に error kkkk のようなものがあると検索されないです。
:vimgrep /[^\S]*error[^\S]*/ *.*
これでも error kkkkはヒットしてしまいます。とほほ。。
また \ が¥ にしかならないです。
\が¥¥になるのは環境の問題なので気にしなくていいです。
結構難しいなあ

あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。