Сохранить текущие цвета как загружаемую цветовую схему в vim - PullRequest
1 голос
/ 09 января 2020

Как я могу сохранить текущие цвета в файл, загружаемый с помощью :colorscheme в vim?

:hi показывает мне цвета, но не в форме, которую можно загрузить в виде цветовой схемы.

Ответы [ 3 ]

2 голосов
/ 10 января 2020

Ингредиенты, которые вам понадобятся: :h getcompletion() :h hlID() :h synIDattr() и :h synIDtrans()

Начните с получения имен всех групп светлых тонов: let names = getcompletion('', 'highlight').

Чтобы получить цифры c ID: let id = hlID(name) и let tid = synIDtrans(id)

Если id != tid, то это «связанная» группа, поэтому команда будет printf('hi link %s %s', name, synIDattr(tid, 'name'))

В противном случае вам придется запросить все возможные комбинации synIDattr(id, what, mode) и затем составьте команду hi <name> <non-empty-attrs>. Поскольку это выглядит как особенно утомительное задание, оно «оставлено в качестве упражнения для читателя»; -)

Поместить вывод скрипта в буфер в Vim тривиально: new, затем call append('$', printf(...)) и так далее. Но будьте осторожны, чтобы не забыть добавить поверх вашего «сценария цвета» «стандартную преамбулу» (hi clear и прочее), иначе цвета будут перепутаны с существующими.

0 голосов
/ 14 января 2020

Благодаря ответу Мэтт Я написал следующий скрипт.

Этот скрипт можно использовать для сохранения текущих цветов. Чтобы использовать, откройте новый буфер и :source save_colorscheme.vim.

Если g:save_all_highlights установлен в 1 перед поиском скрипта, перечислены все цвета подсветки, известные vim, в противном случае сохраните тот, который указан в s:names. в сценарии.

Измените строку на g:colors_name, чтобы дать разумное имя.

" If g:save_all_highlights is 1, save all highlight colors known by vim,
" otherwise save the one listed in s:names below.
if exists('g:save_all_highlights')
  let s:save_all_highlights = g:save_all_highlights
else
  let s:save_all_highlights = 0
endif

" List of hightlights from
" https://github.com/ggalindezb/vim_colorscheme_template/blob/master/template.vim
" plus highlights for diff files
" https://github.com/ggalindezb/vim_colorscheme_template/issues/1.
let s:names = [
      \ 'Normal',
      \ 'Cursor',
      \ 'CursorLine',
      \ 'LineNr',
      \ 'CursorLineNR',
      \ 'CursorColumn',
      \ 'FoldColumn',
      \ 'SignColumn',
      \ 'Folded',
      \ 'VertSplit',
      \ 'ColorColumn',
      \ 'TabLine',
      \ 'TabLineFill',
      \ 'TabLineSel',
      \ 'Directory',
      \ 'Search',
      \ 'IncSearch',
      \ 'StatusLine',
      \ 'StatusLineNC',
      \ 'WildMenu',
      \ 'Question',
      \ 'Title',
      \ 'ModeMsg',
      \ 'MoreMsg',
      \ 'MatchParen',
      \ 'Visual',
      \ 'VisualNOS',
      \ 'NonText',
      \ 'Todo',
      \ 'Underlined',
      \ 'Error',
      \ 'ErrorMsg',
      \ 'WarningMsg',
      \ 'Ignore',
      \ 'SpecialKey',
      \ 'Constant',
      \ 'String',
      \ 'StringDelimiter',
      \ 'Character',
      \ 'Number',
      \ 'Boolean',
      \ 'Float',
      \ 'Identifier',
      \ 'Function',
      \ 'Statement',
      \ 'Conditional',
      \ 'Repeat',
      \ 'Label',
      \ 'Operator',
      \ 'Keyword',
      \ 'Exception',
      \ 'Comment',
      \ 'Special',
      \ 'SpecialChar',
      \ 'Tag',
      \ 'Delimiter',
      \ 'SpecialComment',
      \ 'Debug',
      \ 'PreProc',
      \ 'Include',
      \ 'Define',
      \ 'Macro',
      \ 'PreCondit',
      \ 'Type',
      \ 'StorageClass',
      \ 'Structure',
      \ 'Typedef',
      \ 'DiffAdd',
      \ 'DiffChange',
      \ 'DiffDelete',
      \ 'DiffText',
      \ 'diffAdded',
          \ 'diffChanged',
          \ 'diffRemoved',
          \ 'diffLine',
      \ 'Pmenu',
      \ 'PmenuSel',
      \ 'PmenuSbar',
      \ 'PmenuThumb',
      \ 'SpellBad',
      \ 'SpellCap',
      \ 'SpellLocal',
      \ 'SpellRare',
      \]

" Preamble.
call append('$', printf('" Set ''background'' back to the default.  The value can''t always be estimated'))
call append('$', printf('" and is then guessed.'))
call append('$', printf('hi clear Normal'))
call append('$', printf('set background&'))
call append('$', printf(''))
call append('$', printf('" Remove all existing highlighting and set the defaults.'))
call append('$', printf('hi clear'))
call append('$', printf(''))
call append('$', printf('" Load the syntax highlighting defaults, if it''s enabled.'))
call append('$', printf('if exists("syntax_on")'))
call append('$', printf('  syntax reset'))
call append('$', printf('endif'))
call append('$', printf(''))

if (s:save_all_highlights == 1)
  let s:names = getcompletion('', 'highlight')
endif

for s:name in s:names
  let s:id = hlID(s:name)
  let s:tid = synIDtrans(s:id)

  if (s:id != s:tid)
    call append('$', printf('hi link %s %s', s:name, synIDattr(s:tid, 'name')))
  else
    let s:cterm = 'none'
    if (synIDattr(s:id, 'bold', 'cterm') == '1')
      let s:cterm = 'bold'
    elseif (synIDattr(s:id, 'italic', 'cterm') == '1')
      let s:cterm = 'italic'
    elseif (synIDattr(s:id, 'reverse', 'cterm') == '1')
      let s:cterm = 'reverse'
    elseif (synIDattr(s:id, 'inverse', 'cterm') == '1')
      let s:cterm = 'reverse'
    elseif (synIDattr(s:id, 'standout', 'cterm') == '1')
      let s:cterm = 'standout'
    elseif (synIDattr(s:id, 'underline', 'cterm') == '1')
      let s:cterm = 'underline'
    elseif (synIDattr(s:id, 'undercurl', 'cterm') == '1')
      let s:cterm = 'undercurl'
    elseif (synIDattr(s:id, 'strikethrough', 'cterm') == '1')
      let s:cterm = 'strikethrough'
    endif
    if (synIDattr(s:id, 'fg', 'cterm') != '')
      let s:ctermfg = synIDattr(s:id, 'fg', 'cterm')
    else
      let s:ctermfg = 'none'
    endif
    if (synIDattr(s:id, 'bg', 'cterm') != '')
      let s:ctermbg = synIDattr(s:id, 'bg', 'cterm')
    else
      let s:ctermbg = 'none'
    endif
    call append('$', printf('hi %s cterm=%s ctermfg=%s ctermbg=%s', s:name, s:cterm, s:ctermfg, s:ctermbg))
  endif
endfor

call append('$', printf(''))
call append('$', 'let g:colors_name = ''autosaved''')
0 голосов
/ 09 января 2020

Если вы хотите создать цветовую тему, вы должны посмотреть включенные файлы цветов.

Например, этот файл, путь установки vim "... \ Vim \ vim81 \ colors \ pablo.vim" , это текстовый файл, его можно открыть с помощью vim.

The content format looks like this:

"......
"These are instructions
"......

hi clear
set background = dark
if exists ("syntax_on")
   syntax reset
endif
let g: colors_name = "pablo" "this is point, :colorscheme command needs this name to define.

"Here is the color definition code
hi color_group_name guifg=color_code guibg=color_code gui=none or bold
hi ...more color definition code

Вы можете создать свой собственный файл color.vim в этом формате, сохранить его в '... \ Vim \ vim81 \ colors \ colorname.vim ', а затем вы можете использовать его.

:colorscheme your_colorname
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...