หากคุณเปิดใช้งานเซสชัน Vim แรกด้วยอาร์กิวเมนต์--servername VIM
:
$ vim --servername VIM
แล้วคุณสามารถส่งคำสั่งใด ๆ จากเปลือกอื่น ๆ --remote-send
ที่มีการโต้แย้ง
ตัวอย่างเช่นถ้าคุณใช้ statusline ของคุณเพื่อแสดงค่าของตัวแปรบางตัวg:myvar
และคุณมีบรรทัดต่อไปนี้ใน vimrc ของคุณ:
let g:myvar = "foo"
set stl+=%{g:myvar}
จากนั้นคุณสามารถเปลี่ยนค่า ( :let g:myvar = "bar"
) จากเชลล์อื่น:
$ vim --remote-send ':let g:myvar = "bar"<cr>'
สถานะควรสะท้อนการเปลี่ยนแปลงของมูลค่า
ตามความคิดเห็นล่าสุดของคุณบอกว่าถ้าอินสแตนซ์ Vim ของคุณไม่ได้อยู่ในโหมดปกติคำสั่งก่อนหน้านี้จะไม่ทำงานอย่างที่คาดไว้ อาจจะง่ายกว่า แต่นี่เป็นวิธีแก้ปัญหาที่เป็นไปได้ 2 แบบ:
1) เพิ่มคีย์<esc>
ให้อยู่ในโหมดปกติ
2) ใช้อาร์กิวเมนต์--remote-expr
แทน--remote-send
การประเมินนิพจน์และเขียนฟังก์ชันตัวช่วยเล็ก ๆ ซึ่งโค้ดจะกำหนดค่าใหม่ให้กับตัวแปรของคุณ
วิธีแก้ปัญหาแรก:
$ vim --remote-send '<esc>:let g:myvar = "bar"<cr>'
ทางออกที่สอง:
กำหนดฟังก์ชั่นต่อไปนี้ใน vimrc ของคุณ:
function! Myfunc(value)
let g:myvar = a:value
endfunction
จากนั้นในเปลือกของคุณ:
$ vim --remote-expr 'Myfunc("bar")'