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

Hem*_*ish 5 bash vim alias

在 .bashrc 文件中设置别名

alias l='ls -l'
Run Code Online (Sandbox Code Playgroud)

Vim 内部:

:! l
[No write since last change]
/bin/bash: l: command not found

shell returned 127
Run Code Online (Sandbox Code Playgroud)

Kus*_*nda 6

别名不会被继承,因此 Vim 启动的 shell 不会继承您启动编辑器的 shell 中可用的别名。

~/.bashrc文件仅为交互式 shell 会话读取,并且您从 Vim 启动的 shell 不是交互式的。此外,bash默认情况下,shell 不会在非交互式 shell 中扩展别名。

要运行一个名为命令l从Vim,该命令必须是可用的外部命令(在你如脚本的地方$PATH),或者你可以使用一个单独的$BASH_ENV文件(即在非交互shell中运行任何东西之前读取文件) 来设置适合您想要执行的操作的 shell 环境。

要使用$BASH_ENV“技巧”,请确保您的~/.vimrc文件(或等效文件)将此环境变量设置为包含必要设置代码的文件的路径名:

let $BASH_ENV = "~/.vim_bash_env"
Run Code Online (Sandbox Code Playgroud)

然后创建~/.vim_bash_env

shopt -s expand_aliases
source ~/.bashrc
Run Code Online (Sandbox Code Playgroud)

这将启用别名的扩展,即使 shell 会话是非交互式的,然后它会读取您的~/.bashrc文件,其中可能定义了您的别名。

然后你可以在 Vim 的!命令中使用你的别名。

请注意,您在 Vim 中$BASH_ENV执行的任何命令都会读取并执行指向的文件,!如果您的~/.bashrc文件执行其他操作,例如启动tmux或其他服务,那么您从 Vim 启动的任何命令也会发生这种情况。因此,这将是审慎的因素了别名和/或外壳函数定义成一个新的~/.bash_aliases文件,该文件是从源代码 ~/.vim_bash_env~/.bashrc