2010-01-04 64 views
36

Cuối cùng tôi đã quyết định dùng thử Vim, vì tôi càng ngày càng thất vọng bởi các trình chỉnh sửa GUI. Cho đến nay, tôi yêu thích nó, nhưng tôi không thể tìm thấy bất kỳ trợ giúp nào cho một vấn đề mà tôi đang gặp phải ...Thêm lệnh vào Vim

Tôi đang cố gắng ánh xạ lệnh :Pyrun tới :!python % bằng Vim sử dụng cmap. Ánh xạ sẽ hiển thị tốt nếu tôi nhập :cmap. Tuy nhiên, khi nhập :Pyrun, tôi nhận được thông báo lỗi này:

Không phải lệnh biên tập: Pyrun.

Dưới đây là những gì tôi đang cố gắng trong vimrc:

:autocmd FileType python :cmap Pyrun<cr> !python %<cr> 
:autocmd FileType python :cmap Intpyrun<cr> !python -i %<cr> 

Tôi có thể làm gì để giải quyết vấn đề này?

+0

Đọc 42 pdf trong url này http: // zmievski.org/talk/ –

Trả lời

35

tôi sẽ cố gắng một cái gì đó như thế này trong vimrc của bạn hoặc ftplugin bạn/python_ft.vim

command Pyrun execute "!python %" 
command Intpyrun execute "!python -i %" 

Sau đó :Pyrun:Intpyrun nên làm việc

Sau đó, bạn có thể ánh xạ một phím chức năng cho mỗi

map <F5> :Pyrun<CR> 
map <F6> :Intpyrun<CR> 
+0

Điều đó có hiệu quả! Cảm ơn! –

+2

Lệnh đệm cục bộ (-b) sẽ tốt hơn. –

+0

để thêm lệnh bộ đệm cục bộ, sử dụng ': lệnh -buffer' ... ': lệnh -b' không hoạt động – tbhartman

24

Cá nhân tôi thích cách tiếp cận khác. Đầu tiên tạo một hàm nhận đối số lệnh và sau đó tạo ra một lệnh để gọi hàm:

fun! DoSomething(arg) "{{{ 
    echo a:arg 
    " Do something with your arg here 
endfunction "}}} 

command! -nargs=* Meh call DoSomething('<args>') 

Vì vậy, nó sẽ như thế nào

fun! Pyrun(arg) "{{{ 
    execute '!python ' . expand('%') 
endfunction "}}} 

command! -nargs=* Pyrun call Pyrun('<args>') 

Nhưng, có một cách tốt hơn để làm điều đó trong Vim. Sử dụng makeprg:

makeprg=python\ % 

Chỉ cần nhập :make để chạy tệp Python hiện tại của bạn. Sử dụng :copen để hiển thị danh sách lỗi.

+0

Âm thanh như một cách tiếp cận có khả năng mở rộng hơn. Tôi có thể sẽ làm một cái gì đó như thế này nếu tôi cần nhiều hơn một lệnh thực hiện. –

6

G'day,

Tương tự như câu trả lời karoberts, tôi thích trực tiếp hơn:

:map <F9> :!python %<CR> 

Nếu kịch bản của tôi là tạo ra một số lượng Tôi cũng thích để nắm bắt nó trong một tập tin tạm thời và sau đó autoread nội dung tệp đó vào bộ đệm khác, vd

:map <F9> :!python % 2>&1 \| tee /tmp/results 

tôi sau đó thiết lập autoread bằng cách nhập :set autoread và mở file kết quả trong bộ đệm khác

:split /tmp/results<CR> 

Sau đó, tôi có thể dễ dàng nhìn thấy các kết quả của thời gian trong bộ đệm mà tự động làm mới khi các tập tin kết quả là được cập nhật bằng cách chạy tập lệnh đang được phát triển.

HTH

cổ vũ,