별칭과 함수 설명을 얻는 방법은 무엇입니까?

별칭과 함수 설명을 얻는 방법은 무엇입니까?

oh-my-zsh를 사용하는데 기억나지 않는 별칭과 함수가 많아서 alias ag="alias | grep"별칭이 어떤 역할을 하는지 알아보기 위해 이걸 이용했습니다. 나도 사용별칭 프롬프트. 하지만 별칭에 대한 명령만 받고 싶지 않고 방법을 갖고 싶습니다.grep 별칭과 별칭에 대한 함수 및 명령에 대한 설명. 하지만 모든 기능이 표시되면 더 좋을 것 같습니다.

이전 줄을 가져오기 위해 grep을 사용하고 그것이 주석이라면 표시할 수 있다고 생각했습니다. 하지만 별칭이 너무 길지 않는 이상 저는 보통 주석을 같은 줄에 넣습니다. 그래서 설명을 얻으려면 이전 줄과 같은 줄의 주석을 확인해야 합니다.

또한 모든 별칭과 함수 및 해당 설명을 특정 문자로 구분된 파일에 넣고 해당 파일을 사용하는 것을 고려했습니다. 하지만 그러면 많은 코드를 반복해야 합니다.

답변1

나는 함수 찾기로 fzf를 사용합니다. 별칭을 포함하도록 확장할 수 있을까요?

바라보다https://gist.github.com/tg0h/e301584f435023fae66c77675bdb6e4d완전히 주석 처리된 코드입니다.

여기에 이미지 설명을 입력하세요.

왼쪽에는 fzf 대화형 파인더가 함수에 대한 간단한 설명과 함께 내 모든 함수를 나열합니다. 오른쪽의 fzf 미리보기 창에는 내 기능의 미리보기가 표시됩니다.

안타깝게도 리팩토링을 진행하는 중이어서 현재 함수 검색기가 손상되었습니다.

레시피

후지브

  • fzf를 사용하여 모호한 기능 찾기 fzf의 대화형 파인더는 모든 기능을 표시하며, fzf의 미리보기 창을 사용하여 기능을 자세히 표시할 수 있습니다.

박쥐

  • bat를 사용하여 구문으로 함수를 강조 표시하세요.

기능 정의

  • 함수는 함수가 수행하는 작업을 설명하는 특정 형식과 주석 라인을 사용하여 정의됩니다. 이는 나중에 ripgrep을 사용하여 함수를 찾는 데 도움이 됩니다.

립그렙

  • ripgrep을 사용하여 2가지 작업 수행
  1. 의 각 기능에 대해 <function folder>해당 a를 제공합니다. 파일명, b. 함수명, c. fzf의 한 줄로. 이는 fzf의 대화형 파일 찾기(내 스크린샷 왼쪽)에 표시됩니다.

  2. 각 함수에 대해 해당 파일 이름과 시작 및 끝 줄 번호를 찾아 bat에 공급할 수 있습니다. 그런 다음 bat를 사용하여 파일의 기능을 미리 볼 수 있습니다. (내 스크린샷의 오른쪽에 표시된 대로)

여기에는 정규식 마법사가 필요하지만 함수를 균일하게 정의하면 더 간단해집니다. 자세한 내용은 아래를 참조하세요.

세부 사항

1. 표준 형식을 사용하여 함수 작성

이 형식으로 함수를 작성하면 추출이 더 쉬워집니다.

# I do not omit the function keyword
function hello(){
# this function says hello (only the first comment line after the function will be used to be shown in fzf)
# this comment will not be shown in fzf's interactive finder (left of screenshot) later
echo hello world
}

2. 모든 기능을 찾는 방법 (추후 fzf에서 제공)

내 함수가 위 형식을 따른다고 가정하고 ripgrep을 사용하여 함수 폴더의 모든 파일을 구문 분석하여 추출합니다.

  • 파일 이름
  • 기능 이름
  • 기능 설명

이것을 사용하십시오 :

_fzf_home_getFunctions(){

  # -e '^\s*function\s+(?P<fname>[^\s(]+)'
  # [^\s(] - anything that is not a space or a (
  # the regex searches for function, whitespace, and then uses a named capturing
  # group of a word character
  # exclude commented functions

  rg \
    --follow \
    --type zsh \
    --color always \
    --field-context-separator '' \
    --no-context-separator \
    --only-matching -e '^\s*function\s+(?P<fname>([^\s(]+))' -r '$fname' -A 1 \
    --field-match-separator ' ' \
    $_fzf_homeFn_dir \
    | gsed -E 's!(\s*)(#)!\2!' \
    | gsed "s!$_fzf_homeFn_dir!!" \
    | gsed 'N;s/\n/ /' \
    | gawk '{$3="-"; print}' 
}

참고: 저는 sed와 awk 대신 gsed와 gawk를 사용합니다.

3. fzf 함수 미리보기 설정 방법

_fzf_home_displayFunction(){
  # given inputFile and inputFunc, use bat to display function body
  #
  # reads file and func
  # outputs file funcStartLineNumber funcEndLineNumber

  local inputFile=$1
  local inputFunc=$2

  local file=$_fzf_homeFn_dir$inputFile

  rg --only-matching \
     --multiline \
     -nH \
     -e '\s*function\s+'$inputFunc'\s*\(''(?s:.)*?(^\s*}$)' $file \
     | gsed '1b;$!d' | gsed 'N;s/\n/ /' \
     | rg '(?::)(\d+)(?::)' -or '$1' | join-lines | read -r funcStart funcEnd _

  bat --color=always $_fzf_homeFn_dir$inputFile -r $funcStart:$funcEnd
}

4. 마지막으로 fzf에 기능을 제공하고 미리보기를 설정합니다.

보너스로 nvim에서 직접 기능을 편집할 수 있는 키맵도 설정했습니다. 자세한 내용은 내 글머리 기호를 참조하세요.


fzf-search-home-function-widget(){
  local result=$(
  _fzf_home_getFunctions | fzf --ansi \
    --preview="_fzf_home_displayFunction {1} {2}" \
    --bind "ctrl-e:execute(_fzf_home-function_nvim_edit {1} {2} < /dev/tty > /dev/tty 2>&1)"
)
zle reset-prompt;
LBUFFER+=$result
}

관련 정보