Kompilowanie kodu z vima

18

Nowość vimi chcę móc kompilować kod od wewnątrz vimbez uruchamiania nowego terminala i wywoływania kompilatora.

Jak mam to zrobić? Zauważ, że ten wymóg nie jest ograniczony gcctylko, czasami muszę zadzwonić pythonrównież na bieżący skrypt, nad którym pracuję, więc masz pomysł ...

phunehehe
źródło

Odpowiedzi:

25

Napisz Makefile, a następnie możesz po prostu:

:make

od wewnątrz vim. A jeśli kompilacja się nie powiedzie:

:copen

pokaże ostrzeżenia i błędy. Wybranie ich spowoduje przejście do odpowiedniego pliku i wiersza.

Chris
źródło
12

W vimie bieżący plik można nazwać tak %, więc

:!python %

Zobacz :he cmdline-special(lub tutaj )

Glenn Jackman
źródło
6

Jeśli z jakiegoś powodu nie lubisz plików makefile, możesz wywołać dowolne polecenie za pomocą:!

Na przykład możesz użyć „:! Javac * .java && java Foo”, aby skompilować i uruchomić prosty program Java. Możesz także w ten sposób wywoływać inne systemy kompilacji (scons, cmake, ...).

stribika
źródło
3

Wypróbuj wtyczkę Quickrun dla Vima. Strona zawiera link do github, która jest najnowszą wersją i której używam.

Zaletą korzystania z tej wtyczki w przeciwieństwie do robienia :!, dane wyjściowe polecenia zostaną zebrane i wyświetlone w podzielonym oknie.

Ponadto domyślnie wtyczka zawiesi instancję vima, gdy poprosisz ją o wykonanie polecenia, ale można ją skonfigurować tak, aby uruchamiała polecenie asynchronicznie, co właśnie robię. Przeczytaj dokumentację, aby uzyskać więcej informacji.

Shrikant Sharat
źródło
3

Używam vima, który ma skompilowany interpreter Pythona.

Źródło pliku Python, który ma tę funkcję:

def pyterm(filename="", interactive=1):
    cmd = "%s %s %s " % (PYTHON, "-i" if interactive else "", filename)
    if "DISPLAY" in os.environ:
        return run_config(os.environ.get("XTERM"), cmd)
    else:
        return os.system(cmd)

I zamapuj go na skrót klawiaturowy:

nmap ;ru :update<CR>:python pyterm(vim.current.buffer.name, 0)<CR>
nmap ;ri :update<CR>:python pyterm(vim.current.buffer.name, 1)<CR>

Wcześniej ustawiłem niektóre zmienne środowiskowe, aby określić dokładny terminal do uruchomienia, jeśli używasz gvim, lub w tym samym terminalu, jeśli nie w X.

Następnie zwykle po prostu wpisuję „; ri” w buforze Pythona, aby go uruchomić (zwykle w celu przetestowania).

Keith
źródło
2

Vima można użyć do kompilacji za pomocą gnu make na bieżącym pliku - nawet jeśli nie ma Makefile dla tego pliku (więcej szczegółów tutaj ):

:make %:r

W ten sposób vim zapewnia dostęp do informacji o błędach szybkiej naprawy z listy kompilatora ( :help quickfix) - :cnNastępny błąd, :cpPoprzedni błąd, :cwBłędy listy nowego okna.

Jeśli nie masz make gnu, możesz ustawić zmienną makeprg (zmień na g ++, jeśli kompilujesz C ++):

:se makeprg=gcc\ -o\ %<\ %

a następnie użyj polecenia vim make, aby skompilować bieżący plik i uzyskać listę szybkich błędów w vimie:

:make

EDYCJA: Jeśli chcesz uruchomić skompilowany plik wykonywalny z poziomu vima, możesz to zrobić („!” Wykonuje, „%: r” to nazwa pliku bez sufiksu):

:!./%:r
Pierz
źródło
1

W przypadku gcc, python itp. Możesz to nazwać dwukropkiem (:!)

Na przykład. :!python something.py

JinX
źródło
0
!gcc file.c && ./a.out

Spowoduje to skompilowanie pliku C, a także uruchomienie pliku wykonywalnego z pytaniem o dane wejściowe w oknie vim.

Hasil Sharma
źródło
1
Pełniejsza odpowiedź obejmowałaby „:”, a aby była bardziej uniwersalna, można zmienić „file.c” dla bieżącego operatora plików „%”::!gcc % && ./a.out
Pierz
Robię coś podobnego w moim .vimrc, Command + Shift + Rmap <D-R> :exe '!gcc %:p' <bar> exe '!'.getcwd().'/a.out'<cr>
mapuję
0

Odnośnie konkretnego przypadku kompilacji kodu źródłowego.

A jeśli masz coś, co może skompilować Pythona, ustaw makeprgodpowiednio.

Luc Hermitte
źródło