ভিমে পাইথন কোড চালাচ্ছি


107

আমি ভিম ব্যবহার করে পাইথন কোডটি লিখছি এবং যতবার আমি আমার কোড চালাতে চাই, আমি এটি ভিমের মধ্যে টাইপ করি:

:w !python

এটি হতাশ হয়ে পড়ে, তাই আমি ভিমের মধ্যে পাইথন কোড চালানোর জন্য একটি দ্রুত পদ্ধতির সন্ধান করছিলাম। টার্মিনাল থেকে পাইথন স্ক্রিপ্টগুলি কার্যকর করা যেতে পারে? আমি লিনাক্স ব্যবহার করছি।

উত্তর:


153

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: আদেশ দিন যে ভিম স্বয়ংক্রিয়ভাবে কার্যকর হবে {event}(এখানে: আপনি যদি একটি পাইথন ফাইল খোলেন)
  • [i]map: <F9>সন্নিবেশ / স্বাভাবিক মোডে কীবোর্ড শর্টকাট তৈরি করে
  • <buffer>: যদি একাধিক বাফার / ফাইলগুলি খোলা থাকে: কেবল সক্রিয়টি ব্যবহার করুন
  • <esc>: সন্নিবেশ মোড রেখে
  • :w<CR>: আপনার ফাইল সংরক্ষণ করে
  • !: আপনার শেলের মধ্যে নিম্নলিখিত কমান্ড চালায় (চেষ্টা করুন :!ls)
  • %: আপনার সক্রিয় বাফার ফাইলের নাম দ্বারা প্রতিস্থাপিত হয়। তবে এতে যেহেতু সাদা স্থান এবং অন্যান্য "খারাপ" স্টাফের মতো জিনিস থাকতে পারে এটি না লেখাই ভাল :python %, তবে ব্যবহার করা ভাল:
  • shellescape: বিশেষ অক্ষর এড়ানো। 1একটি ব্যাকস্ল্যাশ সঙ্গে উপায়ে

টিএল; ডিআর: প্রথম লাইনটি স্বাভাবিক মোডে কাজ করবে এবং একবার চাপলে আপনি <F9>প্রথমে আপনার ফাইলটি সংরক্ষণ করেন এবং তারপরে অজগর দিয়ে ফাইলটি চালান। দ্বিতীয়টি একই কাজ করে তবে প্রথমে প্রবেশের মোড ছেড়ে দেয় leaves


6
আপনি কি দয়া করে আপনার উত্তরটি প্রসারিত করুন এবং ব্যাখ্যা করুন যে আমার কোথায় এই লাইনটি যুক্ত করা উচিত। কোনও ভিম ​​কনফিগারেশন ফাইলের ভিতরে থাকতে পারে? আমি এক নবাগত।
মাল্টিগডোভার্স

5
আপনার ভিআরসিআরসি ফাইলটিতে অরদিতসুলস, একটি লাইন যুক্ত করুন:autocmd FileType python nnoremap <buffer> ....
কেন্ট

4
আপনি যদি ওএস এক্স এ থাকেন (এবং আমি ইউনিক্স ধরে নিই) তবে হোম ডিরেক্টরিটিতে ".vimrc" থাকে। : ' "..." ব্যবহারকারী vimrc ফাইল' কম্যান্ড মোডে নিশ্চিত করুন যে আপনি একটি লাইন নামক দেখতে পাবেন জন্য চেক করতে: আপনি এই টাইপ করে পরীক্ষা করতে পারবেন 'সংস্করণ'
ThinkBonobo

কেবল এটি চালানোর পরিবর্তে একই ফাইলটি সংরক্ষণ এবং চালনার কোনও উপায় আছে
ভারত

5
nnoremap <buffer> <F9> :!python %<cr>Vim 7.4.1689 এ কাজ করছে বলে মনে হচ্ছে। শেলসকেপ কিসের জন্য?
ম্যাট ক্লিনস্মিথ

37

চাপ দিয়ে <esc>টাইপ করে কেবল সাধারণ মোডে যান :

! clear; python %

এখানে চিত্র বর্ণনা লিখুন

ধাপে ধাপে ব্যাখ্যা:

! আপনাকে একটি টার্মিনাল কমান্ড চালানোর অনুমতি দেয়

clear আপনার টার্মিনাল পর্দা খালি করবে

; প্রথম কমান্ডটি শেষ করে, আপনাকে একটি দ্বিতীয় কমান্ড প্রবর্তন করার অনুমতি দেয়

pythonআপনার স্ক্রিপ্টটি চালাতে অজগর ব্যবহার করবে (এটি rubyউদাহরণস্বরূপ প্রতিস্থাপন করা যেতে পারে )

%pythonকমান্ডটিতে প্যারামিটার হিসাবে প্রেরণ করে বর্তমান ফাইলের নামটি সঞ্চারিত করে


29

আমার .vimrc ফাইলটিতে এটি রয়েছে:

imap <F5> <Esc>:w<CR>:!clear;python %<CR>

আমি যখন পাইথন স্ক্রিপ্ট সম্পাদনা করি তখন আমি কেবল টিপুন <F5>। স্ক্রিপ্টটি সংরক্ষণ করা হয় এবং পরে ফাঁকা স্ক্রিনে চালিত করা হয়।


ধন্যবাদ! এটি বেশ ভাল কাজ করে। আমি ভাবছি কীভাবে কীর পরিবর্তে mকী শর্টকাট কী প্লাস ,কীতে সেট করতে পারি F5?
জে ওয়াং

আমি দেখতে পাচ্ছি না কিভাবে এটি আগে ফাইলটি সংরক্ষণ করছে?
থমাস ব্রাউন 14

দুঃখিত, আমি ": w" যুক্ত করতে ভুলে গেছি আমি এটিকে সংশোধন করেছি, এবং <এসস্কেও> যুক্ত করেছি।
সিজায়াস

4
এটি লক্ষ্য করা উচিত যে এটি Insertমোডে কার্যকর করে। মধ্যে সঞ্চালনের জন্য Normalমোড ব্যবহার nmapপরিবর্তে imap
মার্সিন

17

আমি পাইথন আউটপুটটিকে একটি নতুন ভিম উইন্ডোতে পুনঃনির্দেশিত করতে পছন্দ করি (এবং যদি এই উইন্ডোটি খোলা থাকে তবে পরের বার আপনি এই ফাংশনটি দিয়ে পাইথন কোডটি কার্যকর করলে তার বিষয়বস্তু আপডেট করুন):

" 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? যদি তা না হয় তবে আমি কীভাবে এই স্ক্রিপ্টটি ভিমে দেব? (এখানে নুব)
বেনজমিন চুস

4
দেরী হওয়া প্রতিক্রিয়ার জন্য দুঃখিত আমি একটি .vimrc এর সাথে একটি পরীক্ষা করেছি যাতে একচেটিয়াভাবে সেই কোডটি থাকে এবং এটি আমি যা বলতে পারি তা থেকে কাজ করে। আমার পরীক্ষাটি একটি .py ফাইল খুলতে এবং F5-এ আঘাতের মধ্যে সীমাবদ্ধ ছিল যার ফলস্বরূপ পাইথন আউটপুট একটি পৃথক ভিআইএম উইন্ডোতে উপস্থিত হয়েছিল। "আমি কীভাবে এই স্ক্রিপ্টটি ভিমে দেব?"। এটি আপনার ওএসের উপর নির্ভর করে। আমি উইন্ডোজটি ব্যবহার করছি তাই আমার কাছে সি: \ প্রোগ্রাম ফাইল (x86) \ ভিম \ .vimrc পাঠ্য ফাইল রয়েছে যা সেই কোডটি ধারণ করে (আপনি উইন্ডোতে এটি "_vimrc" নামও রাখতে পারেন)। লিনাক্স বা ম্যাকের ক্ষেত্রে আপনার বাড়ির ফোল্ডারে একটি .vimrc টেক্সট ফাইল থাকতে হবে ~ /
.vimrc

4
যদিও আমরা প্রশংসা করি যে এটি আপনাকে তৈরি করতে অনেক বেশি সময় নিয়েছে, পেপাল লিঙ্কগুলিকে উত্তরে রেখে দেওয়া সত্যিই উপযুক্ত নয়।
মার্টিজন পিটারস

11

পূর্ববর্তী উত্তরের ভিত্তিতে বিল্ডিং, যদি আপনি কোডটির 'আউটপুটটি দেখার সময় দেখতে চান তবে আপনি :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দ্বিতীয় লাইনে ব্যবহার করে অনুভূমিক পরিবর্তে উল্লম্ব বিভাজনে কোড চালায়।

এর নেতিবাচকতা হ'ল আপনি যদি স্প্লিট-উইন্ডোটি বন্ধ না করেন যেখানে কোডটি চালিত হয়েছিল সেখানে একাধিক রান করার পরে আপনার অনেকগুলি বিভাজন হবে (যা মূল পাইথন আইডলিতে হয় না যেখানে একই আউটপুট উইন্ডোটি পুনরায় ব্যবহার করা হয়)।

(আমি এই লাইনগুলি ভিতরে রাখি /home/user/.vimrc)


5

মনে রাখবেন যে আপনি সর্বশেষ ব্যবহৃত কমান্ডটি পুনরাবৃত্তি করতে সক্ষম হলেন @:, সুতরাং আপনাকে সেই দুটি চরিত্রই পুনরাবৃত্তি করতে হবে।

অথবা আপনি w !pythonরেজিস্টারগুলির একটিতে স্ট্রিংটি সংরক্ষণ করতে পারেন ( "aউদাহরণস্বরূপ) এবং তারপরে কমান্ডলাইনে :<C-R>a<CR>নিবন্ধের সামগ্রীগুলি সন্নিবেশ করানোর জন্য aএটি চালনা করতে পারেন।

অথবা আপনি যা করতে পারি তা করতে পারি এবং বর্তমান ফাইলটি চালানোর জন্য মানচিত্র <leader>zকরতে :!python %<CR>পারেন।


4

প্লাগইন: jupyter-vim

আপনি লাইন (পাঠাতে পারেন তাই <leader>E), চাক্ষুষ নির্বাচন ( <leader>eএকটি চলমান করার জন্য) jupyter-client(প্রতিস্থাপন ipython)

এখানে চিত্র বর্ণনা লিখুন

আমি পৃথক সম্পাদক এবং দোভাষীকে (তার খোলের প্রত্যেকে) আলাদা করতে পছন্দ করি। কল্পনা করুন আপনি একটি খারাপ ইনপুট রিডিং কমান্ড প্রেরণ করেছেন ...


3

আপনি যদি :exec python file.pyপ্রতিবার " " মুদ্রিত দেখতে না চান তবে এটি ব্যবহার করুন:

nnoremap <F9> :echo system('python2 "' . expand('%') . '"')<cr>
nnoremap <F10> :echo system('python3 "' . expand('%') . '"')<cr>

এটি আমার পাওয়ারলাইন / ভিএম-এয়ারলাইনের স্ট্যাটাসবারকেও গোলমেলে ফেলেনি।


2

জেনেরিক ব্যবহারের জন্য (পাইথন / হ্যাশেল / রুবি / সি ++ চালান ... ভিএম-filetype এর উপর ভিত্তি করে ভিআইএম থেকে ), ভিম-কুইক্রুন নামে একটি দুর্দান্ত প্লাগইন রয়েছে । এটি ডিফল্টভাবে অনেক প্রোগ্রামিং ভাষা সমর্থন করে supports এটি খুব সহজেই কনফিগারযোগ্য, যাতে প্রয়োজনে যে কোনও ফাইল টাইপের জন্য পছন্দের আচরণগুলি সংজ্ঞায়িত করতে পারে। গিথুব রেপোতে অভিনব রেডিমি নেই তবে এটি ডক ফাইলের সাথে ডকুমেন্টেড।


2

গৃহীত উত্তরটি আমার জন্য (লিনাক্সে) কাজ করে তবে আমি এই আদেশটিটি চালানোর আগে বাফারটিকেও সংরক্ষণ করতে চেয়েছিলাম, তাই আমি এটিকে কিছুটা সংশোধন করেছি:

nnoremap <buffer> <F9> :w <bar> :exec '!python' shellescape(@%, 1)<cr>

:w <bar>তাহলে বাফার সংরক্ষণ তাতে কোড রান।


2

শেবাং লাইনটি ব্যবহার করার কথা ভাবুন, তাই আপনি কেবল পাইথন নয়, কোনও ভাষা দিয়ে এটিকে ব্যবহার করতে সক্ষম হবেন।

শেবাং যুক্ত করা হচ্ছে:

আপনার স্ক্রিপ্টের প্রথম লাইনে এটি যুক্ত করুন:

#!/usr/bin/env python3

বা এটি, যদি আপনি পাইথন 2 ব্যবহার করেন:

#!/usr/bin/env python2

ভিম কীম্যাপ:

এটি আপনার যুক্ত করুন ~/.vimrc:

nmap <F7> :w<cr>:!clear;"%:p"<cr>

এক্সিকিউটেবল ফাইল করুন:

ভিম টাইপ করুন:

:!chmod +x %

বা টার্মিনালে:

chmod +x script_name.py

ব্যাখ্যা:

যখন F7 টি স্বাভাবিক মোডে টিপানো হয়, তখন ভিম বর্তমান ফাইলটি বাশ স্ক্রিপ্ট হিসাবে চালানোর চেষ্টা করবে। তারপরে ব্যাশ ইন্টারপ্রেটার শেবাং লাইনটি দেখতে পাবে এবং বুঝতে পারবে যে এই ফাইলটি পাইথন (বা অন্য কোনও প্রোগ্রামেমের প্রয়োজন হলে) এ দেওয়া উচিত।

এছাড়াও আপনি আপনার স্ক্রিপ্টটির নাম ব্যবহার করে টার্মিনাল থেকে চালাতে সক্ষম হবেন:

./script_name.py

পরিবর্তে এই উপায় (এটি খুব কার্যকর হবে):

python3 script_name.py

1

একটি সাধারণ পদ্ধতি :হ'ল স্বাভাবিক মোডে থাকাকালীন টাইপ করা হবে এবং তারপরে কীবোর্ডের উপরের তীর কী টিপুন এবং এন্টার টিপুন। এটি ভিআইএম-তে সর্বশেষ টাইপিত কমান্ডগুলির পুনরাবৃত্তি করবে।


উপরের তীর টিপানোর আগে আপনি কমান্ডের প্রারম্ভিক অক্ষরগুলি টাইপ করে একটি ইনক্রিমেন্টাল অনুসন্ধান করতে পারেন। যদি অনেক কমান্ড আগে আমি একটি করতাম! অজগর%, আমি পারলাম:! তারপরে উপরের তীরটি টিপুন, কেবল কমান্ডগুলি দিয়ে শুরু করতে যা শুরু হয়!
shmup

1

আপনি যদি আপনার :wআদেশগুলি দিয়ে দ্রুত ফিরে যেতে চান তবে একটি দুর্দান্ত জিনিস টাইপ করতে হবে :wএবং তারপরে আপনার উপরের তীর টিপুন। এটি কেবল কমান্ডগুলির মধ্যে দিয়ে শুরু হবে যা দিয়ে শুরু হবে w


1

আমার .vimrc এ এটি আছে:

"map <F9> :w<CR>:!python %<CR>"

যা বর্তমান বাফারটি সংরক্ষণ করে এবং কেবলমাত্র Esc + F9 টিপে কোডটি কার্যকর করে



1

আপনি অগ্রুপ কমান্ড সহ 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



0

এই। ভিআইএমআরসি ম্যাপিংয়ের জন্য কনক শেল দরকার , তবে এটি জিনির (এবং অন্যান্য এক্স সম্পাদকদের) আচরণের প্রতিরূপ তৈরি করে:

  • চালানোর জন্য একটি কী টিপুন
  • জিনোম-টার্মিনালে কার্যকর করে
  • প্রস্থানটি নিশ্চিত হওয়ার অপেক্ষা করছে
  • উইন্ডোটি প্রস্থান করার সময় স্বয়ংক্রিয়ভাবে বন্ধ হয়

    :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; \" "')


0

আপনার কার্সারটি কোডে কোথাও রাখুন। আপনার কোডটি হাইলাইট করতে ডান ক্লিক করুন এবং একটি "নির্বাচন করুন" পছন্দ চয়ন করুন choose তারপরে Ctrl টিপুন: এবং আপনি নতুন প্রম্পটটি দেখতে পাবেন <<,> '

এখন অজগর টাইপ করুন এবং দেখুন যে এটি কাজ করে।

আমি ঠিক একই সমস্যাটি বের করার চেষ্টা করে দিনগুলি কাটিয়েছি !!! আমি কোডিংটি ব্যবহার করেছি:

s='My name'
print (s) 

আমি আমার সমস্ত চুল টান দেওয়ার পরে, অবশেষে এটি ঠিক হয়ে গেল!


5
একটি
ভিম

4
তবে এটা করা সম্ভব :% !python%সমস্ত লাইন মানে।
টি.চেমলেভস্কিজ

0

আপনার মধ্যে কমান্ড ম্যাপিংয়ের পরিবর্তে .vimrcম্যাপিংটি আপনার ~/.vim/ftplugin/python.vimফাইলে রাখুন (উইন্ডোজ $HOME\vimfiles\ftplugin\python.vim)। আপনার কাছে যদি এই ফাইল বা ডিরেক্টরি না থাকে তবে কেবল সেগুলি তৈরি করুন। আপনি কেবলমাত্র পাইথন স্ক্রিপ্টগুলিতে এই কমান্ডটি চালাবেন বলে আপনি কেবল .pyকোনও ফাইল বা কোনও ফাইল খোলার সময় এই কীটি ম্যাপ করা filetype=pythonহবে।

আসল ম্যাপিংয়ের জন্য, স্ক্রিপ্টটি চলার সময় আমি ভিমে সম্পাদনা করতে সক্ষম হতে চাই। @ কাজিয়াদের উত্তরটি বন্ধ করে দেওয়া, আমার ftplugin\python.vim(উইন্ডোজ) এ নিম্নলিখিতগুলি রয়েছে :

noremap <F5> <Esc>:w<CR>:!START /B python %<CR>

এটি পটভূমিতে বর্তমান পাইথন স্ক্রিপ্টটি চালাবে। লিনাক্সের জন্য কেবল এটিতে এটি পরিবর্তন করুন:

noremap <F5> <Esc>:w<CR>:!python % &<CR>

0
" 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>
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.