vim에서 bash 별칭과 변수를 설정하는 방법은 무엇입니까?

vim에서 bash 별칭과 변수를 설정하는 방법은 무엇입니까?

다음 예는 명령줄 모드에서 작동하지 않습니다.

!alias lol='echo lol'
!lol='echo lol'

답변1

이 명령을 사용하면 :!Vim에 새 셸이 생성됩니다. 해당 셸에서는 별칭이 설정되지만 셸은 즉시 종료되고 모든 것이 손실됩니다.

Vim을 시작하는 셸에서 별칭을 정의하는 것이 가장 좋습니다. 환경 변수의 경우 Vim에서 설정 :let $VAR = 'value'하고 :!명령에서 사용할 수도 있습니다. 를 사용하여 Vim에서 셸을 시작하거나 를 사용하여 :shellVim을 일시 중지하고 원래 셸로 돌아갈 수 있습니다.:stop^z

답변2

vimvim 실행 중 각 명령에 대해 비대화형 인스턴스를 시작합니다 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

관련 정보