grep에서 검색한 결과 파일을 즉시 vim의 여러 탭에서 열기 명령을 만듭니다.

개요


grep 해서 걸린 파일을 복사해 붙여넣고 vim 를 여는 것이 많았기 때문에, 이것도 어쩌면 굉장히 시간을 낭비하고 있는 것이라고는 생각했습니다.
그래서 전용 명령을 작성해 보았습니다.

명령 구현



실행 환경


zsh 파이므로, .zshrc 로 동작 확인하고 있습니다만, 아마 bash 하지만 움직인다고 생각합니다.

구현



~/.zshrc
function svim() {
    if [ "$1" = "" ]
    then
        echo 'no arguments';
        return;
    fi
    vim -p `grep -lr $1 $2 | perl -pe 's/\n/ /g'`;
}

사용법


svim {引数} 에서 현재 디렉토리는 다음 파일을 인수 문자열로 검색하고 히트한 모든 파일을 vim로 엽니다. 두 번째 인수에 폴더를 지정하면 해당 폴더에서 검색합니다.
$ svim HOGEHOGE
または
$ svim HOGEHOGE src/components

해설



모처럼이므로 약간의 해설도 씁니다.

인수 점검



우선 인수가 0, 즉 $1 = "" 의 경우는 return 합니다.

grep


-lr 선택적으로, 파일명만을 나열해, 부하의 디렉토리를 재귀적으로 검색합니다.

$ grep -lr hoge *                                                                                
Resources/views/base.html.twig
Resources/data/page.yml

perl



그런 다음 perl-pe 옵션을 붙이는 것으로, sed 커멘드와 같이 s/hoge/fuga/g 의 서식을 사용한 검색을 할 수 있습니다.

$ cat sample.txt 
hoge
fuga
foo
bar

$ cat sample.txt | perl -pe 's/\n/ /g'
hoge fuga foo bar % 

vim



마지막으로 vim 하지만 vim-p 옵션으로 열면 여러 파일을 탭에서 한 번에 열 수 있습니다.

$ vim -p sample.txt sample2.txt 
2 files to edit

이런 식으로 엽니다.


나는 vim 의 단축키를 여러가지 바꾸고 있어, sn 라든지 sp 로 탭을 전후 이동할 수 있기 때문에, 탭으로 여는 편이 편리했던 것입니다.

여담



이상이 됩니다만, 이상을 말하면 grep 한 검색 결과가 너무 많으면 vim 가 펑크 해 버리므로, grep

여담Ⅱ



vimgrep 라는 것이 있는지 몰랐다. 그렇다고는 해도 쉘상에서 찾고 싶은 장면도 있다고 생각하므로 양쪽 사용할 수 있도록 이쪽도 공부해 보겠습니다.

좋은 웹페이지 즐겨찾기