vim 내에서 bash 별칭과 변수를 어떻게 설정합니까?

vim 내에서 bash 별칭과 변수를 어떻게 설정합니까?

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!!cmdbash -c cmd

  1. 하나에 정의된 별칭! 명령은 다음으로 시작된 다른 쉘에서는 사용할 수 없습니다! 완전히 다른 프로세스이기 때문에 명령입니다.
  2. 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

관련 정보