Saya sedang mengerjakan skrip python kecil, yang perlu sering dieksekusi untuk debug dan mengembangkan lebih lanjut.
Bisakah saya membagi layar vim dan menjalankan skrip saya pada satu bagian dengan penekanan tombol?
Saya sedang mengerjakan skrip python kecil, yang perlu sering dieksekusi untuk debug dan mengembangkan lebih lanjut.
Bisakah saya membagi layar vim dan menjalankan skrip saya pada satu bagian dengan penekanan tombol?
Jawaban:
Tambahkan baris ini ke .vimrc Anda:
command R !./%
Dan kemudian Anda bisa mengetik ": R" saat di Vim untuk menjalankan skrip ( vim-run-current-file )
Vim tidak, dan tidak akan pernah mendukung shell yang tertanam seperti emacs atau kate (jika Anda maksudkan itu), lihat pertanyaan stackoverflow ini .
David Spillet benar, Anda dapat menjalankan vim Anda di dalam layar gnu:
$ screen vim foo.txt
Tapi itu hanya akan memberi Anda sesuatu yang mirip windowmanager di terminal - SANGAT berguna ketika digunakan lebih dari ssh atau pada kotak tanpa X, tetapi secara lokal Anda juga bisa membuka xterm lain dan beralih di antara mereka. *
Bagaimanapun, jika Anda dapat hidup dengan fakta bahwa Anda tidak akan melihat file yang sedang Anda edit sambil melihat output yang dihasilkannya, tip Jack M baik, tetapi bisa lebih pendek:
:map ;e :w<cr>:!python %<cr>
Untuk tujuan yang sama, saya memiliki ini di ~/.vimrc
:
au BufEnter *
\if match( getline(1) , '^\#!') == 0 |
\ execute("let b:interpreter = getline(1)[2:]") |
\endif
fun! CallInterpreter()
if exists("b:interpreter")
exec ("!".b:interpreter." %")
endif
endfun
map <F5> :call CallInterpreter()<CR>
Ini menjalankan file apa pun yang memiliki shebang ( #!
) di baris pertama. Menggunakan interpreter untuk menjalankan file, sehingga tidak perlu memiliki izin untuk mengeksekusi.
* (layar memiliki beberapa fitur lain yang sangat rapi seperti salin dan tempel dari output, memantau jendela tersembunyi untuk aktivitas / tidak ada aktivitas, dapat menggunakan sesi dari terminal yang berbeda pada saat yang sama, dapat logout meninggalkan semua program menjalankan - ini adalah alat yang ampuh).
:map ;e :w<cr>:!python %<cr>
ingin mengulangi hal-hal ke buffer vim saya untuk "mengkonfirmasi" (?) bahwa perintah dijalankan. Bagaimana saya mendapatkannya hanya menjalankan perintah diam-diam? :map <silent> ...
tampaknya tidak berfungsi.
Cara paling tidak bertele-tele (yang mengharuskan skrip Anda dapat dieksekusi) mungkin:
:!%
:!./%
sehingga skrip akan ditemukan di direktori saat ini.
!
memberitahu vim untuk mengeksekusi apa pun yang mengikuti sebagai perintah bash, sehingga Anda dapat melakukannya !echo "Hello"
. Itu %
diperluas menjadi nama file saat ini.
map <F5> :w<CR>:exe ":!python " . getreg("%") . "" <CR>
Apakah yang saya gunakan dengan tolong (F5 menjalankan skrip saat ini).
Untuk mengubah vim menjadi IDE python yang kuat saya sarankan tutorial ini:
Masukkan potongan kecil ini di .vimrc Anda untuk mengeksekusi file saat ini dengan satu keystroke (seperti F5
) dan menampilkan hasilnya dalam buffer split-pane baru.
:!
tidak apa-apa tetapi Anda perlu beralih ke terminal Anda untuk melihat hasilnya.
Meskipun Anda dapat melakukannya dengan ctrl-z
dan membawa vim kembali dengan fg
itu masih berarti Anda perlu banyak mengubah konteks.
Cara potongan ini bekerja adalah dengan terlebih dahulu menebak yang dapat dieksekusi berdasarkan filetype
dan kemudian menjalankannya dengan file saat ini sebagai argumennya.
Selanjutnya metode utilitas berguna mengambil output dan membuangnya ke buffer baru.
Itu tidak sempurna, tetapi sangat cepat untuk alur kerja umum.
Berikut cuplikan yang disalin di bawah:
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
"""""""""""""""""""""""""" RUN CURRENT FILE """""""""""""""""""""""""""""
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" Execute current file
nnoremap <F5> :call ExecuteFile()<CR>
" Will attempt to execute the current file based on the `&filetype`
" You need to manually map the filetypes you use most commonly to the
" correct shell command.
function! ExecuteFile()
let filetype_to_command = {
\ 'javascript': 'node',
\ 'coffee': 'coffee',
\ 'python': 'python',
\ 'html': 'open',
\ 'sh': 'sh'
\ }
let cmd = get(filetype_to_command, &filetype, &filetype)
call RunShellCommand(cmd." %s")
endfunction
" Enter any shell command and have the output appear in a new buffer
" For example, to word count the current file:
"
" :Shell wc %s
"
" Thanks to: http://vim.wikia.com/wiki/Display_output_of_shell_commands_in_new_window
command! -complete=shellcmd -nargs=+ Shell call RunShellCommand(<q-args>)
function! RunShellCommand(cmdline)
echo a:cmdline
let expanded_cmdline = a:cmdline
for part in split(a:cmdline, ' ')
if part[0] =~ '\v[%#<]'
let expanded_part = fnameescape(expand(part))
let expanded_cmdline = substitute(expanded_cmdline, part, expanded_part, '')
endif
endfor
botright new
setlocal buftype=nofile bufhidden=wipe nobuflisted noswapfile nowrap
call setline(1, 'You entered: ' . a:cmdline)
call setline(2, 'Expanded Form: ' .expanded_cmdline)
call setline(3,substitute(getline(2),'.','=','g'))
execute '$read !'. expanded_cmdline
setlocal nomodifiable
1
endfunction
Saya tidak tahu tentang vim secara langsung, tetapi Anda dapat membagi layar dengan cara ini secara umum dengan screen
utilitas. ctrl+ a, S(perhatikan, huruf besar S) akan membagi tampilan dan Anda dapat beralih antara keduanya dengan ctrl+ a, tab(jika jendela kosong, gunakan ctrl+ a, nuntuk pindah ke jendela lain yang terbuka atau ctrl+ a, cuntuk membuat yang baru) .
Anda dapat membagi tampilan menjadi lebih dari dua juga, dan mengubah ukuran split dengan ctrl-a,: resize. Saya sering menggunakan layar dengan cara ini, dan meskipun itu bukan solusi satu-kunci yang Anda minta itu bisa sangat nyaman.