เป็นกลุ่ม: รันสคริปต์ฉันกำลังทำงานในหน้าจอแยก


16

ฉันกำลังทำงานกับสคริปต์หลามขนาดเล็กซึ่งต้องการการประมวลผลบ่อยครั้งเพื่อแก้ไขข้อบกพร่องและพัฒนาต่อไป

ฉันสามารถแบ่งหน้าจอที่เป็นกลุ่มและรันสคริปต์ของฉันในส่วนเดียวด้วยการกดแป้นพิมพ์ได้หรือไม่?

คำตอบ:



10

Vim ไม่และจะไม่สนับสนุนเชลล์ที่ฝังตัวเช่น emacs หรือ kate (ถ้าคุณหมายถึง) ดูคำถาม stackoverflowนี้

David Spillet ถูกต้องคุณสามารถเรียกใช้เสียงเรียกเข้าในหน้าจอ gnu:

$ screen vim foo.txt

แต่นั่นจะให้สิ่งที่คุณคล้ายกับ windowmanager ในเทอร์มินัลจากระยะไกล - มีประโยชน์มากเมื่อใช้กับ ssh หรือบนกล่องที่ไม่มี X แต่ในพื้นที่คุณสามารถเปิด xterm อื่นและสลับไปมาระหว่างพวกมันได้ *

อย่างไรก็ตามหากคุณสามารถใช้ชีวิตกับความจริงที่ว่าคุณจะไม่เห็นไฟล์ที่คุณกำลังแก้ไขในขณะที่ดูผลลัพธ์ที่ผลิตออกมาคำแนะนำของ Jack M นั้นดี แต่อาจสั้นกว่านี้:

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

สิ่งนี้จะเรียกใช้ไฟล์ใด ๆ ที่มี shebang ( #!) ในบรรทัดแรก มันใช้ล่ามเพื่อเรียกใช้ไฟล์ดังนั้นจึงไม่จำเป็นต้องมีสิทธิ์ดำเนินการ

* (หน้าจอมีคุณสมบัติที่ประณีตมาก ๆ เช่นการคัดลอกและวางจากการส่งออกการตรวจสอบหน้าต่างที่ซ่อนอยู่สำหรับกิจกรรม / ไม่มีกิจกรรมการใช้เซสชันจากเทอร์มินัลต่าง ๆ ในเวลาเดียวกันสามารถออกจากโปรแกรมทั้งหมดได้ วิ่ง - เป็นเครื่องมือที่ทรงพลัง)


ข้อความอัตโนมัตินี้ไม่ทำงานสำหรับฉันจนกว่าฉันจะใส่บรรทัดแรก (ด้วย \ if) ในบรรทัดเดียวกับ au BufEnter แต่ฉันลบ \
Jason Axelson

เสียงเรียกเข้าอาจไม่สนับสนุนเชลล์ แต่ฉันอยากจะพูดถึงปลั๊กอินเชลล์ที่น่าสนใจนี้: vim.org/scripts/script.php?script_id=2771
นายมิคเคลล์

:map ;e :w<cr>:!python %<cr>ต้องการที่จะสะท้อนสิ่งเพื่อ vim buffer ของฉันเพื่อ "ยืนยัน" (?) ที่คำสั่งทำงาน ฉันจะทำให้มันใช้คำสั่งอย่างเงียบ ๆ ได้อย่างไร? :map <silent> ...ไม่ทำงาน
Johnny Utahh

5

วิธี verbose อย่างน้อยที่สุด (ซึ่งต้องการให้สคริปต์ของคุณสามารถเรียกใช้งานได้) อาจเป็น:

 :!%

เพื่อให้สามารถใช้งานได้ฉันต้องแก้ไขเป็นเพื่อ:!./%ให้พบสคริปต์ในไดเรกทอรีปัจจุบัน
Paul Wintz

และผมไม่ได้เป็นผู้เชี่ยวชาญ แต่ปรากฏว่าบอกเป็นกลุ่มที่จะดำเนินการสิ่งต่อไปนี้เป็นคำสั่งทุบตีเพื่อให้คุณสามารถทำ! จะขยายไปเป็นชื่อของไฟล์ปัจจุบัน !echo "Hello"%
Paul Wintz

2

มันอาจจะไม่แยกหน้าจอ แต่มันใช้งานได้ดีสำหรับฉัน:

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

การแม็พนี้;eจะเขียนไฟล์ปัจจุบันและดำเนินการโดยใช้ python (ถือว่าเป็นไพ ธ อนของคุณPATH)


2

Bexecเป็นกลุ่มปลั๊กอินไม่ตรงกับสิ่งที่คุณต้องการ แป้นพิมพ์ลัดรวมอยู่ด้วย



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

เป็นสิ่งที่ฉันใช้กับโปรด (F5 เรียกใช้สคริปต์ปัจจุบัน)

สำหรับการเปลี่ยนเสียงเรียกเข้าให้เป็น python IDE ที่มีประสิทธิภาพฉันขอแนะนำบทช่วยสอนนี้:


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(หมายเหตุที่เป็นทุน S) จะแบ่งการแสดงผลและคุณสามารถสลับระหว่างสองกับctrl+ a, tab(ถ้าหน้าต่างว่างเปล่าใช้ctrl+ a, nที่จะย้ายไปเปิดหน้าต่างอื่นหรือctrl+ a, cการสร้างใหม่) .

คุณสามารถแบ่งจอแสดงผลออกเป็นสองส่วนด้วยกันและเปลี่ยนขนาดของตัวแยกด้วย ctrl-a,: resize ฉันใช้หน้าจอด้วยวิธีนี้บ่อยครั้งและในขณะที่มันไม่ใช่โซลูชันแบบปุ่มกดเดียวที่คุณขอให้มันสะดวกมาก


คุณแน่ใจหรือว่าใช้กับ Vim ได้? ดูเหมือนจะไม่ตอบสนองในกลุ่มของฉัน (ฉันใช้คำสั่ง slpit เพื่อแยกระหว่างไฟล์)
Adam Matan

นี่คือหน้าจอ GNU ไม่ใช่คำสั่ง vim
innaM

อ๋อ ฉันกำลังพูดถึงการใช้เสียงเรียกเข้าภายในหน้าจอ
David Spillett

การแบ่งเป็นกลุ่มคือสิ่งที่เกิดขึ้นภายในขอบเขตของหน้าต่าง vim (หรือเทอร์มินัลที่ใช้งานอยู่)
hasen
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.