vim - открыть файл и перейти к номеру строки, используя <filename>: <line nbr>:

21

Несколько инструментов, таких как grep, py.testи т.д ... используют шаблон <FileName>:<line number>:для указания на ошибки. Например:

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

Как я могу изменить vim и gvim так, чтобы я мог вызывать их так:

gvim setup.cfg:11:

вместо того

gvim setup.cfg +11

Я знаю, что могу написать небольшой скрипт оболочки, который бы разбирал вещи, но мне интересно, есть ли более простой способ.

Сардатрион - Восстановить Монику
источник
2
Это не совсем аналогично, но у vim есть возможность загружать вывод из grep или (например) ошибок компилятора из make и перемещаться между ними. Смотрите :help quickfixдля получения дополнительной информации.
Random832

Ответы:

16

Вы можете использовать доступный здесь плагин file: line , который делает именно то, что вы хотите ...

mmigdol
источник
1
Это действительно так и с дополнительным бонусом, что вы можете использовать Vundle для его установки.
Сардатрион - Восстановить Монику
1
Плагин строки файла ссылок имеет некоторые проблемы, в том числе неработоспособность при использовании вкладок. vim-fetch делает то же, что и file-line, но лучше.
Лекенстейн
9

Нет пути, и я думаю, что сценарий - единственный путь. Причина в том, что если у вас есть файл с именем setup.cfg: 11 и вы хотите отредактировать его?

Вот быстрый скрипт, который делает то, что вы хотите, как пользователь ...

editline() { vim ${1%%:*} +${1##*:}; }
юлианский
источник
Извините, это не точно: что если у вас есть файл с именем +11? Вы можете, конечно, использовать --для этого.
Сардатрион - Восстановить Монику
2
Вы можете отредактировать файл +11, сказав vim ./+11
Julian
3

С Vundle.vim добавьте это в свой .vimrc:

Plugin 'bogado/file-line'
Дориан
источник
@Sardathrion: Какие проблемы у вас есть?
Дориан
Я перешел на neovim, и есть много проблем, которые помечают другие модули (или как их называет neovim) как несовместимые.
Сардатрион - Восстановить Монику
0

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

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"'
user2683458
источник