2016-10-27 43 views
8

我試圖將vim整合到我的主工作流程中。對我來說,一個主要問題是交互式編輯和運行程序/腳本。在Vim中執行腳本選擇

例如考慮到我目前vimmed到test.py

print('hello') 
x = 5 
y = x+2 
print(y) 

無需離開VIM我將如何:不留VIM
b
一)運行整個腳本)只需運行「打印('hello')「

+0

1)':!python3 test.py'。 2)':!python3 -c「print('hello')」'。 – L3viathan

回答

14

評論者和其他答案指出如何從vim運行一個文件。但他們掩飾了一些非常強大的可能性。我想解釋一些更詳細的工作。

在vim中運行python腳本最簡單的方法就是在文件上調用python解釋器。

:!python % 

,或者因爲我更喜歡做,以確保沒有任何未保存的更改,

:w | !python % 

但它甚至沒有必要有一個文件,在vim運行python腳本。之所以是因爲:w!=保存!:w意味着,如果沒有提供參數,它恰好寫入您正在編輯的文件。但是,您可以將寫入到STDOUT,另一個文件或甚至另一個程序。所以,如果你想,而不必一個文件,保存並運行運行緩衝區的Python代碼,你可以簡單地做:

:w !python 

這meanse 當前緩衝區外部程序「蟒蛇」。這實際上只是將緩衝區的內容直接發送到python。

現在,它變得非常酷。在vim中,01​​是一個「ex命令」,例如,一個從vim命令行運行的命令,最初來自ex,這是一個非常老的基於UNIX的文本編輯器。關於ex命令的令人敬畏的事情是,因爲它們都是基於行的,所以您可以直接聲明您希望將命令應用於哪條線。例如:

:2w myfile.txt 

會寫只有線兩條到文件 「myfile.txt的」。你甚至可以提供一個範圍,例如

:2,7w myfile.txt 

會將第2-7行寫入「myfile.txt」。這意味着使用您的例子,我們可以運行

:1w !python 

運行只是

print('hello') 

爲了使這個更方便,你可以使用可視模式來選擇每一個你想運行線,它會自動填寫適合您的範圍。這看起來像

:'<,'>w !python 

爲了使這個更方便,我會建議添加類似

xnoremap <leader>p :w !python<cr> 

.vimrc。然後,你可以直觀地選擇任何你想要的,然後通過鍵入

\p 

(更換\,不管你已經設置爲你的領導),運行它Python代碼。你也可以做這取決於你是否要保存到一個文件或不

nnoremap <leader>p :w !python<cr> 

nnoremap <leader>p :w | !python %<cr> 

2

您可以使用:!(即:!python3 %)從vim運行程序來運行當前腳本。

如果你想綁定一個密鑰,另一個簡單的方法是將makeprg設置爲你的python可執行文件::set makeprg=python3,然後綁定一個密鑰到:make<cr>。在這種情況下,我將設置autocmds,根據文件類型切換makeprg

如果你想運行一個簡單的語句,你既可以使用Python的-c開關:

:!python3 -c 'print("Hello world")',或者你可以只運行:!python3不帶參數不留Vim中投進一個REPL。

2

創建的範圍的函數,如在this問題討論:

fu PyRun() range 
    echo system('python -c ' . shellescape(join(getline(a:firstline, a:lastline), "\n"))) 
endf 

創建視覺模式的映射:

vmap <C-F6> :call PyRun()<CR> 

然後就可以選擇一個範圍,按控制 - F6。行的範圍將由python執行。結果將顯示在命令區域中。