ฉันจะดัมพ์คำสั่ง vim ภายใน (ไม่ใช่คำสั่งเชลล์) ลงในบัฟเฟอร์ใหม่ได้อย่างไร?
ตัวอย่างเช่นฉันต้องการถ่ายโอนรายชื่อของปลั๊กอินทั้งหมด:enew
จาก:scriptnames
เพื่อให้ฉันสามารถค้นหาได้
ฉันจะดัมพ์คำสั่ง vim ภายใน (ไม่ใช่คำสั่งเชลล์) ลงในบัฟเฟอร์ใหม่ได้อย่างไร?
ตัวอย่างเช่นฉันต้องการถ่ายโอนรายชื่อของปลั๊กอินทั้งหมด:enew
จาก:scriptnames
เพื่อให้ฉันสามารถค้นหาได้
คำตอบ:
คุณสามารถใช้:redir
เพื่อเปลี่ยนเส้นทางเอาต์พุตไปยังตัวแปรรีจิสเตอร์หรือไฟล์ ตัวอย่างการเปลี่ยนเส้นทางไปยังการลงทะเบียนที่ไม่มีชื่อ:
:redir @">|silent scriptnames|redir END|enew|put
อีกวิธีหนึ่งคือทิมสมเด็จพระสันตะปาปาscriptease.vimให้:Scriptnames
คำสั่งซึ่งจะโหลด:scriptnames
ลงในรายการ QuickFIX :copen
และ
หากคุณพบว่าคุณเปลี่ยนเส้นทางคำสั่งจำนวนมากคุณอาจต้องการสรุปในคำสั่ง:
command! -nargs=+ -complete=command Redir let s:reg = @@ | redir @"> | silent execute <q-args> | redir END | new | pu | 1,2d_ | let @@ = s:reg
ตอนนี้คุณสามารถใช้:Redir
คำสั่งเพื่อเปลี่ยนทิศทางเอาต์พุตไปยังบัฟเฟอร์ใหม่ เช่นหรือ:Redir scriptnames
:Redir ls
Vim 8 มาพร้อมกับexecute()
ฟังก์ชั่นใหม่ คุณสามารถใช้execute()
ฟังก์ชันแทน:redir
การจับภาพเอาต์พุตคำสั่ง ex
:enew|pu=execute('scriptnames')
สำหรับความช่วยเหลือเพิ่มเติมดู:
:h :redir
:h :silent
:h :scriptnames
:h :enew
:h :put
:h execute()
:redir END
บอกให้ Vim สิ้นสุดการเปลี่ยนเส้นทางข้อความ ดู:h :redir
เพื่อความสมบูรณ์ฉันต้องการนำเสนอฟังก์ชั่นที่ยอดเยี่ยมที่ฉันรวบรวม (stole) จากromainl
" redirect the output of a Vim or external command into a scratch buffer
function! Redir(cmd)
if a:cmd =~ '^!'
execute "let output = system('" . substitute(a:cmd, '^!', '', '') . "')"
else
redir => output
execute a:cmd
redir END
endif
tabnew
setlocal nobuflisted buftype=nofile bufhidden=wipe noswapfile
call setline(1, split(output, "\n"))
put! = a:cmd
put = '----'
endfunction
command! -nargs=1 Redir silent call Redir(<f-args>)
นี่จะใช้เอาต์พุตปกติหรือคำสั่งระบบและวางไว้ในแท็บใหม่ อย่าลังเลที่จะเปลี่ยนสายtabnew
เป็นvsplit
หรือsplit
อื่น ๆ
นอกจากนี้ยังมีปลั๊กอินbufferize.vim :
:Bufferize scriptnames
ซึ่งเป็นรุ่นที่บรรจุของคำตอบที่ยอมรับ (ใช้:redir
) และอาจสะดวกกว่าสำหรับบางคน
END
หมายถึง?