私スクリプト、実行するとき時々/ often次の行が表示されたら、「エスケープされていない」ANSIエスケープシーケンスを出力します。
vim -X -u NONE -c "helptags ~/.vim/plugged/vim-fugitive/doc" -c q
結果は次のとおりです。
コマンドを実行するだけでは、この「ゴミ」が生成されないようなので、なぜこのようなことが発生するのかわかりません。これは、その行が実行されている場合にのみ発生します。コメントアウトすると問題が解決します。もっと奇妙な点はまさにそれだ。時々起こらないでしょう。おそらく良いことで何かをすると結果が現れるでしょう。スクリプトの実行結果は問題ありません。しかし、いったん現れると絶えず現れるようです(*事実ではない、下記参照)。通常、別の端末タブを開くと問題が明らかになります。
ここで何が起こっているのか知っていますか? vimはいくつかの端末設定(?)を選択$TERM
し、出力を妨げませんか?それとも別のことが起こっていますか?
カラー出力の私のユーティリティ機能は次のとおりです。ここ、それは重要ですか?
編集する:
PS1
プロンプトをそのように変更すると、$
問題が発生したときに消えますが、プロンプトを再びカラープロンプトに設定しても問題が再び発生しないため、ここで確実性を見つけるのが困難です。 。
PS1プロンプト設定 もう終わったここ:
set_prompt(){
local user=$(green "\u")
local host=$(dark_yellow "\h")
local workdir=$(pink "\w")
local gitbranch=$(dark_red \$\(__git_ps1 "\(%s\)" \))
local at=$(dark_grey at)
local in=$(dark_grey in)
export PS1="\n${user} ${at} ${host} ${in} ${workdir} ${gitbranch}"$'\n\$ '
}
# Now set it. If any of these colors are later overridden, then just rerun `set_prompt`
set_prompt
そして使用これらのユーティリティ関数と変数:
# Color escape codes @see http://misc.flogisoft.com/bash/tip_colors_and_formatting
# Use \033 instead of \e. Workes better across platforms
# \e works in PS1 prompts, but not other places
c_X_reset_all='\033[0m' #stop code for color escape
c_X_bold='\033[21m'
c_X_reset_bold='\033[21m'
c_green='\033[01;32m'
c_blue='\033[01;34m'
c_pink='\033[01;35m'
c_dark_grey='\033[90m'
c_dark_yellow='\033[38;5;178m'
c_dark_red='\033[38;5;196m'
green(){
echo -n -e ${c_green}$@${c_X_reset_all}
}
blue(){
echo -n -e ${c_blue}$@${c_X_reset_all}
}
pink(){
echo -n -e ${c_pink}$@${c_X_reset_all}
}
dark_grey(){
echo -n -e ${c_dark_grey}$@${c_X_reset_all}
}
dark_yellow(){
echo -n -e ${c_dark_yellow}$@${c_X_reset_all}
}
dark_red(){
echo -n -e ${c_dark_red}$@${c_X_reset_all}
}
ヒント(変更前)
以下は、コメントの変更を実装する前のヒントです。
$ perl -e 'print quotemeta($ENV{PS1})'
\\n\[01\;32m\\u\[0m\ \[90mat\[0m\ \[38\;5\;178m\\h\[0m\ \[90min\[0m\ \[01\;35m\\w\[0m\ \[38\;5\;196m\$\(__git_ps1\ \\\(\%s\\\)\ \)\[0m\
\\\$\
\033
すべてのビットが消えて置き換えられることがわかります\
。これは、\
出力に表示されるESC文字(10進数27、16進数1B)の8進数表現であるためです(\033[
)\]
。
ヒント(エスケープシーケンスの導入後)
これで問題が解決したようです。
これらのコメントは、印刷できない文字の周りにエスケープシーケンスを導入することを示唆しています。 ESC文字がもう置き換えられなくなったため、状況が変わっているようです。
$ perl -e 'print quotemeta($ENV{PS1})'
\\n\\\[\\033\[01\;32m\\\]\\u\ \\\[\\033\[90m\\\]at\ \\\[\\033\[38\;5\;178m\\\]\\h\ \\\[\\033\[90m\\\]in\ \\\[\\033\[01\;35m\\\]\\w\ \\\[\\033\[38\;5\;196m\\\]\(master\)\\\[\\033\[00m\\\]\
\\\$\