在.bashrc文件中设置别名
alias l='ls -l'
Vim 内部:
:! l
[No write since last change]
/bin/bash: l: command not found
shell returned 127
答案1
别名不是继承的,因此 Vim 启动的 shell 不会继承启动编辑器的 shell 中可用的别名。
该~/.bashrc
文件仅在交互式 shell 会话中读取,并且从 Vim 启动的 shell 不是交互式的。此外,bash
默认情况下,shell 不会在非交互式 shell 中扩展别名。
要运行从 Vim 内部调用的命令l
,该命令必须作为外部命令(例如,文件中某处的脚本$PATH
)可用,或者您可以使用单独的$BASH_ENV
文件(在非交互式 shell 中运行任何内容之前读取的文件)来设置适合您想要执行的操作的 shell 环境。
要使用$BASH_ENV
“技巧”,请确保您的~/.vimrc
文件(或等效文件)将此环境变量设置为包含必要的安装代码的文件的路径名:
let $BASH_ENV = "~/.vim_bash_env"
然后创建~/.vim_bash_env
说
shopt -s expand_aliases
source ~/.bashrc
即使 shell 会话是非交互式的,这也将启用别名的扩展,然后它会读取~/.bashrc
可能定义了别名的文件。
然后您可以通过 Vim 命令使用您的别名!
。
请注意,指向的文件$BASH_ENV
将被读取并执行任何您在 Vim 中执行的命令!
,如果您的~/.bashrc
文件执行其他操作(例如启动tmux
或其他服务),那么您从 Vim 启动的任何命令也会发生这种情况。因此,谨慎的做法是将别名和/或 shell 函数定义分解到~/.bash_aliases
您从中获取源的新文件中两个都 ~/.vim_bash_env
和~/.bashrc
。