vim - abra o arquivo e vá para o número da linha usando <filename>: <line nbr>:

21

Várias ferramentas como grep, py.test, etc ... usar o padrão <FileName>:<line number>:para apontar para erros. Por exemplo:

; grep -Hn Common setup.cfg
setup.cfg:11:    Common

Como posso modificar o vim e o gvim para poder invocá-los da seguinte maneira:

gvim setup.cfg:11:

ao invés de

gvim setup.cfg +11

Eu sei que posso escrever um pequeno script de shell que analise as coisas, mas me pergunto se existe uma maneira mais fácil.

Sardathrion - Restabelecer Monica
fonte
2
Isso não é exatamente análogo, mas o vim tem um recurso para carregar a saída do grep ou (por exemplo) erros do compilador do make e navegar entre eles. Veja :help quickfixpara mais informações.
usar o seguinte código

Respostas:

16

Você pode usar o plugin file: line disponível aqui , que faz exatamente o que você deseja ...

mmigdol
fonte
11
Com certeza, e com o bônus adicional, você pode usar o vundle para instalá-lo.
Sardathrion - Reinstale Monica
11
O plug - in de linha de arquivo de referências tem alguns problemas, incluindo quebra quando as guias estão em uso. O vim-fetch faz o que a linha de arquivo faz, mas melhor.
Lekensteyn
9

Não existe um caminho, e acho que um script é o único caminho. O motivo é que, se você tivesse um arquivo chamado setup.cfg: 11 e quisesse editá-lo?

Aqui está um script rápido que faz o que você quer como oneliner ...

editline() { vim ${1%%:*} +${1##*:}; }
Julian
fonte
Desculpe, isso não é exato: e se você tivesse um arquivo chamado +11? Você pode, é claro, usar --para isso.
Sardathrion - Restabelece Monica
2
Você pode editar um arquivo +11 dizendo vim ./+11
Julian
3

Com o Vundle.vim , adicione isso ao seu .vimrc:

Plugin 'bogado/file-line'
Dorian
fonte
@ Sardathrion: Quais problemas você tem?
Dorian
Mudei para o neovim e há muitos problemas que marcam outros módulos (ou o que o neovim os chama) como incompatíveis.
Sardathrion - Restabelece Monica
0

Você também pode usar esse alias:

alias gd 'set number=`echo \!:1 | perl -pe "s/([0-9]*:)?(.+)[,:]([0-9]+).*/\3/"`; set file=`echo \!:1 | perl -pe "s/([0-9]*:)?(.+)[,:]([0-9]+).*/\2/"`; eval "if ($number == $file) then \\
   gvim $file \\
else \\
   gvim $file +$number \\
endif"'
user2683458
fonte