.vimrc
vimが開いた端末がGuakeで実行されていることを確認する必要があります。これをどうやって見ることができますか?変数が$TERM
うまくいかないようです。
答え1
確実な方法はありません。TERM
ほとんどの互換エミュレータに同じ値を使用します。 screenおよびtmuxレポートを除くほとんどの最新の端末エミュレータですxterm
。
プロセスリストを参照して、Vim親プロセスの親プロセスを見つけることができます。これにより、Vimがどの端末エミュレータ(存在する場合)で実行されているかを確認できます。一般に、Vimは、ターミナルエミュレータから直接起動されたシェルから起動されます。よりスマートにプロセスリストをVimで親、親の親などで繰り返しながら、子プロセスと同じ端末で実行されていないプロセスを見つけたら停止することもできます。端末エミュレータでなければなりません。
この経験的な方法は、いくつかの方法で欺くことができます。特にどこでもプログラムを起動し、入出力をリダイレクトして他の端末でインタラクティブにすることが可能なので(一般的ではありませんが)さらにそうです。
以下は、現在プロセスが実行されている端末エミュレータのコマンドラインを表示する簡単なテスト済みスクリプトです。この時点で、プロセスは、リダイレクトすることなく、その端末エミュレータの子として始まったと仮定します。
#! /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' "$*"
このスクリプトを呼び出しますwhich-terminal-emulator
。追加.vimrc
できます
let terminal_emulator=system('which-terminal-emulator')
if terminal_emulator =~ '.*guake.*$'
…
endif
答え2
Gilesの答えに答えて(コメントに入れようとすると混乱しているように見えます)、スクリプトはtmuxでは機能しません。問題を解決するには、最後の2行を次に置き換えることができます。
case "$3" in
*tmux*)
tmuxpid=$(tmux display-message -p "#{client_pid}")
printf '%s\n' "$(ps -p $(ps -p $(ps -p $tmuxpid -o sid=) -o ppid=) -o args=)" ;;
*)
shift; shift*
printf '%s\n' "$*";;
esac