我知道如何使用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
如何为命令创建别名?
它只打印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)