내가 할 때 다음과 같은 종류의 별칭을 설정하는 방법이 있습니까?
cd some/directory
vim .zshrc
응 vim ~/.zshrc
?
답변1
잘못된 질문을 하고 있기 때문에 대답은 생각보다 훨씬 간단합니다.
실제로 의미하는 바가 " ~/.zshrc
현재 작업 디렉터리에 관계없이 별칭을 편집할 수 있는 별칭을 어떻게 만들 수 있습니까?"라면 대답은 간단합니다.
alias zshconfig="vim ~/.zshrc"
이 예는 나 자신에게서 나온 ~/.zshrc
것이며 자주 사용합니다.
더 나은 옵션이 제안되었습니다@mateen-ulhaq아래 댓글에서는 다음과 같습니다.
alias zshrc="vim ~/.zshrc"
즉, 파일 이름이나 파일 이름 경로에 별칭을 지정하지 마십시오. 두 시나리오 모두 가능하지만 나중에 문제를 일으킬 수 있는 예측할 수 없는 부작용이 있을 수 있습니다.@마이클호머지적했다.
$EDITOR
하지만 이제 첫 번째 선택이 무엇 인지 알았으므로 해당 특정 파일에 대한 호출에 별칭을 추가하기 vim
만 하면 vim
됩니다. (문맥에서 벗어나 사용될 가능성이 적은 특수한 문자열에 대한 특정 명령 및 인수 조합의 별칭을 지정하는 것이 더 안전합니다.)
그러나 더 일반적으로는 두 문자 시퀀스를 최적화하는 것에 대해 걱정하지 말고 ~/
오히려 입력하는 데 익숙해져야 한다고 제안합니다. 계속하세요...Eddie Van Halen이 저울을 연습하는 것처럼 왼쪽 새끼손가락을 내밀어 보세요. (이렇게 하면 새끼손가락으로 키를 누르는 vim
데 익숙해져야 하므로 익숙해지는 데 도움이 될 것입니다 !)Esc
타이핑 기술이 향상됨에 따라 해당 시퀀스에 대한 머슬 메모리를 얻게 되며 ~/
, 이는 홈 디렉터리에 있는 파일을 참조할 때 해당 문자 시퀀스를 안정적으로 입력하는 데 도움이 됩니다. 실수로가 아니라 의도적으로 빠르게 입력하게 됩니다.
별칭에 의존하는 것의 단점은 가정용 컴퓨터의 속도를 아무리 높이더라도 ssh
클라이언트의 개인 서브넷에 있는 일부 원격 Docker 컨테이너로 이동하여 모든 별칭이 사라진 것을 발견해야 할 때 속도가 느려진다는 것입니다.
답변2
나는 그것을 정말로 이해하지 못합니다. 하지만 그렇습니다. 명령에 다른 이름이나 일부 기본 인수를 지정하는 것보다 더 복잡한 작업을 수행하므로 별칭이 아닌 함수가 필요합니다.
function vim {
if [[ $# -eq 1 && $1 == .zshrc && ! -e .zshrc ]]; then
set -- ~/.zshrc
fi
command vim "$@"
}
설명: 을 실행하면 vim
이 함수가 호출됩니다. 마지막 줄에서 command vim …
외부 명령을 호출하고 "$@"
함수에 전달된 매개변수를 전달합니다. 그 사이에 인수가 하나만 있고 해당 인수가 정확한 문자열이고 .zshrc
현재 디렉터리에 호출 파일이 없는 경우 .zshrc
명령줄은 으로 대체됩니다 ~/.zshrc
. 이러한 조건이 요구 사항과 정확하게 일치하지 않으면 조정하세요. .
답변3
아마도 zsh를 쉘로 사용하고 있을 것입니다."전역 별칭" 기능이 있습니다이를 통해 다음을 수행할 수 있습니다.
% alias -g .zshrc='~/.zshrc'
% echo .zshrc
/home/mwh/.zshrc
그건,어딘가에.zshrc
명령줄에 단어가 나타나면 ~/.zshrc
평소대로 물결표로 대체된 다음 확장됩니다. 자체 쉘 "단어"여야 하므로 더 긴 이름의 하위 문자열인 경우 확장되지 않습니다. 이는 모든 명령에 적용됩니다.
전역 별칭은 모든 곳에서 자동으로 확장되므로 rm .zshrc
다른 디렉터리에서 실행할 수 있고 자신의 도트 파일을 대상으로 하기 때문에 악명 높은 문제입니다. 이는 정의된 기능을 포함하여 쉘 내부 기능에도 적용됩니다. 이 경우 문제가 발생할 가능성은 거의 없어 보이지만 가능성이 있다는 점을 염두에 두시기 바랍니다. 를 사용하여 현재 디렉터리에 있는 파일의 이름을 구체적으로 지정하거나 또는 ./.zshrc
따옴표로 묶인 리터럴 문자열을 가져오는 데 사용할 수 있습니다 .\.zshrc