저는 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>먼저 파일을 저장 한 다음 파이썬으로 파일을 실행합니다. 두 번째는 동일한 작업을 수행하지만 삽입 모드를 먼저 둡니다.
autocmd FileType python nnoremap <buffer> ....
nnoremap <buffer> <F9> :!python %<cr>Vim 7.4.1689에서 작동하는 것 같습니다. 쉘 이스케이프는 무엇입니까?
내 .vimrc 파일에 다음이 있습니다.
imap <F5> <Esc>:w<CR>:!clear;python %<CR>
Python 스크립트 편집이 끝나면 키를 누릅니다 <F5>. 스크립트가 저장되고 빈 화면에서 실행됩니다.
m키 더하기 ,키로 설정하는 방법이 궁금합니다 F5.
Insert모드 에서 실행된다는 점에 유의해야 합니다. 의 실행 Normal모드를 사용 nmap하는 대신 imap.
새 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
.vimrc? 그렇지 않다면 어떻게이 스크립트를 vim에 제공해야합니까? (Noob here)
이전 답변을 바탕으로 출력을 보면서 코드를보고 싶다면 :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>수 있습니다.
플러그인 : jupyter-vim
당신은 선 (보낼 수 있도록 <leader>E), 시각적 선택 ( <leader>e실행중인에) jupyter-client(의 교체 ipython)
나는 편집기와 인터프리터를 분리하는 것을 선호합니다 (각각의 쉘에서). 잘못된 입력 읽기 명령을 보낸다고 상상해보십시오 ...
일반적인 사용을 위해 (를 기반으로 vim에서 python / haskell / ruby / C ++ ... 실행 filetype) vim-quickrun 이라는 멋진 플러그인이 있습니다. 기본적으로 많은 프로그래밍 언어를 지원합니다. 또한 쉽게 구성 할 수 있으므로 필요한 경우 모든 파일 유형에 대해 선호하는 동작을 정의 할 수 있습니다. github 저장소에는 멋진 readme가 없지만 doc 파일로 잘 문서화되어 있습니다.
skywind3000 / asyncrun.vim 도 사용할 수 있습니다 . @FocusedWolf가 나열한 것과 유사합니다.
augroup 명령으로 1 개의 키 바인딩으로 모든 언어에 대해 확장 할 수 있습니다. 예를 들면 다음과 같습니다.
augroup rungroup
autocmd!
autocmd BufRead,BufNewFile *.go nnoremap <F5> :exec '!go run' shellescape(@%, 1)<cr>
autocmd BufRead,BufNewFile *.py nnoremap <F5> :exec '!python' shellescape(@%, 1)<cr>
augroup END
shebang 라인을 사용하면 Python뿐만 아니라 모든 언어로 사용할 수 있습니다.
shebang 추가 :
다음을 스크립트의 첫 번째 줄에 추가하십시오.
#!/usr/bin/env python3
또는 Python 2를 사용하는 경우
#!/usr/bin/env python2
Vim 키맵 :
이것을 당신의 ~/.vimrc:
nmap <F7> :w<cr>:!clear;"%:p"<cr>
파일을 실행 가능하게 만듭니다.
Vim 입력 :
:!chmod +x %
또는 터미널에서 :
chmod +x script_name.py
설명:
일반 모드에서 F7을 누르면 Vim은 현재 파일을 bash 스크립트로 실행하려고합니다. 그러면 bash 인터프리터는 shebang 줄을보고이 파일이 Python (또는 필요한 경우 다른 프로그램)에 전달되어야 함을 이해합니다.
또한 이름을 사용하여 터미널에서 스크립트를 실행할 수 있습니다.
./script_name.py
이 방법 대신 (그것도 작동합니다) :
python3 script_name.py
이 .vimrc 매핑에는 Conque Shell 이 필요 하지만 Geany (및 다른 X 편집기의) 동작을 복제합니다.
종료시 창이 자동으로 닫힙니다.
:let dummy = conque_term#subprocess('gnome-terminal -e "bash -c \"python ' . expand("%") . '; answer=\\\"z\\\"; while [ $answer != \\\"q\\\" ]; do printf \\\"\nexited with code $?, press (q) to quit: \\\"; read -n 1 answer; done; \" "')
코드 어딘가에 커서를 놓습니다. 마우스 오른쪽 버튼을 클릭하고 "선택"항목 중 하나를 선택하여 코드를 강조 표시하십시오. 그런 다음 Ctrl 키를 누르면 새 프롬프트 '<,>'가 표시됩니다.
이제! python을 입력하고 작동하는지 확인하십시오.
나는 단지 같은 문제를 알아 내려고 며칠을 보낸다 !!! 코딩을 사용했습니다.
s='My name'
print (s)
머리카락을 모두 뽑은 후 드디어 맞았습니다!
:% !python. %모든 라인을 의미합니다.
에 명령 매핑을 넣는 대신 파일 (Windows )에 .vimrc매핑을 넣습니다 . 이 파일이나 디렉토리가 없으면 만드십시오. 이 방법은 Python 스크립트에서만이 명령을 실행하기 때문에를 사용 하여 파일 또는 파일 을 열 때만 키가 매핑됩니다 .~/.vim/ftplugin/python.vim$HOME\vimfiles\ftplugin\python.vim.pyfiletype=python
실제 매핑의 경우 스크립트가 실행되는 동안 Vim에서 편집 할 수 있기를 원합니다. @cazyas의 대답에서 벗어나면 내 ftplugin\python.vim(Windows)에 다음이 있습니다.
noremap <F5> <Esc>:w<CR>:!START /B python %<CR>
그러면 백그라운드에서 현재 Python 스크립트가 실행됩니다. Linux의 경우 다음과 같이 변경하십시오.
noremap <F5> <Esc>:w<CR>:!python % &<CR>
" run current python file to new buffer
function! RunPython()
let s:current_file = expand("%")
enew|silent execute ".!python " . shellescape(s:current_file, 1)
setlocal buftype=nofile bufhidden=wipe noswapfile nowrap
setlocal nobuflisted
endfunction
autocmd FileType python nnoremap <Leader>c :call RunPython()<CR>