Bash

如何在 vim 中設置 bash 別名和變數?

  • April 3, 2018

在 cmdline 模式下,以下範例對我不起作用。

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

當您使用該:!命令時,會從 Vim 中生成一個新的 shell。在那個 shell 中,別名被設置,但在此之後,shell 立即退出,一切都失去了。

最好在啟動 Vim 的 shell 中定義別名。對於環境變數,你也可以在 Vim 中通過 設置它們:let $VAR = 'value',你可以在:!命令中使用它們。你可以用 或 從 Vim 中啟動一個 shell ,或者暫停 Vim 並用或:shell返回原來的 shell 。:stop``^z

vim為每個命令(在,vim 執行)啟動一個非互動式的實例bash(假設bash是您的登錄 shell 並且您沒有修改)。所以:$SHELL``!``!cmd``bash -c cmd

  1. 在一個中定義的別名!命令,在下一個啟動的其他 shell 中將不可用!命令,因為它完全是一個不同的過程。
  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

引用自:https://unix.stackexchange.com/questions/71957