ฉันกำลังทำงานกับสคริปต์หลามขนาดเล็กซึ่งต้องการการประมวลผลบ่อยครั้งเพื่อแก้ไขข้อบกพร่องและพัฒนาต่อไป
ฉันสามารถแบ่งหน้าจอที่เป็นกลุ่มและรันสคริปต์ของฉันในส่วนเดียวด้วยการกดแป้นพิมพ์ได้หรือไม่?
ฉันกำลังทำงานกับสคริปต์หลามขนาดเล็กซึ่งต้องการการประมวลผลบ่อยครั้งเพื่อแก้ไขข้อบกพร่องและพัฒนาต่อไป
ฉันสามารถแบ่งหน้าจอที่เป็นกลุ่มและรันสคริปต์ของฉันในส่วนเดียวด้วยการกดแป้นพิมพ์ได้หรือไม่?
คำตอบ:
เพิ่มบรรทัดนี้ใน. vimrc ของคุณ:
command R !./%
จากนั้นคุณสามารถพิมพ์ ": R" ใน Vim เพื่อเรียกใช้สคริปต์ ( vim-run-current-file )
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 ( #!
) ในบรรทัดแรก มันใช้ล่ามเพื่อเรียกใช้ไฟล์ดังนั้นจึงไม่จำเป็นต้องมีสิทธิ์ดำเนินการ
* (หน้าจอมีคุณสมบัติที่ประณีตมาก ๆ เช่นการคัดลอกและวางจากการส่งออกการตรวจสอบหน้าต่างที่ซ่อนอยู่สำหรับกิจกรรม / ไม่มีกิจกรรมการใช้เซสชันจากเทอร์มินัลต่าง ๆ ในเวลาเดียวกันสามารถออกจากโปรแกรมทั้งหมดได้ วิ่ง - เป็นเครื่องมือที่ทรงพลัง)
:map ;e :w<cr>:!python %<cr>
ต้องการที่จะสะท้อนสิ่งเพื่อ vim buffer ของฉันเพื่อ "ยืนยัน" (?) ที่คำสั่งทำงาน ฉันจะทำให้มันใช้คำสั่งอย่างเงียบ ๆ ได้อย่างไร? :map <silent> ...
ไม่ทำงาน
วิธี verbose อย่างน้อยที่สุด (ซึ่งต้องการให้สคริปต์ของคุณสามารถเรียกใช้งานได้) อาจเป็น:
:!%
:!./%
ให้พบสคริปต์ในไดเรกทอรีปัจจุบัน
!
จะขยายไปเป็นชื่อของไฟล์ปัจจุบัน !echo "Hello"
%
มันอาจจะไม่แยกหน้าจอ แต่มันใช้งานได้ดีสำหรับฉัน:
map ;e :w<CR>:exe ":!python " . getreg("%") . "" <CR>
การแม็พนี้;e
จะเขียนไฟล์ปัจจุบันและดำเนินการโดยใช้ python (ถือว่าเป็นไพ ธ อนของคุณPATH
)
Bexecเป็นกลุ่มปลั๊กอินไม่ตรงกับสิ่งที่คุณต้องการ แป้นพิมพ์ลัดรวมอยู่ด้วย
มีเป็นคำถาม StackOverflow ที่คล้ายกัน
map <F5> :w<CR>:exe ":!python " . getreg("%") . "" <CR>
เป็นสิ่งที่ฉันใช้กับโปรด (F5 เรียกใช้สคริปต์ปัจจุบัน)
สำหรับการเปลี่ยนเสียงเรียกเข้าให้เป็น python IDE ที่มีประสิทธิภาพฉันขอแนะนำบทช่วยสอนนี้:
วางส่วนย่อยขนาดเล็กนี้ใน. 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
ฉันไม่รู้เกี่ยวกับเสียงเรียกเข้าโดยตรง แต่คุณสามารถแยกหน้าจอด้วยวิธีนี้โดยทั่วไปด้วยscreen
ยูทิลิตี้ ctrl+ a, S(หมายเหตุที่เป็นทุน S) จะแบ่งการแสดงผลและคุณสามารถสลับระหว่างสองกับctrl+ a, tab(ถ้าหน้าต่างว่างเปล่าใช้ctrl+ a, nที่จะย้ายไปเปิดหน้าต่างอื่นหรือctrl+ a, cการสร้างใหม่) .
คุณสามารถแบ่งจอแสดงผลออกเป็นสองส่วนด้วยกันและเปลี่ยนขนาดของตัวแยกด้วย ctrl-a,: resize ฉันใช้หน้าจอด้วยวิธีนี้บ่อยครั้งและในขณะที่มันไม่ใช่โซลูชันแบบปุ่มกดเดียวที่คุณขอให้มันสะดวกมาก