
cmdline 모드에서는 다음 예제가 작동하지 않습니다.
!alias lol='echo lol'
!lol='echo lol'
답변1
이 명령을 사용하면 :!
Vim 내에서 새 셸이 생성됩니다. 해당 셸에서는 별칭이 설정되지만 그 직후 셸이 종료되고 모든 것이 손실됩니다.
Vim을 시작하는 셸에서 별칭을 정의하는 것이 가장 좋습니다. 환경 변수의 경우 Vim 내에서 를 통해 설정할 수도 있고 명령 :let $VAR = 'value'
에서 사용할 수도 있습니다 :!
. 를 사용하여 Vim 내에서 셸을 시작하거나 , Vim을 일시 중지하고 또는 를 :shell
사용하여 원래 셸로 돌아갈 수 있습니다 .: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