vim - otwórz plik i numer linii goto używając <nazwa_pliku>: <linia nbr>:

21

Kilka narzędzi, takich jak grep, py.testitd ... użyć wzoru <FileName>:<line number>:do punktu na błędy. Na przykład:

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

Jak mogę zmodyfikować vim i gvim, aby móc je wywoływać w następujący sposób:

gvim setup.cfg:11:

zamiast

gvim setup.cfg +11

Wiem, że potrafię napisać mały skrypt powłoki, który analizowałby różne rzeczy, ale zastanawiam się, czy jest łatwiejszy sposób.

Sardathrion - Przywróć Monikę
źródło
2
Nie jest to dokładnie analogiczne, ale vim ma funkcję ładowania danych wyjściowych z błędów grep lub (na przykład) błędów kompilatora z make i nawigowania między nimi. Zobacz :help quickfixwięcej informacji.
Random832

Odpowiedzi:

16

Możesz użyć wtyczki file: line dostępnej tutaj , która robi dokładnie to, co chcesz ...

mmigdol
źródło
1
Z pewnością tak jest i dzięki dodatkowej premii, że można użyć programu Vundle, aby go zainstalować.
Sardathrion
1
Wtyczka pliku linii odnośników ma pewne problemy, w tym uszkodzenie, gdy używane są strony z kartami. vim-fetch robi to, co robi linia pliku, ale lepiej.
Lekensteyn,
9

Nie ma sposobu i myślę, że skrypt jest jedynym sposobem. Powodem jest to, że jeśli masz plik o nazwie setup.cfg: 11 i chcesz go edytować?

Oto krótki skrypt, który robi to, co chcesz jako oneliner ...

editline() { vim ${1%%:*} +${1##*:}; }
juliański
źródło
Przykro nam, to nie jest dokładne: co, jeśli plik miał nazwę +11? Możesz oczywiście użyć --do tego.
Sardathrion - Przywróć Monikę
2
Możesz edytować plik +11, mówiąc vim ./+11
Julian
3

W Vundle.vim dodaj to do .vimrc:

Plugin 'bogado/file-line'
dorycki
źródło
@Sardathrion: Jakie masz problemy?
Dorian
Przeprowadziłem się do neovim i istnieje wiele problemów, które oznaczają inne moduły (lub jakkolwiek je nazywają) jako niekompatybilne.
Sardathrion - Przywróć Monikę
0

Możesz także użyć takiego aliasu:

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"'
użytkownik2683458
źródło