在 .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)
别名不会被继承,因此 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
。