如何在 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

相关内容