[python] Vim에서 Python 코드 실행
저는 Vim을 사용하여 Python 코드를 작성하고 있으며 코드를 실행할 때마다 Vim에 다음을 입력합니다.
:w !python
이것은 실망스러워서 Vim 내에서 Python 코드를 실행하는 더 빠른 방법을 찾고있었습니다. 터미널에서 Python 스크립트를 실행하고 있습니까? Linux를 사용하고 있습니다.
답변
어떻게 추가에 대한 autocmd
사용자에 ~/.vimrc
매핑을 생성 – 파일 :
autocmd FileType python map <buffer> <F9> :w<CR>:exec '!python3' shellescape(@%, 1)<CR>
autocmd FileType python imap <buffer> <F9> <esc>:w<CR>:exec '!python3' shellescape(@%, 1)<CR>
그런 다음을 눌러 <F9>
현재 버퍼를 실행할 수 있습니다.python
설명:
autocmd
: Vim이 자동으로 실행할 명령{event}
(여기서는 파이썬 파일을 여는 경우)[i]map
:<F9>
삽입 / 일반 모드에서 키보드 단축키를 만듭니다.<buffer>
: 여러 개의 버퍼 / 파일이 열려있는 경우 : 활성 파일 만 사용하십시오.<esc>
: 삽입 모드 종료:w<CR>
: 파일을 저장합니다.!
: 쉘에서 다음 명령을 실행합니다 (try:!ls
).%
: 활성 버퍼의 파일 이름으로 대체됩니다. 그러나 공백 및 기타 “나쁜”항목을 포함 할 수 있으므로 작성하지 않고 다음을:python %
사용하는 것이 좋습니다.shellescape
: 특수 문자를 이스케이프합니다.1
백 슬래시 수단
요약 : 첫 번째 줄은 일반 모드에서 작동하며 일단 누르면 <F9>
먼저 파일을 저장 한 다음 파이썬으로 파일을 실행합니다. 두 번째는 동일한 작업을 수행하지만 삽입 모드를 먼저 둡니다.
답변
답변
내 .vimrc 파일에 다음이 있습니다.
imap <F5> <Esc>:w<CR>:!clear;python %<CR>
Python 스크립트 편집이 끝나면 키를 누릅니다 <F5>
. 스크립트가 저장되고 빈 화면에서 실행됩니다.
답변
새 Vim 창으로 리디렉션되는 Python 출력을 선호합니다 (그리고 해당 창이 열려있는 경우 다음에이 함수로 Python 코드를 실행할 때 내용을 업데이트합니다).
" Bind F5 to save file if modified and execute python script in a buffer.
nnoremap <silent> <F5> :call SaveAndExecutePython()<CR>
vnoremap <silent> <F5> :<C-u>call SaveAndExecutePython()<CR>
function! SaveAndExecutePython()
" SOURCE [reusable window]: https://github.com/fatih/vim-go/blob/master/autoload/go/ui.vim
" save and reload current file
silent execute "update | edit"
" get file path of current file
let s:current_buffer_file_path = expand("%")
let s:output_buffer_name = "Python"
let s:output_buffer_filetype = "output"
" reuse existing buffer window if it exists otherwise create a new one
if !exists("s:buf_nr") || !bufexists(s:buf_nr)
silent execute 'botright new ' . s:output_buffer_name
let s:buf_nr = bufnr('%')
elseif bufwinnr(s:buf_nr) == -1
silent execute 'botright new'
silent execute s:buf_nr . 'buffer'
elseif bufwinnr(s:buf_nr) != bufwinnr('%')
silent execute bufwinnr(s:buf_nr) . 'wincmd w'
endif
silent execute "setlocal filetype=" . s:output_buffer_filetype
setlocal bufhidden=delete
setlocal buftype=nofile
setlocal noswapfile
setlocal nobuflisted
setlocal winfixheight
setlocal cursorline " make it easy to distinguish
setlocal nonumber
setlocal norelativenumber
setlocal showbreak=""
" clear the buffer
setlocal noreadonly
setlocal modifiable
%delete _
" add the console output
silent execute ".!python " . shellescape(s:current_buffer_file_path, 1)
" resize window to content length
" Note: This is annoying because if you print a lot of lines then your code buffer is forced to a height of one line every time you run this function.
" However without this line the buffer starts off as a default size and if you resize the buffer then it keeps that custom size after repeated runs of this function.
" But if you close the output buffer then it returns to using the default size when its recreated
"execute 'resize' . line('$')
" make the buffer non modifiable
setlocal readonly
setlocal nomodifiable
endfunction
답변
이전 답변을 바탕으로 출력을 보면서 코드를보고 싶다면 :ter
( :terminal
) 명령이 유용하다는 것을 알 수 있습니다.
autocmd Filetype python nnoremap <buffer> <F5> :w<CR>:ter python2 "%"<CR>
autocmd Filetype python nnoremap <buffer> <F6> :w<CR>:vert ter python3 "%"<CR>
사용 vert
두 번째 줄에있는 것은 수직 분할 대신 수평의 코드를 실행합니다.
부정적인 점은 코드가 실행 된 분할 창을 닫지 않으면 여러 번 실행 한 후 많은 분할이 발생한다는 것입니다 (동일한 출력 창이 재사용되는 원래 Python IDLE에서는 발생하지 않음).
(내가이 선을 유지합니다 /home/user/.vimrc
)
답변
를 사용하여 마지막으로 사용한 명령 @:
을 반복 할 수 있으므로이 두 문자 만 반복하면됩니다.
또는 w !python
(예 "a
를 들어) 레지스터 중 하나에 문자열 을 저장 한 다음 :<C-R>a<CR>
을 눌러 레지스터의 내용을 삽입 할 수 있습니다.a
🙂 명령 줄 하고 실행할 수 있습니다.
또는 내가하는 일을하고 현재 파일을 실행하도록 매핑 <leader>z
할 :!python %<CR>
수 있습니다.
답변
:exec python file.py
매번 인쇄되는 ” ” 을 보지 않으려면 다음을 사용하십시오.
nnoremap <F9> :echo system('python2 "' . expand('%') . '"')<cr>
nnoremap <F10> :echo system('python3 "' . expand('%') . '"')<cr>
내 전력선 / vim-airline 상태 표시 줄도 엉망으로 만들지 않았습니다.