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

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

在命令列模式下,以下範例對我不起作用。

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

答案1

當您使用該:!指令時,Vim 中會產生一個新的 shell。在該 shell 中,設定了別名,但此後 shell 立即退出,一切都遺失了。

最好在啟動 Vim 的 shell 中定義別名。對於環境變量,您也可以透過在 Vim 中設定它們:let $VAR = 'value',並且可以在:!命令中使用它們。您可以使用 啟動 Vim 中的 shell ,或使用或:shell暫停 Vim 並返回原始 shell 。:stop^z

答案2

vim為每個命令(在vim 運行中)啟動一個非互動式實例bash(假設bash是您的登入 shell 並且您尚未修改) 。所以:$SHELL!!cmdbash -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

相關內容