人生の人生

日常のゴミ捨て場

vimのメモ;vimgrepその2

これの続き.
sktakefumi.hatenablog.com

せっかくGitのgrepがあるなら 以前見送った外部grepでも導入しようと考えた.
のだが いろいろあってvimgrepのままでいいかなって.
(いろいろというのは 普通に

:grep pattern **/*.f90 | cw

とかやると quickfixが開く前にvimの下部に検索結果が流れるのが嫌だったから.
これを回避するためには

:silent grep pattern **/*.f90 | cw

とするらしいが イイ感じに地のgrepにオーバーラップ(?)するやり方がわからなかった.
自分で新しいコマンドを作る方法はアリ.
quickfix - Vim日本語ドキュメント

もののついでにvimrcをいじってvimgrepをカスタマイズした.

augroup common
  autocmd!
" grep
  autocmd QuickfixCmdPre vimgrep setlocal wildignore=*.o,*.mod,*.exe,*.png,*.jpg,*.pdf
  autocmd QuickfixCmdPost vimgrep setlocal wildignore=
  autocmd QuickfixCmdPost *grep* cwindow
augroup END

バイナリファイルを検索対象から外し かつquickfixウィンドウを自動で開くようにした.
zashikiro.hateblo.jp
qiita.com

環境設定にこだわってないでいい加減作業しましょうね

PowerShellをいじった; grep

PowerShelでgrepコマンドを使うことを考える.

まず grepぽい標準のコマンドでSelect-Stringがあるらしい.
tech.sanwasystem.com
まったく問題なく使える.
f:id:sktakefumi:20180709151717p:plain

そこでやはりとちくるってGit for Windowsgrepを使おうとする.ほんとバカ.

一番簡単なのはC:\Program Files\Git\usr\binにPathを通してしまうことであろうが(いつもの悪い癖) コマンドの衝突が起きそうで怖い.例えばlsなんかは普通にぶつかる.

そこで今回はprofile.ps1にエイリアスを追加することを考える.

Set-Alias grep 'C:\Program Files\Git\usr\bin\grep.exe'

こんな感じで普通に動く.

ところで grepは-nで行番号を表示したり --colorオプションで出力結果に色付けを行うことができるらしい.これをデフォルトにしたいと思ったので 次のようにしてみるが

Set-Alias grep 'C:\Program Files\Git\usr\bin\grep.exe --color'

これはダメらしいです.悲しい.

回避策としては 自前で関数を用意してしまうこと.
いろいろ悪態をついたのち 次のようなものに落ち着いた.

function Git-Grep{
  Invoke-Expression "& 'C:\Program Files\Git\usr\bin\grep.exe' -n --color $Args"
}
Set-Alias grep Git-Grep

Invoke-Expressionで 与えた文字列をそのままコマンドとして実行してくれる.

結果はこんな感じ.
f:id:sktakefumi:20180709151720p:plain
うっかり検索先パスを指定し忘れると/usr/bin/grepを検索し始めるのが玉に瑕.
 
いやほんとおとなしくほかのシェル使えって話ですよね.私ってほんとバカ....

Git for Windowsでの日本語文字化けについて

ググれば腐るほど出てくる.

www-creators.com

とりあえず,.gitconfigで

pager = less -cq

quotepath = false

を指定してあげる.pagerを明示的に指定してあげるのが大事らしい.

-qはついでにビープ音の無音化.

 

以上の処理を行ったものの git logの文字化けが直らないので もちょっと調べると

Git for Windows で漢字等非ASCII文字が文字化けする場合 | OPC Diary

が見つかったので とりあえずシステム環境変数

LANG ja_JP.UTF-8

を追加.とりあえずシステム環境変数にぶち込んでしまう悪い癖.

結果 直った.

 

さて 備忘録としてブログに書き起こそうかと思って よくよく検証してみると git logのほうはLANG環境変数がキーで pagerの明示的な指定は特に意味がなかった.

git ls-filesはquotepathが効いてくる.

なんやねん.

 

文字コード周りの話が分からないので助けてください.