Dado o resultado do grep -n, como posso abrir o vim nessa linha específica? (usando apenas teclado)

9

Quando executo grep "keyword" -ne obtenho a seguinte lista de resultados:

a/b/c:10:    keyword
a/b/c:70:    keyword
a/b/d:50:    keyword

Como posso abrir um dos arquivos (digamos o 2º da lista) na linha encontrada?

Agora, apenas copio a saída usando o mouse, copio depois vime depois adiciono +o número da linha que copio. (ou seja, eu escrevo vim a/b/c +70usando a cópia do mouse para obter o nome do arquivo e outra cópia do mouse para obter o número da linha [ou apenas copio à mão, quando for suficientemente curto])

Existe uma maneira de fazer isso com um atalho de teclado?

CIsForCookies
fonte
Você pode tentar algo assim: echo a/b/c:70: keyword | awk '{print $1}' | sed 's,:$,,' | sed 's,:, +,' | xargs vim && reset.
Arkadiusz Drabczyk
2
Além disso, se você estiver interessado em usar o Vim com mais eficiência, consulte o site dedicado ao Vi e Vim Stack Exchange.
Muru

Respostas:

14

Duas coisas:

  1. O Vim tem algum suporte para grep.

    Se você abrir o Vim, e o fizer :grep keyword ..., o Vim preencherá a lista de correções rápidas com os resultados e passará para o primeiro arquivo. Você pode então ir para o n º quickfix entrada com :cc n(e outros comandos).

  2. Você pode preencher a lista de correções rápidas mencionada usando a saída do grep:

    vim -q <(grep -n keyword ...)
    

    E, em seguida, use os comandos de navegação do quickfix mencionados acima.

Ou é mais simples do que brincar com a saída do grep manualmente.

Como alternativa a (2), você pode salvar a saída do grep em um arquivo e usá-lo, se achar que não abrirá o Vim depois:

grep ... | tee log
vim -q log
muru
fonte
Tentando usar o mesmo método no status do git, sem sucesso :( - vim -q <(status do git | grep modificado)
CIsForCookies
3
@CIsForCookies Isso não terá o mesmo formato que grep -n( <filename>:<line>: ...). Eu uso o plugin fugitivo para o Git e, em seguida, é uma questão de :Gstatusmudar para o arquivo desejado e pressionar Enter.
Muru
BTW, eu editei o meu ~ / .bashrc grep alias para usar cores sempre, e que, por alguma razão, quebrou a -q >()opção ...
CIsForCookies
2

Você poderia fazer isso se não houvesse suporte para grep já que o @muru respondeu:

:cexpr system("grep -n keyword")

Pode ser usado com outro comando, git greppor exemplo.

Além disso, você pode abrir a saída em um buffer e usar "cbuffer" nele.

Consulte a seção quickfix do manual sobre isso.

max630
fonte