Vim: Üzerinde çalıştığım komut dosyasını bölünmüş bir ekranda yürüt


16

Hata ayıklamak ve daha da geliştirmek için sık sık yürütülmesi gereken küçük bir python komut dosyası üzerinde çalışıyorum.

Vim ekranını bölebilir ve bir tuş üzerinde bir tuşa basarak senaryomu yürütebilir miyim?

Yanıtlar:


9

Bu satırı .vimrc'nize ekleyin:

command R !./%

Ve sonra sadece Vim'de komut dosyasını çalıştırmak için ": R" yazabilirsiniz ( vim-run-current-file )


10

Vim desteklemez ve emacs veya kate gibi gömülü bir kabuğu asla desteklemeyecektir (bunu kastediyorsanız), bu yığın akışı sorusuna bakın .

David Spillet haklı, vim'inizi gnu ekranın içinde çalıştırabilirsiniz:

$ screen vim foo.txt

Ama bu sadece bir terminalde bir pencere yöneticisine uzaktan benzeyen bir şey verecektir - ssh üzerinde veya X olmayan bir kutuda kullanıldığında ÇOK yararlıdır, ancak yerel olarak başka bir xterm açıp aralarında geçiş yapabilirsiniz. *

Her neyse, ürettiği çıktıya bakarken düzenlediğiniz dosyayı görmeyeceğiniz gerçeğiyle yaşayabiliyorsanız, Jack M'in ipucu iyidir, ancak daha kısa olabilir:

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

Aynı amaçla, bu benim var ~/.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>

Bu #!, ilk satırda bir shebang ( ) içeren herhangi bir dosyayı çalıştırır . Dosyayı çalıştırmak için yorumlayıcı kullanır, bu nedenle yürütme izinlerine sahip olması gerekmez.

* (ekran, çıktıdan kopyala ve yapıştır, etkinlik / etkinlik için gizli pencereleri izleme, oturumu aynı anda farklı terminallerden kullanabilme, tüm programları terk ederek çıkış yapabilme gibi diğer çok temiz özelliklere sahiptir. çalışan - güçlü bir araçtır).


Ben BufEnter ile aynı satıra ilk satırı (\ if ile) koyana kadar bu autocommand benim için çalışmadı ama
Jason Axelson

Vim bir kabuğu doğal olarak desteklemeyebilir, ama sadece bu ilginç kabuk eklentisinden bahsetmek istedim: vim.org/scripts/script.php?script_id=2771
Mikkél

:map ;e :w<cr>:!python %<cr>komutun çalıştırıldığını "onaylamak" (?) için vim arabelleğe bir şeyler yankılamak istiyor. Komutu sessizce yürütmesini nasıl sağlarım? :map <silent> ...çalışmıyor gibi görünüyor.
Johnny Utahh

5

En küçük ayrıntılı yol (betiğinizin çalıştırılabilir olmasını gerektirir) muhtemelen:

 :!%

Bunun çalışması için, :!./%komut dosyasını geçerli dizinde bulunacak şekilde değiştirmek zorunda kaldım .
Paul Wintz

Ve ben bir uzman değilim, ama öyle görünüyor ki !vim'e bash komutu olarak takip eden her şeyi yürütmesini söyler, böylece yapabilirsiniz !echo "Hello". %Geçerli dosyanın adı olarak genişletilir.
Paul Wintz

2

Bölünmüş ekran olmayabilir, ancak bu benim için oldukça iyi çalışıyor:

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

Bu ;e, geçerli dosyayı yazmak ve python kullanarak yürütmek için eşleşir (python'un sizin üzerinizde olduğunu varsayar PATH).


2

Bexec vim eklenti tam olarak ne istediğinizi yapar. Klavye kısayolları dahil.




0

Geçerli dosyayı bir tuşa basarak (gibi ) yürütmek için bu küçük snippet'i .vimrc'nize koyun F5ve sonucu yeni bir bölme arabelleğinde görüntüleyin.

:! tamam ancak sonucu görmek için terminalinize geçmeniz gerekiyor.

Bununla birlikte ctrl-zvim geri getirebilirken, fgbağlamı çok fazla değiştirmeniz gerektiği anlamına gelir.

Bu pasajın çalışma şekli, önce yürütülebilir dosyayı temel alarak yürütülebilir dosyayı tahmin etmek filetypeve ardından argümanı olarak geçerli dosyayla çalıştırmaktır.

Daha sonra kullanışlı bir yardımcı program yöntemi çıktıyı alır ve yeni bir tampona atar.

Mükemmel değil, ancak yaygın iş akışları için gerçekten hızlı.

Aşağıda kopyalanan pasaj şöyledir:

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

Vim'i doğrudan bilmiyorum, ancak ekranı genellikle screenyardımcı programla bölebilirsiniz . ctrl+ a, S(Bir sermaye S notu) ekranı bölecek ve birlikte ikisi arasında geçiş yapabilirsiniz ctrl+ a, tab(pencere boşsa, kullanım ctrl+ a, nbaşka açık pencereye geçmek için veya ctrl+ a, cyeni bir tane oluşturmak için) .

Ekranı ikiden fazlaya bölebilir ve bölmelerin boyutunu ctrl-a,: resize ile değiştirebilirsiniz. Ekranı bu şekilde sık kullanıyorum ve istediğin tek tuşlu çözüm olmasa da, çok uygun olabilir.


Vim için çalıştığından emin misin? Vim'de yanıt vermiyor gibi görünüyor (dosyalar arasında bölmek için slpit komutunu kullanıyorum).
Adam Matan

Bunlar vim değil, GNU ekranıdır.
innaM

Evet. Ekranda vim çalıştırmaktan bahsediyorum.
David Spillett

vim bölünmesi, vim penceresinin (veya içinde çalıştığı terminalin) alanı içinde gerçekleşen bir şeydir.
hasen
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.