Можно ли открыть файл с определенным номером строки, отформатированный в результатах grep -n?

966
Andrew Cheong

Я часто использую grepс -nвозможностью перечисления номеров строк, например

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

Было бы возможно, чтобы псевдоним vimтаким образом, что делает

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

будет открывать файл и искать строку 415 автоматически?

Это возможно в csh? (Да, да, cshвыявляет дьявола и все нечестивое; но у меня нет выбора ...) Также был бы полезен ответ для других оболочек.

3

4 ответа на вопрос

6
David Moye

Ну, это не псевдоним, вы можете использовать vim вот так:

vim +<LineNumberHere> fileName

Так, например

vim +150 .bash_history 

открывает ваш файл .bash_history (для bash) и переходит к строке 150.

Кстати, вы также можете сделать это с помощью поисковых терминов. Например

vim +/MyTerm MyFile 

открывает MyFile и переходит к первому появлению MyTerm сверху.

Наслаждайтесь!

это должно быть "vim + / MyTerm MyFile" Uwe 11 лет назад 1
Извиняюсь за поздний приём; Я хотел создать псевдоним `csh`, который бы отображался в приведенной выше форме, но так и не нашел его. Andrew Cheong 10 лет назад 0
это замечательно. Он также работает с командами внутри vim: `: tabe +150 file`,`: tabe + / FooBar file` Dvir Azulay 8 лет назад 0
4
garyjohn

Одним из решений этой проблемы является использование плагина file_line.vim, который позволяет вам указывать имя файла и номер строки в качестве аргумента для Vim или в командной строке Vim, как вы показали.

Еще один сценарий,

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

который можно использовать так:

$ grep -Hn xyz .* | vimgrep 

и который загружает все совпадения в список ошибок быстрого исправления Vim. Увидеть

:help quickfix.txt 

Обратите внимание на -Hопцию grep, чтобы убедиться, что имя файла включено в вывод grep, даже если оно .*расширяется только до одного имени файла.

Из-за объявления, появляющегося в нижней части моего экрана для этой темы, я даже не видел этот ответ до сегодняшнего дня; Извинения. Я уже принял другой ответ, но Карма уже в пути :) Andrew Cheong 10 лет назад 0
1
romainl

Вы можете сделать свое замечание от самого Vim:

:grep xyz * 

затем откройте окно быстрого исправления:

:cw 
1
phil pirozhkov

vim-fetch может открывать файлы в определенном месте в виде значений, разделенных двоеточием.