vimからコードをコンパイルする


18

新規vimおよびvim新規ターミナルを実行してコンパイラーを呼び出すことなく、内部からコードをコンパイルできるようにしたい。

これを行うにはどうすればよいですか?この要件はこれに限定されないことに注意してください。私が作業している現在のスクリプトをgcc呼び出す必要がある場合があるpythonので、アイデアを得ることができます...

回答:


25

を書くとMakefile、次のことが簡単にできます。

:make

vimの中から。そして、コンパイルが失敗した場合:

:copen

警告とエラーが表示されます。それらを選択すると、適切なファイルと行に移動します。



6

何らかの理由でメイクファイルが気に入らない場合は、:!

たとえば、「:! javac * .java && java Foo」を使用して、単純なjavaプログラムをコンパイルおよび実行できます。この方法で他のビルドシステム(scons、cmakeなど)を呼び出すこともできます。


3

Vim のquickrunプラグインをお試しください。このページには、最新バージョンであり、私が使用しているgithubへのリンクが含まれています。

実行するの:!ではなく、このプラグインを使用する利点は、コマンドからの出力が収集され、分割ウィンドウに表示されることです。

また、デフォルトでは、プラグインはコマンドの実行を要求するとvimインスタンスをハングさせますが、コマンドを非同期に実行するように構成することができます。詳細についてはドキュメントをお読みください。


3

Pythonインタープリターがコンパイルされたvimを使用します。

この機能を持つpythonファイルをソースします。

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)

そして、それをキーボードショートカットにマッピングします。

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

以前にgvimを使用している場合は実行する正確な端末を、Xを使用していない場合は同じ端末で実行するいくつかの環境変数を設定しました。

次に、通常はPythonバッファーに「; ri」と入力して実行します(通常はテストするため)。


2

Vimは、現在のファイルでgnu makeを使用してコンパイルするために使用できます-ファイルのMakefileがない場合でも(詳細はこちらを参照してください):

:make %:r

このようにして、vimはコンパイラ()リストからのクイックフィックスエラーフィードバックへのアクセスを提供します:help quickfix- :cn次のエラー、:cp前のエラー、:cwエラーをリストする新しいウィンドウ。

gnu makeがない場合は、makeprg変数を設定できます(C ++をコンパイルする場合はg ++に変更します)。

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

そして、vim makeコマンドを使用して現在のファイルをコンパイルし、vimのエラーのクイックフィックスリストを取得します。

:make

編集:コンパイル済みの実行可能ファイルをvim内から実行する場合も実行できます(「!」が実行され、「%:r」は接尾辞のないファイル名です):

:!./%:r

1

gcc、pythonなどの場合、コロンバン(:!)で呼び出すことができます。

例えば。 :!python something.py


0
!gcc file.c && ./a.out

これにより、Cファイルがコンパイルされ、vimウィンドウ内ですべての入力を要求する実行可能ファイルが実行されます。


1
、そしてそれはより多くのあなたが現在のファイル演算子「%」は「FILE.C」を変えることができる汎用性にするために:「」:より完全な答えが含まれるであろう:!gcc % && ./a.out
Pierz

私は似たようなことをしています、私.vimrcはにマッピングCommand + Shift + Rします:map <D-R> :exe '!gcc %:p' <bar> exe '!'.getcwd().'/a.out'<cr>
f1lt3r

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.