
Si inicio tmux sin configuración:
$ tmux -Ltest -f/dev/null new
luego inicie Vim sin configuración:
$ vim -Nu NONE
luego desde Vim ejecuta xclip para escribir hello
en el portapapeles:
:call system('xclip -selection clipboard', 'hello')
luego salga de Vim:
:q
hello
todavía está en el portapapeles; $ xclip -selection clipboard -o
salidas hello
.
Si repito el mismo experimento, pero inicio Vim en una ventana dividida de tmux (experimento 2):
$ tmux splitw vim -Nu NONE
Tan pronto como salgo de Vim, el proceso xclip finaliza y el portapapeles queda vacío.
Si repito el mismo experimento, pero con Nvim (experimento 3), el proceso xclip no finaliza y el portapapeles persiste. Eché un vistazo a :h vim-differences
la documentación de Nvim y encontré esto:
|system()|, |systemlist()| can run {cmd} directly (without 'shell')
Esto me hizo pensar que el problema se debe al hecho de que Vim inicia xclip con un shell, mientras que Nvim lo inicia sin él. Para comprobar mi hipótesis, repetí el mismo experimento, pero esta vez escribí hello
en un archivo e inicié xclip con job_start()
en lugar de system()
, porque el primero puede iniciar un proceso sin shell (experimento 4):
$ echo hello >/tmp/file
$ tmux -Ltest -f/dev/null new
$ tmux splitw vim -Nu NONE
:call job_start('xclip -selection clipboard /tmp/file')
:q
Y, de hecho, después de salir de Vim, el proceso xclip sigue activo y el portapapeles todavía contiene archivos hello
.
Quería entender por qué la creación de un caparazón intermedio era un problema. Entonces, enexperimento 2, antes de salir de Vim, verifiqué los antepasados del proceso xclip:
$ pstree -s -p $(pidof xclip)
systemd(1)---lightdm(951)---lightdm(1126)---upstart(1156)---xclip(15389)
Lo mismo enexperimento 4:
$ pstree -s -p $(pidof xclip)
systemd(1)---lightdm(951)---lightdm(1126)---upstart(1156)---xclip(18541)
El árbol de procesos es idéntico y no puedo ver el shell intermedio creado por Vim (tal vez porque fue eliminado y xclip fue vinculado al proceso advenedizo).
Entonces, ¿por qué se elimina xclip cuando salgo de Vim en el experimento 2, pero no cuando salgo de Vim en el experimento 4?
Editar:
Salida de $ uname -a
:
Linux ubuntu 4.15.0-51-generic #55~16.04.1-Ubuntu SMP Thu May 16 09:24:37 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux
Salida de $ vim --version | head -n2
:
VIM - Vi IMproved 8.1 (2018 May 18, compiled May 30 2019 04:42:18)
Included patches: 1-1421
Salida de $ tmux -V
:
tmux next-3.1
Salida de $ zsh --version
:
zsh 5.7.1 (x86_64-pc-linux-gnu)