我知道如何使用git在vim中打开多个修改过的文件。
vim -O $(git status -uno -s | awk '{print $2}')
但是当我在.bashrc文件中添加此命令
export vim_open="vim -O $(git status -uno -s | awk '{print $2}')"
它无法正常工作。我尝试回显它,但它仅打印vim -O
。
编辑:我的错:git status -uno -s
如何为命令创建别名?
答案 0 :(得分:8)
仅打印vim -O。
整个右侧在双引号内;这意味着在定义变量时,将立即评估命令替换($(...)
)。如果(此时)您不在Git工作副本中,则会出现错误;如果没有修改过的文件,则结果将为空,并将其保存在变量中。
export
命令用于环境变量;在Bash中,有一个单独的alias
命令:
alias vim_open='vim -O $(git stat -uno -s | awk '\''{print $2}'\'')'
请注意我如何使用单引号来避免立即执行嵌入式命令替换(然后必须转义其他嵌入式单引号)。另外,我可以保留双引号,而仅将$
字符转义以进行命令替换和变量引用:
alias vim_open="vim -O \$(git stat -uno -s | awk '{print \$2}')"
最后,要保留将命令行参数传递给Vim的能力(这些必须在文件列表的之前,但别名只能在末尾附加它们),您必须而是定义一个shell函数:
vim_open()
{
# v--- arguments passed to vim_open are inserted here
vim "$@" -O $(git stat -uno -s | awk '{print $2}')
}
答案 1 :(得分:2)
我还可以建议在标签中打开所有已修改文件的类似别名
alias vmod='vim -p `git diff --name-only `'