다음 예는 명령줄 모드에서 작동하지 않습니다.
!alias lol='echo lol'
!lol='echo lol'
답변1
이 명령을 사용하면 :!
Vim에 새 셸이 생성됩니다. 해당 셸에서는 별칭이 설정되지만 셸은 즉시 종료되고 모든 것이 손실됩니다.
Vim을 시작하는 셸에서 별칭을 정의하는 것이 가장 좋습니다. 환경 변수의 경우 Vim에서 설정 :let $VAR = 'value'
하고 :!
명령에서 사용할 수도 있습니다. 를 사용하여 Vim에서 셸을 시작하거나 를 사용하여 :shell
Vim을 일시 중지하고 원래 셸로 돌아갈 수 있습니다.:stop
^z
답변2
vim
vim 실행 중 각 명령에 대해 비대화형 인스턴스를 시작합니다 bash
( bash
로그인 셸이고 아직 수정하지 않았다고 가정). 그래서:$SHELL
!
!cmd
bash -c cmd
- 거기에 별칭이 정의되어 있습니다! 명령은 다음에 시작되는 다른 쉘에서는 사용할 수 없습니다! 명령은 완전히 다른 프로세스이기 때문입니다.
bash
~/.bashrc
별칭은 확장되지 않으며 비대화식으로 읽혀지지 않습니다.
$BASH_ENV
이 문제를 해결하려면 별칭 확장을 활성화하고 종료 시 bash
새 별칭 목록으로 다시 작성하도록 설정을 지정하면 됩니다 . (중간)과 같은 ~/.vimrc
것 :
let $BASH_ENV = $HOME . "/.bashvimrc." . getpid()
au VimLeave * silent !exec rm -f "$BASH_ENV"
silent !echo 'vim_setup() { shopt -s expand_aliases; trap write_aliases EXIT; eval "$@"; }; write_aliases() { typeset -f vim_setup write_aliases; alias; echo vim_setup \"\$@\";} > "$BASH_ENV"; vim_setup "$@"' > "$BASH_ENV"
set shell=/bin/bash