git + peco + Vim — git grep으로 일치하는 파일을 선택하고 Vim으로 편집하기

6413 단어 VimGitPeco

이미지


  • echo 라는 문자열이 있는 파일을 git grep
  • 12 행에서 일치하는 파일을 선택합니다


  • Vim에서 12 행에서 편집 시작할 수 있습니다



  • 포인트


  • $EDITOR 환경 변수에서 사용할 편집기를 결정합니다
  • git grep --line-number 옵션을 사용하여 git grep으로 걸린 행을 읽습니다 (Vim을 사용하는 경우).
  • git grep 결과에서 파일 경로를 구문 분석
  • peco를 사용하여 증분 검색하기
  • peco/peco: Simplistic interactive filtering tool


  • 스크립트 예제


    #!/usr/bin/env bash -eu
    
    # Usage
    #
    # $ command [grep-keyword] --some-grep-option
    
    # 利用するエディタを環境変数から決める
    readonly editor=${EDITOR:-vim}
    
    # peco が入っていなければ終了する
    if [ ! $(which peco) ]; then
      echo You need peco please install
      exit
    fi
    
    # git grep する
    # git grep には自由なオプションを渡せるようにしておく ( --line-number をのぞいて )
    readonly git_grep_result=$(git grep --line-number $@)
    
    # git grep のマッチ結果がなければ終了する
    if [ -z "$git_grep_result" ]; then
      echo No match with git grep
      exit
    fi
    
    # git grep の結果からpecoで検索モードに入る
    readonly git_grep_select=$(echo "$git_grep_result" | peco --query="$1")
    
    # peco での選択結果がなければ終了する
    if [ -z "$git_grep_select" ]; then
      exit
    fi
    
    # pecoで選んだ行からファイルパスをパースする
    readonly filepath=$(echo "$git_grep_select" | awk -F':' '{ print $1 }')
    
    # git grep の結果からファイルの行番号をパースする
    readonly line_number=$(echo "$git_grep_select" | awk -F':' '{ print $2 }')
    
    if [ ! -z "$filepath" ]; then
      # エディタが Vim なら 引っかかったファイル行番号から開くようにする
      if [[ "$editor" =~ vim ]] && [ ! -z "$line_number" ]; then
        eval "$editor" +"$line_number" "$filepath"
      else
        eval "$editor" "$filepath"
      fi
    fi
    

    gitim/git-grep-edit at acdbbf9bcbfd92e10d62be3f92bff5e6e5b0366e · YumaInaura/gitim

    Versions


  • git version 2.8.1
  • peco version v0.5.3 (built with go1.10)
  • bash 4.2
  • Mac OS High Sierra

  • 링크


  • Gist
  • Medium—imported
  • 좋은 웹페이지 즐겨찾기