É possível abrir um arquivo para um número de linha específico como formatado em grep -n results?

3

Costumo usar grep com a opção -n para listar números de linha, por exemplo.

$ grep -n xyz .*
/ext1/acheong/foo/bar/a.cc:42:    inline bool abc(int xyz);
/ext1/acheong/foo/bar/a.cc:43:    inline bool def(int xyz);
/ext1/acheong/foo/bar/b.cc:415:            int xyz = result;
/ext1/acheong/foo/bar/b.cc:490:                xyz += result;
$

Seria possível alias vim de tal forma que fazer

vim /ext1/acheong/foo/bar/b.cc:415

abriria o arquivo e buscaria a linha 415 automaticamente?

É possível em csh ? (Sim, sim, csh traz o diabo e tudo o que é profano; mas não tenho escolha ...) Uma resposta para outras conchas também seria útil.

    
por Andrew Cheong 19.04.2013 / 19:55

4 respostas

6

Bem, não é um alias, você pode usar o vim assim:

vim +<LineNumberHere> fileName

Então, por exemplo

vim +150 .bash_history

abre seu arquivo .bash_history (para o bash) e navega para a linha 150.

Aliás, você também pode fazer isso com termos de pesquisa. Por exemplo

vim +/MyTerm MyFile

abre MyFile e navega para a primeira ocorrência do MyTerm a partir do topo.

Aproveite!

    
por 19.04.2013 / 20:26
4

Uma solução para isso é usar o plug-in file_line.vim , que permite especificar um nome de arquivo e número de linha como um argumento para o Vim ou na linha de comando do Vim, assim como você mostrou.

Outro é esse script,

$ cat $(which vimgrep)
#!/bin/bash

tmp=$(mktemp)

cat > $tmp
exec < /dev/tty
vim --cmd 'let &efm=&gfm' -q $tmp "$@"
rm $tmp

que pode ser usado assim:

$ grep -Hn xyz .* | vimgrep

e que carrega todas as correspondências na lista de erros do Vim. Veja

:help quickfix.txt

Observe a opção -H para garantir que o nome do arquivo seja incluído na saída do grep, mesmo se .* se expandir para apenas um nome de arquivo.

    
por 19.04.2013 / 20:30
1

Você poderia fazer seu grepping do próprio Vim:

:grep xyz *

abra a janela de quickfix:

:cw
    
por 20.04.2013 / 08:10
1

O vim-fetch é capaz de abrir arquivos em um local específico, desde valores separados por dois pontos.

    
por 06.03.2017 / 07:34

Tags