Ouvrir un fichier à la bonne ligne avec Vim et Bash
Lorsque je lis un message d'erreur du type Undefined index: customized_product_quantity in /var/www/html/foo/bar/product.php on line 49
, je veux pouvoir copier-coller ce message dans un terminal pour ouvrir le fichier à la ligne 49 en faisant juste vi /var/www/html/foo/bar/product.php on line 49
.
De même, lorsque je fais un grep -nr '$const' classes/
qui me retourne classes/ImageManager.php:321: $finfo = finfo_open($const);
, je veux pouvoir copier-coller en vi classes/ImageManager.php:321:
pour ouvrir ce fichier à la ligne 321.
Pour cela, j'utilise deux choses :
- Le plugin file:line dans ~/.vim/plugin
- Cette fonction dans ~/.bashrc :
function vi { if [[ "$2" = "on" && "$3" = "line" && "$4" =~ [0-9][0-9]* ]]; then eval 'vim "$1" +$4' else eval 'vim "$@"' fi }
Bien sûr, cette instructioneval
est dangereuse. Il ne s'agit pas de l'utiliser sans savoir ce qu'on copie-colle sur la ligne de commande, mais c'est valable pour toute ligne de commande.