Como faço um alias bash que produza nomes de arquivos em um formato que eu possa canalizar para o vim?

3

Quando rebasing com git, estou interessado em abrir os arquivos que possuem conflitos de mesclagem.

Eu posso fazer isso com:

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

mas se eu aliasse isso:

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

Não vai funcionar. Eu também tentei escrever isso como uma função, sem sucesso.

Qual é a sintaxe correta?

edit: esta resposta parece basear-se na diferença entre como aliases lidam com novas linhas, e como o prompt as manipula.

    
por New Alexandria 06.01.2013 / 06:19

3 respostas

1

Estou faltando alguma coisa? Por que você não define apenas o alias para ser o comando?

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

ou

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

(Você não precisa ter o ; no final.)

    
por 06.01.2013 / 06:41
1

Isso funciona aqui:

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

Você pode querer usar cut em vez de awk:

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

Note que isso não funcionará com nomes de arquivos com espaços em branco.

    
por 06.01.2013 / 12:46
-1

Descobri que aliases / functions manipulam resultados com novas linhas de maneira diferente do prompt .

A única solução que encontrei para trabalhar é substituir as novas linhas por espaços. Existem muitas soluções para esse problema , mas encontrei tr para ser o mais sucinto para este trabalho:

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

Esse alias foi útil para editar conflitos de mesclagem ao usar git rebase . Se você quisesse abrir os arquivos que git status marcou como modificados:

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

M é apenas uma das opções de alteração para git , veja a lista completa aqui .

    
por 06.01.2013 / 19:43

Tags