Есть ли способ в vim восстановить первоначальный цвет переднего плана терминала после его изменения командой ': highlight Normal'?
Например, я использую vim.exe 7.2 в командной строке Windows. Моя командная строка имеет зеленый текст. Когда я запускаю vim.exe, я могу запустить следующую команду, чтобы изменить текст на красный:
:highlight Normal ctermfg=red
Однако я не могу понять, как вернуть цвет переднего плана к исходному.
Конечно, в этом простом примере я знаю, что исходный цвет был зеленым, поэтому я мог просто явно установить его обратно в зеленый. В реальной жизни, однако, я пишу скрипт vim, и мне нужно универсальное решение для возврата к исходному цвету.
Последние несколько часов я просматривал документы vim и пробовал что-то вроде ': синтаксис выключен', ': выделен нормальный сброс' и 'сброс синтаксиса' безрезультатно. В разделе termcap была некоторая интересная информация о переменной 't_op', но я не могу понять, как ее использовать. Единственный успех, который у меня был до сих пор, это выход из vim и возможность командной строки вернуться к своему первоначальному цвету; Я бы очень хотел сделать это в рамках одной и той же сессии vim.
Заранее благодарим за любые ваши предложения.
----- [20100723 13:30] -----
Извините за мой беспорядок комментариев в ответ на RQ. Вместо этого я постараюсь опубликовать соответствующую дополнительную информацию в исходном вопросе.
На моем компьютере (vim 7.2, Windows 7, командная строка) функция synIDattr () возвращает одинаковое значение для каждого цвета переднего плана Normal. Примите во внимание следующее: я запускаю новый сеанс 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'. Я предоставлю немного больше контекста для дальнейшего использования.
Моей целью было написать функцию и горячую клавишу для быстрого включения и выключения подсветки синтаксиса. Чтобы позволить цвету переднего плана вернуться к исходному цвету после отключения подсветки синтаксиса, мне пришлось удалить команду «highlight Normal ...» из файла colorscheme и добавить две соответствующие команды к самой функции:
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