vim - ouvrir le fichier et aller au numéro de ligne en utilisant <nomfichier>: <ligne nbr>:


21

Plusieurs outils tels que grep, py.test, etc ... utiliser le modèle <FileName>:<line number>:pour pointer vers des erreurs. Par exemple:

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

Comment puis-je modifier vim et gvim afin de pouvoir les invoquer comme ceci:

gvim setup.cfg:11:

au lieu de

gvim setup.cfg +11

Je sais que je peux écrire un petit script shell qui analyserait les choses mais je me demande s'il existe un moyen plus simple.


2
Ce n'est pas exactement analogue, mais vim a une fonctionnalité pour charger la sortie de grep ou (par exemple) des erreurs de compilation de make, et naviguer entre elles. Voir :help quickfixpour plus d'informations.
Random832

Réponses:


16

Vous pouvez utiliser le plugin file: line disponible ici , qui fait exactement ce que vous voulez ...


1
C'est sûr et avec le bonus supplémentaire que vous pouvez utiliser vundle pour l'installer.
Sardathrion

1
Le plugin de ligne de fichier de références a quelques problèmes, y compris des cassures lorsque les pages à onglet sont en cours d'utilisation. vim-fetch fait ce que fait file-line, mais mieux.
Lekensteyn

9

Il n'y a pas de moyen, et je pense qu'un script est le seul moyen. La raison en est, et si vous aviez un fichier appelé setup.cfg: 11 et que vous vouliez le modifier?

Voici un script rapide qui fait ce que vous voulez comme oneliner ...

editline() { vim ${1%%:*} +${1##*:}; }

Désolé, ce n'est pas exact: et si vous aviez un fichier appelé +11? Vous pouvez bien sûr l'utiliser --pour cela.
Sardathrion

2
Vous pouvez modifier un fichier +11 en disant vim ./+11
Julian

3

Avec Vundle.vim , ajoutez ceci à votre .vimrc:

Plugin 'bogado/file-line'

@Sardathrion: Quels problèmes avez-vous?
Dorian

Je suis passé à neovim et il y a beaucoup de problèmes qui marquent les autres modules (ou ce que neovim les appelle) comme incompatibles.
Sardathrion

0

Vous pouvez également utiliser un tel 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"'
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.