通过vim打开多个文件

GAV*_*AVD 2 git vim

我知道如何使用git在vim中打开多个修改过的文件.

vim -O $(git status -uno -s | awk '{print $2}')
Run Code Online (Sandbox Code Playgroud)

但是当我在.bashrc文件中添加此命令时

export vim_open="vim -O $(git status -uno -s | awk '{print $2}')"
Run Code Online (Sandbox Code Playgroud)

它没有像我期望的那样工作.我尝试回应它,但它只打印vim -O.

编辑:我的坏: git status -uno -s

如何为命令创建别名?

Ing*_*kat 8

它只打印vim -O.

整个右侧是双引号; 这意味着在定义变量时会立即计算命令substitution($(...)).如果(在那一点上)你不在Git工作副本中,你将收到错误; 如果没有修改过的文件,结果将为空,并且它会保留在您的变量中.

一个合适的别名

export命令用于环境变量 ; 在Bash中,有一个单独的alias命令:

alias vim_open='vim -O $(git stat -uno -s | awk '\''{print $2}'\'')'
Run Code Online (Sandbox Code Playgroud)

注意我是如何使用单引号来避免立即执行嵌入式命令替换(然后必须转义其他嵌入式单引号).或者,我可以保留双引号并仅转义$字符以进行命令替换和变量引用:

alias vim_open="vim -O \$(git stat -uno -s | awk '{print \$2}')"
Run Code Online (Sandbox Code Playgroud)

具有功能的超能力

最后,为了保留将命令行参数传递给Vim的能力(这些必须在文件列表之前,但是别名只能在最后附加它们),你必须改为定义shell函数:

vim_open()
{
    #     v--- arguments passed to vim_open are inserted here
    vim "$@" -O $(git stat -uno -s | awk '{print $2}')
}
Run Code Online (Sandbox Code Playgroud)