Ist es möglich, eine Datei mit einer bestimmten Zeilennummer zu öffnen, die in grep -n Ergebnissen formatiert ist?

1069
Andrew Cheong

Ich benutze oft grepdie -nOption, um Zeilennummern aufzulisten, z

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

Wäre es möglich, vimdas so zu tun

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

würde die Datei öffnen und Zeile 415 automatisch suchen?

Ist es möglich in csh? (Ja, ja, cshbringt den Teufel und alles Unheilige zum Vorschein; aber ich habe keine Wahl ...) Eine Antwort auf andere Granaten wäre auch nützlich.

3

4 Antworten auf die Frage

6
David Moye

Nun, es ist kein Alias, du kannst vim so verwenden:

vim +<LineNumberHere> fileName

Also zum Beispiel

vim +150 .bash_history 

öffnet Ihre .bash_history-Datei (für Bash) und navigiert zu Zeile 150.

Das können Sie übrigens auch mit Suchbegriffen. Zum Beispiel

vim +/MyTerm MyFile 

öffnet MyFile und navigiert von oben zum ersten Vorkommen von MyTerm.

Genießen!

das sollte "vim + / MyTerm MyFile" sein Uwe vor 11 Jahren 1
Entschuldigung für die späten akzeptieren; Ich wollte einen `csh`-Alias ​​machen, der dem obigen Formular entspricht, aber ich bin nie dazu gekommen. Andrew Cheong vor 10 Jahren 0
das ist toll. Es funktioniert auch mit Befehlen in vim: `: tabe +150 file`,`: tabe + / FooBar file` Dvir Azulay vor 8 Jahren 0
4
garyjohn

One solution to this is to use the file_line.vim plugin, which lets you specify a file name and line number as an argument to Vim or on Vim's command line, just as you've shown.

Another is this script,

$ cat $(which vimgrep) #!/bin/bash tmp=$(mktemp) cat > $tmp
exec < /dev/tty 
vim --cmd 'let &efm=&gfm' -q $tmp "$@" rm $tmp 

which can be used like this:

$ grep -Hn xyz .* | vimgrep 

and which loads all the matches into Vim's quickfix error list. See

:help quickfix.txt 

Note the -H option to grep to ensure that the file name is included in grep's output even if .* expands to only one file name.

Aufgrund der Anzeige ganz unten in meiner Bildschirmhöhe für diesen Thread habe ich diese Antwort bis heute nicht gesehen. Entschuldigung. Ich habe die andere Antwort bereits akzeptiert, aber Karma ist unterwegs :) Andrew Cheong vor 10 Jahren 0
1
romainl

You could do your grepping from Vim itself:

:grep xyz * 

then open the quickfix window:

:cw 
1
phil pirozhkov

vim-fetch kann Dateien an einem bestimmten Ort öffnen, der als durch Doppelpunkte getrennte Werte angegeben ist.