msys2에서 (강하게) peco 사용

4218 단어 minttymsys2BashPeco
DEPRECATED
msys2에서는 peco를 포기하고 fzy를 사용하면 행복하게되었습니다.
ぃ tp // 코 m / 우 bt t_ 인 t 레피 d / 아 ms / 에 6df730 에 69 아 0f402 ...

tldr



굉장히 무리하지만, 이하의 방법에 의해 msys2에서 peco를 사용할 수 있게 된다
function peco_ls()ls > /tmp/ls.txt
    script -qc "winpty peco /tmp/ls.txt" /tmp/typescript
    local target="$(col -bx < /tmp/typescript | tail -2 | head -1 | sed s/0K$// | sed s/^0m// )"
    echo "$target"
}

동작 이미지


개요
  • peco에게 input을 파일로부터 준다
  • peco에서 선택한 것을 표준 출력 (기본 동작)
  • script 명령으로 표준 출력 내용을 저장하고 검색합니다.

    what


  • peco는 입력을 표준 입력이나 파일에서 제공 할 수 있습니다
  • msys2에서 대화식 프로그램을 실행할 때 winpty를 끼워야합니다.
  • 그러나 winpty는 입출력에 파이프를 사용할 수없는 것 같습니다 (input is not a tty와 같은 오류가 발생합니다)
  • peco에게 input을 파일로부터 준다

  • 응용 (래퍼 함수 만들어 사용하기 쉽다)


      function _pecowrap_exec() {
        eval "$@" > /tmp/cmd.log
        script -e -qc "winpty peco /tmp/cmd.log" /tmp/script.log
      }
    
      function _pecowrap_result() {
        local result="$(col -bx < /tmp/script.log | tr -d '\n' | sed 's/.*0m\(.*\)0K.*$/\1/g' | sed 's/0K//g')" # TODO 強引。特に"0K"が含まれると削除しちゃう
        echo "${result}"
      }
    
      function c() {
        _pecowrap_exec "find $1 -maxdepth 1 -type d | sort" || return
        cd $(_pecowrap_result)
      }
    
      function v() {
        _pecowrap_exec "find $1 -maxdepth 1 -type f | sort" || return
        vi $(_pecowrap_result)
      }
    

    시행착오 메모



    다음을 시도했지만 모두 작동하지 않았습니다.
  • peco 이외의 도구 사용
  • fzf
  • etc.

  • mintty 이외의 터미널을 사용해보십시오

  • 잡감


  • Windows Subsystem for Linux가 오면 msys2가 필요하지 않을 수 있으므로 지금은 workaround로 극복합시다.
  • 좋은 웹페이지 즐겨찾기