vim: abre el archivo y pasa al número de línea usando <nombre de archivo>: <línea nbr>:

21

Varias herramientas como grep, py.testetc., usan el patrón <FileName>:<line number>:para señalar errores. Por ejemplo:

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

¿Cómo puedo modificar vim y gvim para poder invocarlos así?

gvim setup.cfg:11:

en lugar de

gvim setup.cfg +11

Sé que puedo escribir un pequeño script de shell que analizaría las cosas, pero me pregunto si hay una manera más fácil.

Sardathrion - Restablece a Monica
fuente
2
Esto no es exactamente análogo, pero vim tiene una característica para cargar la salida de grep o (por ejemplo) errores del compilador de make, y navegar entre ellos. Ver :help quickfixpara más información.
Random832

Respuestas:

16

Puede usar el complemento file: line disponible aquí , que hace exactamente lo que desea ...

mmigdol
fuente
1
Seguro que sí y con la ventaja añadida de que puede usar vundle para instalarlo.
Sardathrion - Restablece a Monica el
1
El complemento de línea de archivo de referencias tiene algunos problemas, incluida la ruptura cuando se usan páginas con pestañas. vim-fetch hace lo que hace la línea de archivos, pero mejor.
Lekensteyn
9

No hay forma, y ​​creo que un guión es la única forma. La razón es, ¿y si tuviera un archivo llamado setup.cfg: 11 y quisiera editarlo?

Aquí hay una secuencia de comandos rápida que hace lo que quiere como línea de vida ...

editline() { vim ${1%%:*} +${1##*:}; }
Julian
fuente
Lo sentimos, esto no es exacto: ¿Qué sucede si se llama un archivo +11? Puedes, por supuesto, usarlo --para eso.
Sardathrion - Restablece a Monica el
2
Puede editar un archivo +11 diciendo vim ./+11
Julian
3

Con Vundle.vim , agregue esto a su .vimrc:

Plugin 'bogado/file-line'
dorio
fuente
@Sardathrion: ¿Qué problemas tienes?
Dorian
Me mudé a neovim y hay muchos problemas que marcan a otros módulos (o como los llame neovim) como incompatibles.
Sardathrion - Restablece a Monica el
0

También puedes usar ese 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"'
usuario2683458
fuente