Programing

vim에서 실행 된 명령이 bash 명령 별칭을 인식하지 못합니다.

crosscheck 2020. 9. 1. 07:02
반응형

vim에서 실행 된 명령이 bash 명령 별칭을 인식하지 못합니다.


Mac에서 bash를 사용하고 별칭 중 하나는 다음과 같습니다.

alias gitlog='git --no-pager  log -n 20 --pretty=format:%h%x09%an%x09%ad%x09%s --date=short --no-merges'

그러나 내가 할 때

 :! gitlog

나는 얻다

/bin/bash: gitlog: command not found 

.gitconfig에 이와 같은 별칭을 추가 할 수 있다는 것을 알고 있습니다.

[alias]
    co = checkout
    st = status
    ci = commit
    br = branch
    df = diff

그러나 모든 bash 별칭을 .gitconfig에 추가하고 싶지 않습니다. 그것은 DRY가 아닙니다.

더 나은 해결책이 있습니까?


Bash는 대화 형이 아닌 한 .bashrc를로드하지 않습니다. 사용하다

:set shellcmdflag=-ic

Vim의 :!셸이 명령 프롬프트처럼 작동하도록합니다.


이 질문이 이미 "답변"되었다는 것을 알고 있지만 답변에 문제가 있습니다. 셸은 Vim에서 대화 형으로 설정할 필요 가 없습니다 . 대화 형 셸을 종료하지 않고도 대체 답변을 보려면이 스레드를 참조하십시오.

비대화 형 셸 (기본값)을 원하지만 bash 별칭을 확장하려면 별칭 정의를 파일 (예 : .bash_aliases)에 넣고이 파일에서 별칭 확장을 명시 적으로 활성화합니다.

shopt -s expand_aliases  
alias la='ls -la'

그런 다음 이것을 .vimrc에 추가하여 vim 내에서 쉘 명령을 실행할 때마다 aliases 파일을 실제로 읽도록합니다.

let $BASH_ENV = "~/.bash_aliases"

이 솔루션은 "Jakob"에서 제안했습니다. 원본은 아래 링크를 참조하십시오. 나는 이것을 Mac OS X 10.9에서 테스트했고 완벽하게 작동했습니다!

vim-대화 형 모드에서 별칭을 인식하지 못합니까?


bash dotfiles 구성 방법에 따라 -i 옵션 대신 -l을 사용할 수 있습니다. 그러면 셸이 로그인 셸로 시작됩니다.


나는 그것이 오래된 질문 일 수 있음을 알고 있지만 위의 답변 중 어느 것도 원하는대로 작동하지 않았습니다. 따라서 인터넷 검색에서 여기로 온 사람들과 (oh-my-) zsh 사용자를 위해 :

이에 대한 내 해결책은 http://zsh.sourceforge.net/Intro/intro_3.html에 따라 .zshrc를 .zshenv에 복사하는 것만 큼 간단했습니다 .

`.zshenv '는 -f 옵션이 설정되지 않은 경우 모든 쉘 호출에서 소스입니다. 명령 검색 경로를 설정하는 명령과 기타 중요한 환경 변수가 포함되어야합니다. `.zshenv '는 출력을 생성하거나 쉘이 tty에 연결되어 있다고 가정하는 명령을 포함하지 않아야합니다.

그래서 $ cp ~/.zshrc ~/.zshenv일을 할 것입니다.


나는 -i 옵션을 설정하는 것이 너무 편하지 않다. 그것은 상당한 영향을 미치고 vim에서 자주 쉘을 사용하고 있기 때문이다. 대신 내가 할 일은 다음과 같습니다.:!bash -c ". ~/.alias; gitlog"

참고 URL : https://stackoverflow.com/questions/4642822/commands-executed-from-vim-are-not-recognizing-bash-command-aliases

반응형