Biên dịch mã từ vim


18

Mới vimvà tôi muốn có thể biên dịch mã từ bên trong vimmà không cần chạy một thiết bị đầu cuối mới và gọi trình biên dịch.

Làm thế nào để tôi đi về làm điều này? Lưu ý rằng yêu cầu này không bị hạn chế gccchỉ, đôi khi tôi cũng cần gọi pythoncả kịch bản hiện tại tôi đang làm, vì vậy bạn có ý tưởng ...

Câu trả lời:


25

Viết một Makefile, sau đó bạn có thể chỉ cần:

:make

từ bên trong vim. Và nếu quá trình biên dịch thất bại:

:copen

sẽ cho bạn thấy cảnh báo và lỗi. Chọn chúng sẽ đưa bạn đến tập tin và dòng thích hợp.



6

Nếu bạn không thích makefiles vì ​​một số lý do, bạn có thể gọi bất kỳ lệnh nào với :!

Ví dụ: bạn có thể sử dụng ":! Javac * .java && java Foo" để biên dịch và chạy một chương trình java đơn giản. Bạn cũng có thể gọi các hệ thống xây dựng khác (scons, cmake, ...) theo cách này.


3

Hãy thử plugin quickrun cho Vim. Trang này bao gồm một liên kết đến github, đây là phiên bản mới nhất và là thứ tôi sử dụng.

Lợi thế trong việc sử dụng plugin này trái ngược với việc làm :!, đầu ra từ lệnh sẽ được thu thập và hiển thị trong một cửa sổ phân chia.

Ngoài ra, theo mặc định, plugin đó sẽ treo ví dụ vim của bạn khi bạn yêu cầu nó thực thi một lệnh, nhưng nó có thể được cấu hình để chạy lệnh không đồng bộ, đó là những gì tôi làm. Đọc tài liệu để biết thêm chi tiết.


3

Tôi sử dụng một vim có trình thông dịch Python được biên dịch.

Tôi nguồn một tập tin python có chức năng này:

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)

Và ánh xạ nó tới một phím tắt:

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

Trước đây tôi đã đặt một số biến môi trường để xác định thiết bị đầu cuối chính xác để chạy nếu sử dụng gvim hoặc trong cùng thiết bị đầu cuối nếu không ở X.

Sau đó, tôi thường chỉ gõ '; ri' trong bộ đệm Python để chạy nó (thường là để kiểm tra nó).


2

Vim có thể được sử dụng để biên dịch bằng gnu make trên tệp hiện tại - ngay cả khi không có Makefile cho tệp (để biết thêm chi tiết xem tại đây ):

:make %:r

Cách này vim cung cấp cho bạn quyền truy cập vào phản hồi lỗi quickfix từ :help quickfixdanh sách trình biên dịch ( ) - :cnLỗi tiếp theo, :cpLỗi trước, Lỗi :cwliệt kê cửa sổ mới.

Nếu bạn chưa có gnu thực hiện thì bạn có thể đặt biến makeprg (thay đổi thành g ++ nếu bạn biên dịch C ++):

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

và sau đó sử dụng vim lệnh make để biên dịch các tập tin hiện tại và có được một QuickFix danh sách các lỗi trong vim:

:make

EDIT: Nếu bạn cũng muốn chạy tệp thực thi được biên dịch từ bên trong vim, bạn có thể thực hiện ('!' Thực thi, '%: r' là tên tệp không có hậu tố):

:!./%:r

1

Trong trường hợp gcc, python, v.v. bạn có thể gọi nó bằng dấu hai chấm (:!)

Ví dụ. :!python something.py


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

Điều này sẽ biên dịch tệp C của bạn cũng như chạy tệp thực thi yêu cầu đầu vào tất cả trong cửa sổ vim của bạn.


1
Một câu trả lời đầy đủ hơn sẽ bao gồm ':' và để làm cho nó linh hoạt hơn, bạn có thể thay đổi 'file.c' cho toán tử tệp hiện tại '%'::!gcc % && ./a.out
Pierz

Tôi đang làm một cái gì đó tương tự trong tôi .vimrc, tôi ánh xạ Command + Shift + Rtới:map <D-R> :exe '!gcc %:p' <bar> exe '!'.getcwd().'/a.out'<cr>
F1lt3r

0

Liên quan đến trường hợp cụ thể của việc biên dịch mã nguồn.

Và nếu bạn có thứ gì đó có thể biên dịch python, hãy đặt makeprgtương ứng.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.