如何在 vim 编辑器中运行别名命令?

如何在 vim 编辑器中运行别名命令?

在.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

相关内容