विम: स्क्रिप्ट का विभाजन कर रहा हूं, जो एक स्प्लिट स्क्रीन में काम कर रहा है


16

मैं एक छोटे अजगर की पटकथा पर काम कर रहा हूं, जिसे डिबग और आगे विकसित करने के लिए लगातार निष्पादन की आवश्यकता है।

क्या मैं विम स्क्रीन को विभाजित कर सकता हूं और कीस्ट्रोक के साथ एक हिस्से पर अपनी स्क्रिप्ट निष्पादित कर सकता हूं?

जवाबों:


9

इस लाइन को अपने .vimrc में जोड़ें:

command R !./%

और फिर आप स्क्रिप्ट चलाने के लिए विम ( vim-run-current-file ) में "R:" टाइप कर सकते हैं


10

विम नहीं करता है, और कभी भी एमैक या केट जैसे एम्बेडेड शेल का समर्थन नहीं करेगा (यदि आपका मतलब है कि), तो इस स्टैकओवरफ़्लो प्रश्न को देखें

डेविड स्पिलेट सही है, आप अपनी विन्न को ग्नू स्क्रीन के अंदर चला सकते हैं:

$ screen vim foo.txt

लेकिन यह आपको केवल टर्मिनल में एक विंडो मैनर जैसा दिखने वाला कुछ दे देगा - बहुत उपयोगी जब ssh पर या बिना किसी एक्स के साथ एक बॉक्स पर उपयोग किया जाता है, लेकिन स्थानीय रूप से आप बस एक और xterm खोल सकते हैं और उनके बीच स्विच कर सकते हैं। *

वैसे भी, अगर आप इस तथ्य के साथ रह सकते हैं कि आप उस फ़ाइल को नहीं देखेंगे जिसे आप आउटपुट का निर्माण करते समय देख रहे हैं, तो जैक एम की टिप अच्छी है, लेकिन छोटी हो सकती है:

:map ;e :w<cr>:!python %<cr>

उसी उद्देश्य के लिए, मेरे पास यह है ~/.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>

यह किसी भी फ़ाइल को चलाता है #!जिसमें पहली पंक्ति पर एक शबंग ( ) है। यह फ़ाइल चलाने के लिए दुभाषिया का उपयोग करता है, इसलिए इसे निष्पादित करने की आवश्यकता नहीं है।

* (स्क्रीन में कुछ अन्य बहुत ही साफ-सुथरी विशेषताएं हैं जैसे कि आउटपुट से कॉपी-पेस्ट करना, गतिविधि / नो-एक्टिविटी के लिए छिपी हुई खिड़कियों की निगरानी करना, एक ही समय में विभिन्न टर्मिनलों से सत्र का उपयोग करने में सक्षम होना, सभी कार्यक्रमों को छोड़कर लॉग आउट करने में सक्षम होना। चल रहा है - यह एक शक्तिशाली उपकरण है)।


यह ऑटोकॉमैंड मेरे लिए तब तक काम नहीं करता था जब तक कि मैं एक ही लाइन पर au BufEnter के रूप में पहली पंक्ति (the if के साथ) नहीं डाल देता, लेकिन मैंने
Jason Axelson

Vim मूल रूप से शेल का समर्थन नहीं कर सकता है, लेकिन मैं सिर्फ इस दिलचस्प शेल प्लगइन का उल्लेख करना चाहता था: vim.org/scripts/script.php?script_id=2771
Mr Mikkél

:map ;e :w<cr>:!python %<cr>मेरे vim बफर को "कन्फर्म" (?) करने के लिए सामान को गूंजना चाहता है कि कमांड चले। मैं इसे कैसे प्राप्त करूं बस इसे चुपचाप कमांड निष्पादित करें? :map <silent> ...काम करने के लिए प्रकट नहीं होता है।
जॉनी उटाह

5

कम से कम क्रिया तरीका (जिसके लिए आपकी स्क्रिप्ट को निष्पादन योग्य होना आवश्यक है):

 :!%

इस काम के लिए, मुझे इसे संशोधित करना था :!./%ताकि स्क्रिप्ट वर्तमान निर्देशिका में मिल जाए।
पॉल विन्टज़ डिस

और, मैं एक विशेषज्ञ नहीं हूं, लेकिन ऐसा प्रतीत होता है कि !बैश कमांड के रूप में जो कुछ भी निष्पादित करने के लिए विम को बताता है, इसलिए आप कर सकते हैं !echo "Hello"%वर्तमान फ़ाइल का नाम होना करने के लिए विस्तारित किया गया है।
पॉल विंट्ज

2

यह स्प्लिट-स्क्रीन नहीं हो सकता है, लेकिन यह मेरे लिए अच्छा काम करता है:

map ;e :w<CR>:exe ":!python " . getreg("%") . "" <CR>

यह ;eवर्तमान फ़ाइल को लिखने के लिए मैप करता है, और इसे अजगर का उपयोग करके निष्पादित करता है (यह मानता है कि अजगर आपके पर है PATH)।


2

Bexec vim प्लगइन वास्तव में आप क्या चाहते हैं नहीं करता है। कीबोर्ड शॉर्टकट शामिल थे।



0
map <F5> :w<CR>:exe ":!python " . getreg("%") . "" <CR> 

क्या मैं कृपया (F5 वर्तमान स्क्रिप्ट चलाता है) के साथ प्रयोग किया जाता है।

एक शक्तिशाली अजगर आईडीई में विम चालू करने के लिए मैं इस ट्यूटोरियल की सलाह देता हूं:


0

रखो यह छोटा-सा स्निपेट एक कीस्ट्रोक (जैसे के साथ वर्तमान फ़ाइल निष्पादित करने के लिए अपने .vimrc में F5) और एक नया विभाजन फलक बफर में परिणाम प्रदर्शित करते हैं।

:! ठीक है, लेकिन आपको परिणाम देखने के लिए अपने टर्मिनल पर जाने की आवश्यकता है।

जब आप ऐसा कर सकते हैं ctrl-zऔर fgइसके साथ वापस ला सकते हैं तब भी आपको संदर्भ को बहुत अधिक बदलने की आवश्यकता है।

जिस तरह से यह स्निपेट काम करता है, वह पहले निष्पादन पर आधारित अनुमान लगाता है filetypeऔर फिर इसे अपने तर्क के रूप में वर्तमान फ़ाइल के साथ चलाता है।

आगे एक उपयोगी उपयोगिता विधि आउटपुट लेती है और इसे एक नए बफर में डालती है।

यह सही नहीं है, लेकिन आम वर्कफ़्लो के लिए वास्तव में तेज़ है।

यहाँ स्निपेट की प्रतिलिपि नीचे दी गई है:

""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
"""""""""""""""""""""""""" 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

-1

मैं सीधे विम के बारे में नहीं जानता, लेकिन आप इस तरह से स्क्रीन को आमतौर पर screenउपयोगिता के साथ विभाजित कर सकते हैं । ctrl+ a, S(ध्यान दें, कि एक राजधानी एस है) डिस्प्ले को विभाजित करेगा और आप दोनों के बीच ctrl+ के साथ स्विच कर सकते हैं a, tab(यदि विंडो खाली है, तो ctrl+ a, nएक और खुली खिड़की या ctrl+ aमें cजाने के लिए, एक नया बनाने के लिए) ।

आप डिस्प्ले को अधिक से अधिक दो भागों में विभाजित कर सकते हैं और ctrl-a, resize के साथ विभाजन के आकार को बदल सकते हैं। मैं अक्सर इस तरह से स्क्रीन का उपयोग करता हूं, और जब तक आप इसके लिए पूछने वाले एकल-कुंजी समाधान नहीं करते, तब यह बहुत सुविधाजनक हो सकता है।


क्या आप सुनिश्चित हैं कि यह विम के लिए काम कर रहा है? यह मेरे vim में जवाब देने के लिए प्रतीत नहीं होता है (मैं फ़ाइलों के बीच विभाजन के लिए स्लिपिट कमांड का उपयोग करता हूं)।
एडम मटन

ये GNU स्क्रीन हैं, vim नहीं, कमांड हैं।
innaM

हां। मैं स्क्रीन के भीतर विम चलाने के बारे में बात कर रहा हूँ।
डेविड स्पिललेट 20

vim स्प्लिट एक ऐसी चीज है जो vim विंडो के दायरे में होती है (या टर्मिनल जो इसे चला रहा है)।
hasen
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.