Est-il possible d'ouvrir un fichier avec un numéro de ligne spécifique tel que mis en forme dans les résultats de grep -n?

4

J'utilise souvent grepavec l' -noption de lister les numéros de ligne, par exemple

$ 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;
$

Serait-il possible de créer vimun alias de telle sorte que

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

ouvrirait le fichier et chercherait automatiquement la ligne 415?

Est-ce possible dans csh? (Oui, oui, cshfait ressortir le diable et tout ce qui est impie; mais je n'ai pas le choix ...) Une réponse pour d'autres coquilles serait également utile.

Andrew Cheong
la source

Réponses:

7

Eh bien, ce n'est pas un alias, vous pouvez utiliser vim comme ceci:

vim +<LineNumberHere> fileName

Donc, par exemple

vim +150 .bash_history

ouvre votre fichier .bash_history (pour bash) et va à la ligne 150.

Incidemment, vous pouvez également le faire avec des termes de recherche. Par exemple

vim +/MyTerm MyFile

ouvre MyFile et navigue vers la première occurrence de MyTerm à partir du haut.

Prendre plaisir!

David Moye
la source
1
cela devrait être "vim + / MyTerm MyFile"
Uwe
Excuses pour le retard accepter; J'avais eu envie de faire un cshalias qui correspondrait à la forme ci-dessus, mais je ne l'ai jamais fait.
Andrew Cheong
c'est bien. Il fonctionne avec des commandes à l' intérieur vim aussi: :tabe +150 file,:tabe +/FooBar file
Dvir Azulay
4

Une solution à ce problème consiste à utiliser le plug- in file_line.vim , qui vous permet de spécifier un nom de fichier et un numéro de ligne en tant qu'argument pour Vim ou sur la ligne de commande de Vim, comme vous l'avez montré.

Un autre est ce script,

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

tmp=$(mktemp)

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

qui peut être utilisé comme ceci:

$ grep -Hn xyz .* | vimgrep

et qui charge toutes les correspondances dans la liste d'erreurs de correction rapide de Vim. Voir

:help quickfix.txt

Notez l' -Hoption de grep pour vous assurer que le nom de fichier est inclus dans la sortie de grep même s'il est .*étendu à un seul nom de fichier.

Garyjohn
la source
En raison de la publicité apparaissant au bas de ma hauteur d'écran pour ce fil, je n'ai même jamais vu cette réponse jusqu'à aujourd'hui; excuses. J'ai déjà accepté l'autre réponse, mais Karma est en route :)
Andrew Cheong
1

Vous pouvez faire votre recherche à partir de Vim lui-même:

:grep xyz *

puis ouvrez la fenêtre de correction rapide:

:cw
romainl
la source
1

vim-fetch est capable d’ouvrir des fichiers à un emplacement spécifique fourni en tant que valeurs séparées par des deux points.

phil pirozhkov
la source