นี่เป็นคำถามที่ยอดเยี่ยมและเป็นความคิดที่ยอดเยี่ยม! ฉันไม่สามารถรอที่จะรวมไว้ในเวิร์กโฟลว์ของฉัน
อย่างไรก็ตามในความคิดของฉันวิธีที่ดีที่สุดในการดึงสิ่งนี้ออกคือการใช้ฟังก์ชั่นเซิร์ฟเวอร์ของ vim ซึ่งช่วยให้คุณควบคุมอินสแตนซ์ vim ที่ทำงานอยู่โดยใช้คำสั่ง vim
แนวคิดก็คือครั้งแรกที่คุณเรียกใช้กลุ่มคุณจะเรียกใช้เป็น:
vim --servername $VIM_SERVER_NAME
และทุกครั้งที่คุณต้องการเปิดแท็บใหม่ในอินสแตนซ์นี้คุณจะเรียกใช้:
vim --servername $VIM_SERVER_NAME --remote-tab $PATH_TO_FILE_TO_OPEN
นอกเหนือจากนี้สิ่งเดียวที่คุณจะต้องเพิ่มคือตรรกะในการระบุและสลับไปที่หน้าต่างกลุ่ม (ซึ่งสามารถทำได้โดยใช้ชื่อหน้าต่าง)
ฉันได้รวมทั้งหมดนี้ไว้ในฟังก์ชันเชลล์ต่อไปนี้:
v() {
if [ $STY ]; then
# screen
VIM_SERVER_NAME="VIM-SCREEN-$STY"
if [ "`vim --serverlist | grep -i $VIM_SERVER_NAME`" = "" ]; then
# No vim server, become the server
screen -X title vim
vim --servername $VIM_SERVER_NAME "$@"
screen -X title `basename $SHELL`
else
# A vim server exists, use it, then switch to it.
vim --servername $VIM_SERVER_NAME --remote-tab "$@"
screen -X select vim
fi
else
vim $@
fi
}
หากคุณเพิ่มนิยามฟังก์ชันนี้ใน~/.profile
(หรือ~/.bash_profile
ถ้าคุณใช้ bash) ดังนั้นเมื่อใดก็ตามที่คุณต้องการใช้เสียงเรียกเข้าให้ใช้v
แทน มันจะตรวจสอบว่าคุณกำลังอยู่ในเซสชั่นหน้าจอหรือไม่และถ้าเป็นเช่นนั้นมันจะใช้หน้าต่าง vim ที่กำหนดและสลับไปที่มัน (หรือทำให้หน้าต่างปัจจุบันเป็นหน้าต่าง vim ที่กำหนดถ้าไม่มีอยู่) มิฉะนั้นจะย้อนกลับไปใช้ vim ปกติ นอกจากนี้ยังควรใช้งานได้แม้ว่าคุณจะใช้เซสชันหลายหน้าจอในเวลาเดียวกันและคุณใช้v
ในทุกเซสชัน
โปรดสังเกตว่าฉันยังรีเซ็ตชื่อหน้าต่างเป็นชื่อเชลล์ถ้า / เมื่อคุณออกจากเซิร์ฟเวอร์ vim นี่คือการหลีกเลี่ยงการมีสองหน้าต่างขึ้นไปด้วยชื่อ "vim" หากคุณใช้v
ในหน้าต่างอื่นหลังจากปิดในหนึ่ง
เพราะฉันเป็นผู้ชายมากกว่า tmux นี่คือฟังก์ชั่นเชลล์ที่ฉันวางแผนจะใช้:
v() {
if [ $STY ]; then
# screen
VIM_SERVER_NAME="VIM-SCREEN-$STY"
if [ "`vim --serverlist | grep -i $VIM_SERVER_NAME`" = "" ]; then
# No vim server, become the server
screen -X title vim
vim --servername $VIM_SERVER_NAME "$@"
screen -X title `basename $SHELL`
else
# A vim server exists, use it, then switch to it.
vim --servername $VIM_SERVER_NAME --remote-tab "$@"
screen -X select vim
fi
elif [ $TMUX ]; then
# tmux
VIM_SERVER_NAME="VIM-TMUX-`tmux list-windows -F '#{session_name}' | head -1`"
if [ "`vim --serverlist | grep -i $VIM_SERVER_NAME`" = "" ]; then
# No vim server, become the server
tmux rename-window vim
vim --servername $VIM_SERVER_NAME "$@"
tmux rename-window `basename $SHELL`
else
# A vim server exists, use it, then switch to it.
vim --servername $VIM_SERVER_NAME --remote-tab "$@"
tmux select-window -t vim
fi
else
vim "$@"
fi
}
ฟังก์ชั่นเวอร์ชั่นนี้จะใช้งานได้กับทั้ง tmux และหน้าจอ (เซสชันที่แตกต่างกันมากเท่าที่คุณต้องการ) และถอยกลับไปเป็นกลุ่มปกติหากไม่ได้อยู่ภายใน