我試圖將vim整合到我的主工作流程中。對我來說,一個主要問題是交互式編輯和運行程序/腳本。在Vim中執行腳本選擇
例如考慮到我目前vimmed到test.py
print('hello')
x = 5
y = x+2
print(y)
無需離開VIM我將如何:不留VIM
b
一)運行整個腳本)只需運行「打印('hello')「
我試圖將vim整合到我的主工作流程中。對我來說,一個主要問題是交互式編輯和運行程序/腳本。在Vim中執行腳本選擇
例如考慮到我目前vimmed到test.py
print('hello')
x = 5
y = x+2
print(y)
無需離開VIM我將如何:不留VIM
b
一)運行整個腳本)只需運行「打印('hello')「
評論者和其他答案指出如何從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>
。
您可以使用:!
(即:!python3 %
)從vim運行程序來運行當前腳本。
如果你想綁定一個密鑰,另一個簡單的方法是將makeprg
設置爲你的python可執行文件::set makeprg=python3
,然後綁定一個密鑰到:make<cr>
。在這種情況下,我將設置autocmds,根據文件類型切換makeprg
。
如果你想運行一個簡單的語句,你既可以使用Python的-c
開關:
:!python3 -c 'print("Hello world")'
,或者你可以只運行:!python3
不帶參數不留Vim中投進一個REPL。
創建的範圍的函數,如在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
執行。結果將顯示在命令區域中。
1)':!python3 test.py'。 2)':!python3 -c「print('hello')」'。 – L3viathan