단일 스크립트에 여러 물고기 기능을 추가하는 방법은 무엇입니까?

단일 스크립트에 여러 물고기 기능을 추가하는 방법은 무엇입니까?

zsh에서 Fish로 전환하려고합니다. 보시다시피, 물고기를 사용하면 물고기 로딩 시간이 늘어납니다.별명. 그래서 모든 별칭을 함수로 변환하고 싶지만 문제는 각 별칭에 대한 함수 스크립트를 만드는 것이 약간 바쁘다는 것입니다. 그렇다면 단일 함수 스크립트에 이러한 별칭을 어떻게 추가합니까?

답변1

첫째, aliasFish의 명령은 약간의 구문 설탕을 사용하여 함수를 생성하는 지름길일 뿐입니다. 예를 들어

> alias ls "ls -lh"
> functions ls
# Defined via `source`
function ls --description 'alias ls ls -lh'
 command ls -lh $argv;
end

어쩌면 생성/로드되는 함수의 오버헤드가 속도 저하를 일으키는 것일 수도 있습니다. 이 경우 시작 시 (여전히) 로드되는 하나의 모놀리식 파일에 모두 넣는 것은 도움이 되지 않을 것입니다.

수정을 포함하지 않는 몇 가지 간단한 솔루션이 있습니다 config.fish.

  • 각 별칭에 대해 funcsave <aliasname>함수를 ~/.config/fish/functions. 이것이야말로 옳은 일이다, IMHO, 해당 디렉토리의 기능은 다음과 같습니다.요청 시 로드, 시작 시가 아닙니다. 이렇게 하면 쉘 시작 시간이 가장 빨라집니다.

    예를 들어:

    > alias ls "ls -lh"
    > funcsave ls
    > ls -n ~/.config/fish/functions/
    -rw-r--r-- 1 1000 100  95 Aug 18 14:30 ls.fish
    

    다시 말하지만, 이 파일은 시작 시에도 건드리지 않습니다. 필요할 때 "지연 로드"됩니다. Fish는 ls세션에서 처음으로 함수를 호출할 때 ls함수를 실행합니다 ~/.config/fish/functions/ls.fish.

    또는 그냥 funcsave켜세요기존의별명. 새 별칭을 정의할 때 자동 alias -s으로 생성된 .lazy-load 함수 파일을 사용하면 됩니다 ~/.config/fish/functions.

  • 편집/업데이트: 가능한 한 간단하게 만들고 싶다고 말씀하셨는데, 여기에 모든 별칭 기능을 자동으로 저장하는 빠른 명령줄이 있습니다. 실행 후에는 각 별칭에 해당하는 파일이 표시되며 ~/.config/fish/functions시작 시 기존 별칭을 삭제할 수 있습니다.

    for f in (alias | awk '{print $2}'); funcsave $f; end
    
  • 별칭 함수에 대한 모놀리식 파일을 만들고 싶고 시작 시간을 늘려도 괜찮다면(어느 정도) 수정하지 않을 것입니다 ~/.config/fish/config.fish. 파일을 생성하면 다음 ~/.config/fish/conf.d과 같이 자동으로 읽혀집니다. 시작의 일부.

    일부 지침을 수정해야 할 때마다 대신 config.fish에 있는 파일을 사용하는 것이 좋습니다 conf.d. 개별 config.fish.

답변2

기반스택 오버플로 예통과우스꽝스러운 물고기, 함수가 정의된 파일을 아래 ~/.config/fish/에 생성한 다음 ~/.config/fish/config.fish파일에 해당 함수를 가져오는 줄을 추가하는 것이 좋습니다.

예시 콘텐츠 ~/.config/fish/all-my-functions.fish:

function example-function1
  ls -l $argv
end

function example-function2
  ls -a $argv
end

# continues as needed ...

헥싱 ~/.config/fish/config.fish:

source ~/.config/fish/all-my-functions.fish

또는 모든 기능을 config.fish 파일에 직접 정의할 수 있습니다.

관련 정보