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ł ...

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.



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, ...).


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.


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).


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

1

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

Na przykład. :!python something.py


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.


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ę

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.