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 , который делает именно то, что вы хотите ...


1
Это действительно так и с дополнительным бонусом, что вы можете использовать Vundle для его установки.
Сардатрион - Восстановить Монику

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

9

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

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

editline() { vim ${1%%:*} +${1##*:}; }

Извините, это не точно: что если у вас есть файл с именем +11? Вы можете, конечно, использовать --для этого.
Сардатрион - Восстановить Монику

2
Вы можете отредактировать файл +11, сказав vim ./+11
Julian


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"'
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.