Есть ли способ в vim восстановить исходный цвет переднего плана терминала после его изменения с помощью команды ': highlight Normal'?
Например, я использую vim.exe 7.2 в командной строке Windows. Моя командная строка имеет зеленый текст. Когда я запускаю 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]-----
Решение «выделить Normal ctermfg = NONE» сработало. Я предоставлю немного больше контекста для справок в будущем.
Моей целью было написать функцию и горячую клавишу для быстрого включения и выключения подсветки синтаксиса. Чтобы позволить цвету переднего плана вернуться к исходному цвету после отключения подсветки синтаксиса, мне пришлось удалить команду «выделить нормальный ...» из файла цветовой схемы и добавить две соответствующие команды к самой функции:
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