「:highlight Normal」コマンドで変更した後、端末の元の前景色を復元する方法は vim にありますか?
たとえば、Windows コマンド プロンプトで vim.exe 7.2 を使用しています。コマンド プロンプトに緑色のテキストが表示されます。vim.exe を起動すると、次のコマンドを実行してテキストを赤に変更できます。
:highlight Normal ctermfg=red
ただし、前景色を元の色に戻す方法がわかりません。
もちろん、この単純な例では、元の色が緑であることがわかっているので、明示的に緑に戻すことができます。ただし、実際には、vim スクリプトを作成していて、元の色に戻すための一般的なソリューションが必要です。
ここ数時間、vim のドキュメントを調べて、「:syntax off」、「:highlight normal clear」、「syntax reset」などを試しましたが、役に立ちませんでした。termcap セクションに 't_op' 変数に関する興味深い情報がありましたが、その使用方法がわかりません。私がこれまでに経験した唯一の成功は、vim を終了し、コマンド プロンプトを元の色に戻すことです。同じvimセッション内からこれを実行できるようにしたいと本当に思っています。
事前に、ご意見をお寄せいただきありがとうございます。
------[20100723 13:30]-----
rq へのコメントの混乱で申し訳ありません。代わりに、関連するフォローアップ情報を元の質問に投稿してみます。
私のマシン (vim 7.2、Windows 7、コマンド プロンプト) では、 synIDattr() 関数はすべての通常の前景色に対して同じ値を返します。次のことを考慮してください: 構文の強調表示を無効にして、コマンド プロンプトで新しい vim セッションを開始し、次のスクリプトを実行して、最初の行の最初の文字の前景色を報告します。
let numID = synID(1, 1, 1)
let numIDtrans = synIDtrans(numID)
let numFG = synIDattr(numIDtrans, "fg")
echo "synID: *" . numID . "*"
echo "synIDtrans: *" . numIDtrans . "*"
echo "synIDattr(fg): *" . numFG . "*"
応答として、次のようになります。
synID: *0*
synIDtrans: *0*
synIDattr(fg): **
synIDattr() によって返される値がないことに注意してください。追加したリテラル アスタリスク区切り記号だけです。
次に、Normal グループの前景色を変更します。
highlight Normal ctermfg=red
同じスクリプトを実行すると、同じ応答が得られます - synIDattr() からの値はありません。構文の強調表示を有効にすると、スクリプトは有用な情報を返すことに注意してください (ただし、その時点では手遅れです)。
------[20100728 16:11]-----
「highlight Normal ctermfg=NONE」ソリューションが機能しました。今後の参考のために、もう少しコンテキストを提供します。
私の目標は、構文の強調表示のオンとオフをすばやく切り替えるための関数とホットキーを作成することでした。構文の強調表示を無効にした後に前景色を元の色に戻すには、colorscheme ファイルから「highlight Normal...」コマンドを削除し、対応する 2 つのコマンドを関数自体に追加する必要がありました。
function! fSwitchSyntax()
if exists("g:syntax_on")
syntax off
highlight normal ctermfg=NONE <--- New command
else
syntax on
highlight normal ctermfg=white <--- New command
endif
endfunction