2013-10-08 22 views
5

Mam maszynę Linux, której używam do budowania mojego projektu (C++/make). Mam katalog projektu zamontowany na moim komputerze Mac, w którym edytuję używając macvim.Vim quickfix i zdalna kompilacja

Udało mi się ustawić ustawienie makeprg, aby :make wydał zdalną kompilację na moim komputerze z systemem Linux. Chciałbym jednak użyć funkcji quickfix vima. Jedyny problem jaki mam to to, że listy plików nie pasują do siebie.

np. na zdalnym komputerze źródło i plik makefile znajdują się w ~/repos/myproject, który w moim mac jest zamontowany na /net/mylinuxmachine/home/myuser/repos/myproject. To powoduje, że vim nie poprawnie otwiera plik, którego dotyczy problem, w przypadku błędu kompilacji.

mam ustawić mój makeprg tak:

:set makeprg=ssh\ mylinuxmachine\ \"make\ -C\ repos/myproject\" 

Czy mogę coś zrobić aby to działało?

z góry dzięki!

Odpowiedz

2

Rozumiem. Ingo popchnął mnie we właściwym kierunku.

Podczas eksperymentowania zmęczyłem wszystkich ucieczce, więc stworzyłem następujące trochę shellscript:

project=$1 
ssh mylinuxmachine "make -C repos/$myproject" 2>&1 | sed "s#/home/myuser/repos/$project/##g" 

Wywoła make -C na danym katalogu projektu, scalanie stdout i stderr (od komunikaty o błędach wyjdzie poprzez stderr) i rura do sed, która po prostu usunie bezwzględną ścieżkę w komunikatach o błędach (co spowoduje tylko względną ścieżkę do pliku, którego dotyczy problem, z katalogu głównego projektu - gdzie mój pwd zwykle znajduje się w vimie).

Potem ustawić makeprg do wykonania skryptu z projektem chcę zbudować:

:set makeprg=./makeprg.sh\ myproject 

działa jak czar teraz!

dzięki

+1

Cieszę się, że znalazłem rozwiązanie! Użycie ': let & makeprg = '...'' zamiast ': set' złagodziłoby nieco ucieczkę, ale wyodrębnienie skryptu powłoki również wygląda jak dobre podejście! –

6

Skoro jesteś manipulowania opcję 'makeprg', w każdym razie, chciałbym dodać własny filtr (na przykład z sed), który przetwarza zdalny filespec do lokalnego punktu montowania, na przykład:

:set makeprg=ssh\ mylinuxmachine\ \"make\ -C\ repos/myproject\"\|sed\ \"s#/home/myuser#/net/mylinuxmachine/home/myuser#g\" 
+0

upvote, bo wskazał mnie we właściwym kierunku – DeX3

Powiązane problemy