Não há maneira infalível. TERM
usa o mesmo valor para emuladores compatíveis na maioria; emuladores de terminal mais modernos, além da tela e do relatório tmux xterm
.
Você pode explorar a lista de processos para encontrar o pai dos pais do Vim. Isso dirá a você em qual emulador de terminal (se houver) o Vim está sendo executado no caso comum em que o Vim foi iniciado a partir de um shell que foi iniciado diretamente no emulador de terminal. Você pode até ser um pouco mais inteligente e percorrer a lista de processos, indo do Vim para o pai, depois para o pai dos pais, e assim por diante, parando quando você encontra um processo que não está rodando no mesmo terminal que o filho: processo é provavelmente um emulador de terminal.
Essa heurística pode ser enganada de várias maneiras - em particular porque é possível (embora incomum) iniciar um programa de qualquer lugar e fazê-lo interagir em outro terminal redirecionando sua entrada e saída.
Aqui está um script pouco testado que mostra a linha de comando do emulador de terminal em que o processo atual está sendo executado, assumindo que o processo é iniciado como um descendente desse emulador de terminal sem travessuras de redirecionamento.
#! /bin/sh
set -f
pid=$PPID
my_tty=$(ps -p $$ -o tty=)
while
[ "$pid" -ne 1 ] &&
set -- $(ps -p "$pid" -o ppid= -o tty= -o args=) &&
[ "$2" = "$my_tty" ]
do
pid=$1
done
shift; shift
printf '%s\n' "$*"
Chame esse script which-terminal-emulator
. No seu .vimrc
, você pode adicionar
let terminal_emulator=system('which-terminal-emulator')
if terminal_emulator =~ '.*guake.*$'
…
endif