如何创建一个 bash 别名,以可以通过管道传输到 vim 的格式输出文件名?

如何创建一个 bash 别名,以可以通过管道传输到 vim 的格式输出文件名?

当使用 git 进行变基时,我有兴趣打开存在合并冲突的文件。

我可以用以下方法实现它:

vi `git diff --name-status --diff-filter=U | awk '{print $2}'`

但如果我将其加为别名:

alias gdn="vi $(git diff --name-status --diff-filter=U | awk '{print $2}')"

这行不通。我也尝试过将其写成函数,但无济于事。

正确的语法是什么?


编辑:这个答案似乎取决于别名如何处理换行符与提示如何处理换行符之间的差异。

答案1

我是不是漏掉了什么?为什么不直接将别名定义为命令呢?

alias gdn="vi `git diff --name-status --diff-filter=U | awk '{print $2}'`"

或者

alias gdn="vi $(git diff --name-status --diff-filter=U | awk '{print $2}')"

(你不需要;在最后有。)

答案2

这在这里有效:

alias gdn='vim $(git diff --name-status --diff-filter=U | awk "{print \$2}")'

您可能希望使用cut以下命令来代替 awk:

alias gdn='vim $(git diff --name-status --diff-filter=U | cut -f2)'

请注意,这不适用于包含空格的文件名。

答案3

我找到别名/函数以不同于迅速的

我发现唯一可行的解​​决方案是用空格替换换行符。 这个问题有很多解决办法,但我发现tr对于这项工作来说最简洁的是:

alias gdn="vim $(git diff --name-status --diff-filter=U | cut -f2 | tr '\n' ' ' )"

该别名在使用时对于编辑合并冲突很有用。如果您想打开已标记为已修改的git rebase文件:git status

alias gsm="vim $(git status --porcelain | cut -f2 -s -d 'M' | tr '\n' ' ' )"

M只是 的其中一个变更选项git点击此处查看完整列表

相关内容