hook_add = '''
let g:python_highlight_all = v:true
let g:awk_is_gawk = v:true
let g:is_bash = v:true
let g:rust_bang_comment_leader = v:true
let g:markdown_fenced_languages = ['ts=typescript']
let g:vim_indent_cont = 6
'''

[ftplugin]
_ = '''
setlocal formatoptions-=ro
setlocal formatoptions+=mMBl
'''

dockerfile = '''
function! s:set_abbrev(instruction) abort
  execute 'inoreabbrev <expr><buffer>' a:instruction
        \ printf("(getline('.')[:col('.') - 2] ==# '%s')", a:instruction)
        \ printf("? '%s' : '%s'", toupper(a:instruction), a:instruction)
endfunction

call s:set_abbrev('add')
call s:set_abbrev('cmd')
call s:set_abbrev('copy')
call s:set_abbrev('entrypoint')
call s:set_abbrev('env')
call s:set_abbrev('expose')
call s:set_abbrev('from')
call s:set_abbrev('healthcheck')
call s:set_abbrev('label')
call s:set_abbrev('onbuild')
call s:set_abbrev('run')
call s:set_abbrev('shell')
call s:set_abbrev('user')
call s:set_abbrev('volume')
call s:set_abbrev('workdir')

inoreabbrev <expr><buffer> as
      \ (getline('.')[:col('.') - 2] =~# '^FROM\s\+.*\s\+') ? 'AS' : 'as'
'''

gitcommit = '''
let b:caw_oneline_comment = ';'
" from https://zenn.dev/uochan/articles/2021-12-08-vim-conventional-commits
function! s:select_type() abort
  let title = printf('%s: ', trim(split(getline('.'), ';')[0]))

  silent! normal! "_dip
  silent! put! =title
  silent! startinsert!
endfunction

nnoremap <buffer> <CR><CR> <Cmd>call <SID>select_type()<CR>
'''

help = '''
setlocal iskeyword+=#
setlocal iskeyword+=:
setlocal iskeyword+=-
setlocal iskeyword+=+

nnoremap <buffer> q <C-w>q
nnoremap <buffer> <CR> <C-]>zv
xnoremap <buffer> <CR> <C-]>zv
nnoremap <buffer><silent><expr> [Toggle]l
      \ expand('%:e') ==# 'jax'
      \ ? printf('<Cmd>help %s@en<CR>', expand('<cword>'))
      \ : printf('<Cmd>help %s@ja<CR>', expand('<cword>'))

let s:tag_pattern = join([
      \ '\\\@<!|[#-)!+-~]\+|', '\*[#-)!+-~]\+\*\s', '\*[#-)!+-~]\+\*$',
      \ "'[a-z]\\{2,\\}'", "'t_..'",
      \ '<[-a-zA-Z0-9_]\+>', '<[SCM]-.>',
      \ 'CTRL-.', 'CTRL-SHIFT-.', 'CTRL-Break', 'CTRL-PageUp', 'CTRL-PageDown',
      \ 'CTRL-Insert', 'CTRL-Del', 'CTRL-{char}',
      \ ], '\|')
function! s:move_link(dir) abort
  call search(s:tag_pattern, a:dir ? 'sW' : 'bsW', 0, 500)
endfunction
nnoremap <buffer> <C-n> <Cmd>call <SID>move_link(1)<CR>
nnoremap <buffer> <C-p> <Cmd>call <SID>move_link(0)<CR>
'''

markdown = '''
hi link markdownCode Constant
autocmd user ColorScheme *
      \ hi link markdownCode Constant
'''

python = '''
setlocal softtabstop=4
setlocal shiftwidth=4
setlocal textwidth=80
setlocal smarttab
setlocal nosmartindent
inoreabbrev <expr><buffer> improt
      \ (getline('.')[:col('.') - 2] =~# 'from\s\+.*\s\+' <Bar><Bar>
      \  getline('.')[:col('.') - 2] ==# 'improt')
      \ ? 'import' : 'improt'
'''

qf = '''
setlocal nowrap
setlocal numberwidth=2
nnoremap <buffer> q <Cmd>cclose<CR>
'''

toml = '''
if !has('nvim') && !empty(filter(getline(1, 4),
      \ { _, val -> val =~# '\V\^\([[plugins]]\|hook_\)' }))
  call dein#toml#syntax()
endif
'''
[[plugins]]
# repo = 'jparise/vim-graphql'
repo = '4513echo/vim-graphql'
rev = 'typescript-comment'
on_ft = ['graphql', 'typescript', 'typescriptreact']

[[plugins]]
repo = 'cespare/vim-toml'
if = '!has("patch-8.2.3520") && !has("nvim")'
on_ft = ['toml']

[[plugins]]
repo = 'gko/vim-coloresque'
on_ft = ['vim', 'css', 'scss', 'sass']

[[plugins]]
repo = 'jceb/vim-hier'
on_ft = ['qf']
on_cmd = ['HierClean', 'HierStart', 'HierStop', 'HierUpdate']
[plugins.ftplugin]
qf = '''
nnoremap <buffer> q <Cmd>cclose<CR><Cmd>HierStop<CR>
'''

[[plugins]]
repo = 'lambdalisue/qfloc.vim'
on_ft = ['qf']
hook_add = '''
let g:qfloc_disable_default_mappings = v:true
" NOTE: I can't toggle qfloc sign/hover.
let g:qfloc_disable_sign = v:true
let g:qfloc_disable_hover = v:true
nmap <expr> ]c &diff ? ']c' : '<Plug>(qfloc-cnext)'
nmap <expr> [c &diff ? '[c' : '<Plug>(qfloc-cprevious)'
nmap ]l <Plug>(qfloc-lnext)
nmap [l <Plug>(qfloc-lprevious)
'''
[plugins.ftplugin]
qf = '''
nmap <buffer> j <Plug>(qfloc-j)
nmap <buffer> k <Plug>(qfloc-k)
nmap <buffer> s <Plug>(qfloc-sbuffer)
nmap <buffer> p <Plug>(qfloc-preview)
nmap <buffer> o <Plug>(qfloc-preview)
nmap <buffer> u <Plug>(qfloc-undo)
nmap <buffer> dd <Plug>(qfloc-delete)
xmap <buffer> d  <Plug>(qfloc-delete)
'''

[[plugins]]
repo = 'lark-parser/vim-lark-syntax'
on_ft = ['lark']

[[plugins]]
repo = 'mattn/vim-maketable'
on_ft = ['markdown']
on_cmd = ['MakeTable', 'UnmakeTable']

[[plugins]]
repo = 'plasticboy/vim-markdown'
on_ft = ['markdown']
hook_add = '''
let g:vim_markdown_no_default_key_mappings = v:true
let g:vim_markdown_follow_anchor = v:true
let g:vim_markdown_no_extensions_in_markdown = v:true
let g:vim_markdown_math = v:true
let g:vim_markdown_frontmatter = v:true
let g:vim_markdown_strikethrough = v:true
'''

[[plugins]]
repo = 'rhysd/vim-fixjson'
on_ft = ['json']
on_cmd = ['FixJson']

[[plugins]]
repo = 'rhysd/vim-gfm-syntax'
on_ft = ['markdown']
[plugins.ftplugin]
markdown = '''
syn cluster mkdNonListItem add=@githubFlavoredMarkdown
syn cluster mkdNonListItemBlock add=@githubFlavoredMarkdown
syn cluster githubFlavoredMarkdown contains=githubFlavoredMarkdownCode,
      \githubFlavoredMarkdownMention,githubFlavoredMarkdownStrikethrough,
      \githubFlavoredMarkdownEmoji,githubFlavoredMarkdownTableDelimiter,
      \githubFlavoredMarkdownTableAligner,githubFlavoredMarkdownTableBorder,
      \githubFlavoredMarkdownIssueNumber,githubFlavoredMarkdownCheckBoxBracket,
      \githubFlavoredMarkdownCheckBoxX
'''

[[plugins]]
repo = 'thinca/vim-qfreplace'
on_ft = ['qf']
on_cmd = ['Qfreplace']
[plugins.ftplugin]
qf = '''
nnoremap <buffer> r <Cmd>Qfreplace<CR>
'''
qfreplace = '''
nnoremap <buffer> q <C-w>q
'''

[[plugins]]
repo = 'tmux-plugins/vim-tmux'
on_ft = ['tmux']

[[plugins]]
repo = 'tpope/vim-git'
on_ft = ['gitcommit', 'gitconfig', 'gitrebase', 'gitsendmail']

[[plugins]]
repo = 'vim-jp/syntax-vim-ex'
on_ft = ['vim']