From 2c396806dc86089980602b2c224e9c5d19108268 Mon Sep 17 00:00:00 2001 From: Price Hiller Date: Mon, 15 Nov 2021 19:44:29 -0600 Subject: [PATCH] COC Nvim, ft plugins for CFEngine --- NvChad-Confs/chadrc.lua | 1 + NvChad-Confs/configs/coc_bindings.vim | 165 +++++++ NvChad-Confs/ftdetect/cf3.vim | 1 + NvChad-Confs/ftplugin/cf3.vim | 221 +++++++++ NvChad-Confs/init.lua | 24 +- NvChad-Confs/syntax/cf3.vim | 628 ++++++++++++++++++++++++++ 6 files changed, 1032 insertions(+), 8 deletions(-) create mode 100644 NvChad-Confs/configs/coc_bindings.vim create mode 100644 NvChad-Confs/ftdetect/cf3.vim create mode 100644 NvChad-Confs/ftplugin/cf3.vim create mode 100644 NvChad-Confs/syntax/cf3.vim diff --git a/NvChad-Confs/chadrc.lua b/NvChad-Confs/chadrc.lua index df91eeb..ef5e2e9 100644 --- a/NvChad-Confs/chadrc.lua +++ b/NvChad-Confs/chadrc.lua @@ -10,6 +10,7 @@ M.plugins = { options = {}, status = { dashboard = true, + telescope_media = true, }, default_plugin_config_replace = {}, } diff --git a/NvChad-Confs/configs/coc_bindings.vim b/NvChad-Confs/configs/coc_bindings.vim new file mode 100644 index 0000000..a95feb2 --- /dev/null +++ b/NvChad-Confs/configs/coc_bindings.vim @@ -0,0 +1,165 @@ +" Set internal encoding of vim, not needed on neovim, since coc.nvim using some +" unicode characters in the file autoload/float.vim +set encoding=utf-8 + +" TextEdit might fail if hidden is not set. +set hidden + +" Some servers have issues with backup files, see #649. +set nobackup +set nowritebackup + +" Give more space for displaying messages. +set cmdheight=2 + +" Having longer updatetime (default is 4000 ms = 4 s) leads to noticeable +" delays and poor user experience. +set updatetime=300 + +" Don't pass messages to |ins-completion-menu|. +set shortmess+=c + +" Always show the signcolumn, otherwise it would shift the text each time +" diagnostics appear/become resolved. +if has("nvim-0.5.0") || has("patch-8.1.1564") + " Recently vim can merge signcolumn and number column into one + set signcolumn=number +else + set signcolumn=yes +endif + +" Use tab for trigger completion with characters ahead and navigate. +" NOTE: Use command ':verbose imap ' to make sure tab is not mapped by +" other plugin before putting this into your config. +inoremap + \ pumvisible() ? "\" : + \ check_back_space() ? "\" : + \ coc#refresh() +inoremap pumvisible() ? "\" : "\" + +function! s:check_back_space() abort + let col = col('.') - 1 + return !col || getline('.')[col - 1] =~# '\s' +endfunction + +" Use to trigger completion. +if has('nvim') + inoremap coc#refresh() +else + inoremap coc#refresh() +endif + +" Make auto-select the first completion item and notify coc.nvim to +" format on enter, could be remapped by other vim plugin +inoremap pumvisible() ? coc#_select_confirm() + \: "\u\\=coc#on_enter()\" + +" Use `[g` and `]g` to navigate diagnostics +" Use `:CocDiagnostics` to get all diagnostics of current buffer in location list. +nmap [g (coc-diagnostic-prev) +nmap ]g (coc-diagnostic-next) + +" GoTo code navigation. +nmap gd (coc-definition) +nmap gy (coc-type-definition) +nmap gi (coc-implementation) +nmap gr (coc-references) + +" Use K to show documentation in preview window. +nnoremap K :call show_documentation() + +function! s:show_documentation() + if (index(['vim','help'], &filetype) >= 0) + execute 'h '.expand('') + elseif (coc#rpc#ready()) + call CocActionAsync('doHover') + else + execute '!' . &keywordprg . " " . expand('') + endif +endfunction + +" Highlight the symbol and its references when holding the cursor. +autocmd CursorHold * silent call CocActionAsync('highlight') + +" Symbol renaming. +nmap rn (coc-rename) + +" Formatting selected code. +xmap f (coc-format-selected) +nmap f (coc-format-selected) + +augroup mygroup + autocmd! + " Setup formatexpr specified filetype(s). + autocmd FileType typescript,json setl formatexpr=CocAction('formatSelected') + " Update signature help on jump placeholder. + autocmd User CocJumpPlaceholder call CocActionAsync('showSignatureHelp') +augroup end + +" Applying codeAction to the selected region. +" Example: `aap` for current paragraph +xmap a (coc-codeaction-selected) +nmap a (coc-codeaction-selected) + +" Remap keys for applying codeAction to the current buffer. +nmap ac (coc-codeaction) +" Apply AutoFix to problem on the current line. +nmap qf (coc-fix-current) + +" Map function and class text objects +" NOTE: Requires 'textDocument.documentSymbol' support from the language server. +xmap if (coc-funcobj-i) +omap if (coc-funcobj-i) +xmap af (coc-funcobj-a) +omap af (coc-funcobj-a) +xmap ic (coc-classobj-i) +omap ic (coc-classobj-i) +xmap ac (coc-classobj-a) +omap ac (coc-classobj-a) + +" Remap and for scroll float windows/popups. +if has('nvim-0.4.0') || has('patch-8.2.0750') + nnoremap coc#float#has_scroll() ? coc#float#scroll(1) : "\" + nnoremap coc#float#has_scroll() ? coc#float#scroll(0) : "\" + inoremap coc#float#has_scroll() ? "\=coc#float#scroll(1)\" : "\" + inoremap coc#float#has_scroll() ? "\=coc#float#scroll(0)\" : "\" + vnoremap coc#float#has_scroll() ? coc#float#scroll(1) : "\" + vnoremap coc#float#has_scroll() ? coc#float#scroll(0) : "\" +endif + +" Use CTRL-S for selections ranges. +" Requires 'textDocument/selectionRange' support of language server. +nmap (coc-range-select) +xmap (coc-range-select) + +" Add `:Format` command to format current buffer. +command! -nargs=0 Format :call CocAction('format') + +" Add `:Fold` command to fold current buffer. +command! -nargs=? Fold :call CocAction('fold', ) + +" Add `:OR` command for organize imports of the current buffer. +command! -nargs=0 OR :call CocAction('runCommand', 'editor.action.organizeImport') + +" Add (Neo)Vim's native statusline support. +" NOTE: Please see `:h coc-status` for integrations with external plugins that +" provide custom statusline: lightline.vim, vim-airline. +set statusline^=%{coc#status()}%{get(b:,'coc_current_function','')} + +" Mappings for CoCList +" Show all diagnostics. +nnoremap a :CocList diagnostics +" Manage extensions. +nnoremap e :CocList extensions +" Show commands. +nnoremap c :CocList commands +" Find symbol of current document. +nnoremap o :CocList outline +" Search workspace symbols. +nnoremap s :CocList -I symbols +" Do default action for next item. +nnoremap j :CocNext +" Do default action for previous item. +nnoremap k :CocPrev +" Resume latest coc list. +nnoremap p :CocListResume diff --git a/NvChad-Confs/ftdetect/cf3.vim b/NvChad-Confs/ftdetect/cf3.vim new file mode 100644 index 0000000..d3a09d8 --- /dev/null +++ b/NvChad-Confs/ftdetect/cf3.vim @@ -0,0 +1 @@ +au BufRead,BufNewFile *.cf set ft=cf3 diff --git a/NvChad-Confs/ftplugin/cf3.vim b/NvChad-Confs/ftplugin/cf3.vim new file mode 100644 index 0000000..bfa93ee --- /dev/null +++ b/NvChad-Confs/ftplugin/cf3.vim @@ -0,0 +1,221 @@ +" Vim file plugin +" This is my first attempt at a ftplugin file. Feel free to send me +" corrections or improvements. I'll give you a credit. +" +" USAGE +" There is already a vim file that uses 'cf' as a file extension. You can use +" cf3 for your cf3 file extensions or identify via your vimrc file: +" au BufRead,BufNewFile *.cf set ft=cf3 + +" Check to see if DisableCF3Ftplugin is defined +" If you only want the syntax plugin add "let g:DisableCF3Ftplugin=1" in +" ~/.vimrc +if exists("g:DisableCF3Ftplugin") + finish +endif + + +" Only do this when not done yet for this buffer +if exists("b:loaded_CFE3Ftplugin") + finish +endif +let b:loaded_CFE3Ftplugin = 1 + +let s:install_dir = expand(':p:h:h') + +" =============== Keyword Abbreviations =============== +" enable keyword abbreviations with by adding +" "let g:EnableCFE3KeywordAbbreviations=1" to your vimrc +" Convenience function ToggleCFE3KeywordAbbreviations +" mapped to ,i by default to toggle abbreviations on or off +" +function! EnableCFE3KeywordAbbreviations() + iab = => + iab ba bundle agent + iab bc bundle common + iab bu bundle + iab cano canonify( "=Eatchar('\s') + iab cla classes: + iab comma commands: + iab comme comment => "=Eatchar('\s') + iab exp expression => =Eatchar('\s') + iab fil files: + iab han handle => "=Eatchar('\s') + iab ifv ifvarclass => =Eatchar('\s') + iab met methods: + iab pro processes: + iab rep reports: + iab sli slist => { + iab str string => "=Eatchar('\s') + iab sysw ${sys.workdir} + iab ub usebundle => + iab var vars: +endfunction + +function! DisableCFE3KeywordAbbreviations() + iunab = + iunab ba + iunab bc + iunab bu + iunab cano + iunab cla + iunab comma + iunab comme + iunab exp + iunab fil + iunab han + iunab ifv + iunab met + iunab pro + iunab rep + iunab sli + iunab str + iunab sysw + iunab ub + iunab var +endfunction + +" Default abbreviations off +" to disable let g:EnableCFE3KeywordAbbreviations=1 in ~/.vimrc +if exists('g:EnableCFE3KeywordAbbreviations') + call EnableCFE3KeywordAbbreviations() +endif + +function! ToggleCFE3KeywordAbbreviations() + if !exists('b:EnableCFE3KeywordAbbreviations') + let b:EnableCFE3KeywordAbbreviations=1 + call EnableCFE3KeywordAbbreviations() + else + unlet b:EnableCFE3KeywordAbbreviations + call DisableCFE3KeywordAbbreviations() + endif +endfunction + +function! EnableCFE3PermissionFix() +" On Save set the permissions of the edited file so others can't access + :autocmd BufWritePost *.cf silent !chmod g-w,o-rwx % +endfunction + +" Default permission fix off +" To enable permission fixing in your main .vimrc +" let g:EnableCFE3PermissionFix=1 +if exists('g:EnableCFE3PermissionFix') + call EnableCFE3PermissionFix() +endif + +" maps +" Toggle KeywordAbbreviations +nnoremap ,i :call ToggleCFE3KeywordAbbreviations() +" Wrap WORD in double quotes +nnoremap ,q dEi"pa" +" Insert blank promise +nnoremap ,p o""handle => "",comment => "" +" quote list items +vnoremap ,q :s/^\s*\(.*\)\s*$/"\1",/g + +" Function to align groups of => assignment lines. +" Credit to 'Scripting the Vim editor, Part 2: User-defined functions' +" by Damian Conway +" http://www.ibm.com/developerworks/linux/library/l-vim-script-2/index.html +if !exists("*CF3AlignAssignments") +function CF3AlignAssignments (AOP) + "Patterns needed to locate assignment operators... + if a:AOP == 'vars' + let ASSIGN_OP = '\(string\|int\|real\|data\|slist\|ilist\|rlist\|expression\|and\|or\|not\|volume\)*\s\+=>' + else + let ASSIGN_OP = '=>' + endif + let ASSIGN_LINE = '^\(.\{-}\)\s*\(' . ASSIGN_OP . '\)' + + "Locate block of code to be considered (same indentation, no blanks) + let indent_pat = '^' . matchstr(getline('.'), '^\s*') . '\S' + let firstline = search('^\%('. indent_pat . '\)\@!','bnW') + 1 + let lastline = search('^\%('. indent_pat . '\)\@!', 'nW') - 1 + if lastline < 0 + let lastline = line('$') + endif + + "Find the column at which the operators should be aligned... + let max_align_col = 0 + let max_op_width = 0 + for linetext in getline(firstline, lastline) + "Does this line have an assignment in it? + let left_width = match(linetext, '\s*' . ASSIGN_OP) + + "If so, track the maximal assignment column and operator width... + if left_width >= 0 + let max_align_col = max([max_align_col, left_width]) + + let op_width = strlen(matchstr(linetext, ASSIGN_OP)) + let max_op_width = max([max_op_width, op_width+1]) + endif + endfor + + "Code needed to reformat lines so as to align operators... + let FORMATTER = '\=printf("%-*s%*s", max_align_col, submatch(1), + \ max_op_width, submatch(2))' + + " Reformat lines with operators aligned in the appropriate column... + for linenum in range(firstline, lastline) + let oldline = getline(linenum) + let newline = substitute(oldline, ASSIGN_LINE, FORMATTER, "") + call setline(linenum, newline) + endfor +endfunction +endif + +nnoremap ,= :call CF3AlignAssignments("null") +nnoremap = :call CF3AlignAssignments("vars") + +" For pasting code snippets +function! Pastefile( FILE ) + let arg_file = s:install_dir."/snippets/".a:FILE + let @" = join( readfile( arg_file ), "\n" ) + put + return "" +endfunction + +nnoremap ,k :call Pastefile("template.cf")kdd +nnoremap ,s :call Pastefile("stdlib.cf")kdd + +" TODO +" Indents + +" CREDITS +" Neil Watson +" Other Cfengine information: http://watson-wilson.ca/cfengine/ +" +" CHANGES +" Wednesday January 09 2013 +" Operator alignment now works for just '=>' with ',=' or 'string, stlist ,etc +" and => ' with '=' +" +" Wednesday October 05 2011 +" - Added comment and handle abbs. Assumes you have the Eatchar and Getchar +" functions. +" - Can now wrap words and lists in quotes. +" - Insert blank promises (,p) +" - Insert blank testing skeleton (,k) +" +" CHANGES +" Monday November 21 2011 +" - IAB's for string, slist and usebundle. + +" CHANGES +" Fri Apr 27 2012 +" Added function to align assigment operators + +" vim_cf3 files (https://github.com/neilhwatson/vim_cf3) +" Copyright (C) 2011 Neil H. Watson +" +" This program is free software: you can redistribute it and/or modify it under +" the terms of the GNU General Public License as published by the Free Software +" Foundation, either version 3 of the License, or (at your option) any later +" version. +" +" This program is distributed in the hope that it will be useful, but WITHOUT ANY +" WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A +" PARTICULAR PURPOSE. See the GNU General Public License for more details. +" +" You should have received a copy of the GNU General Public License along with +" this program. If not, see . diff --git a/NvChad-Confs/init.lua b/NvChad-Confs/init.lua index 2f34c8d..adfd6a2 100644 --- a/NvChad-Confs/init.lua +++ b/NvChad-Confs/init.lua @@ -26,15 +26,23 @@ hooks.add("install_plugins", function(use) require("core.utils").packer_lazy_load "neoscroll.nvim" end, } + use { + "neoclide/coc.nvim", + branch="release" + } end) + +-- COC NVIM KEYBINDS +vim.cmd("source ~/.config/nvim/lua/custom/configs/coc_bindings.vim") + hooks.add("setup_mappings", function(map) - local lsp_opts = {} - map("n", "d", "lua vim.lsp.buf.hover()", lsp_opts) - map("n", "D", "lua vim.lsp.buf.signature_help()", lsp_opts) - map("n", "b", "lua vim.lsp.buf.definition()", lsp_opts) - map("n", "B", "lua vim.lsp.buf.implementation()", lsp_opts) - map("n", "r", "lua vim.lsp.buf.references()", lsp_opts) - map("n", "R", "lua vim.lsp.buf.rename()", lsp_opts) - map("n", "ca", "lua vim.lsp.buf.code_action()", lsp_opts) + -- local lsp_opts = {} + -- map("n", "d", "lua vim.lsp.buf.hover()", lsp_opts) + -- map("n", "D", "lua vim.lsp.buf.signature_help()", lsp_opts) + -- map("n", "b", "lua vim.lsp.buf.definition()", lsp_opts) + -- map("n", "B", "lua vim.lsp.buf.implementation()", lsp_opts) + -- map("n", "r", "lua vim.lsp.buf.references()", lsp_opts) + -- map("n", "R", "lua vim.lsp.buf.rename()", lsp_opts) + -- map("n", "ca", "lua vim.lsp.buf.code_action()", lsp_opts) end) diff --git a/NvChad-Confs/syntax/cf3.vim b/NvChad-Confs/syntax/cf3.vim new file mode 100644 index 0000000..3075ade --- /dev/null +++ b/NvChad-Confs/syntax/cf3.vim @@ -0,0 +1,628 @@ +" vim:foldmethod=marker + +" Vim syntax file +" Language: Cfengine version 3 +" Maintainer: Neil Watson +" Last Change: Jun 02 2018 +" Location: +" +" TODO: +" - would be great to know current promise type +" +" This is my first attempt at a syntax file. Feel free to send me corrections +" or improvements. I'll give you a credit. +" +" USAGE +" There is already a vim file that uses 'cf' as a file extension. You can use +" cf3 for your cf3 file extensions or identify via your vimrc file: +" au BufRead,BufNewFile *.cf set ft=cf3 +" +" For version 5.x: Clear all syntax items +" For version 6.x: Quit when a syntax file was already loaded + +au BufRead,BufNewFile *.cf set ft=cf3 + +if version < 600 " {{{ + syntax clear +elseif exists ("b:current_syntax") + finish +endif + +syn case ignore + +syn match cf3BundleParams /(\w\+\(,\s*\w\+\)*)/hs=s+1,he=e-1 contained +syn match cf3BundleName /\s\+\w\+\s*/ contained nextgroup=cf3BundleParams + +syn keyword cf3BundleTypes agent common server knowledge monitor edit_line contained nextgroup=cf3BundleName skipwhite +syn keyword cf3BundleTypes edit_xml contained nextgroup=cf3BundleName skipwhite +syn match cf3Bundle /^\s*bundle\s\+/ nextgroup=Cf3BundleTypes skipwhite + +syn keyword cf3BodyTypes action classes contain acl changes contained nextgroup=cf3BundleName skipwhite +syn keyword cf3BodyTypes copy_from delete depth_search contained nextgroup=cf3BundleName skipwhite +syn keyword cf3BodyTypes edit_defaults file_select password contained nextgroup=cf3BundleName skipwhite +syn keyword cf3BodyTypes link_from perms rename tcp_ip contained nextgroup=cf3BundleName skipwhite +syn keyword cf3BodyTypes package_method process_count package_module contained nextgroup=cf3BundleName skipwhite +syn keyword cf3BodyTypes process_select service_method contained nextgroup=cf3BundleName skipwhite +syn keyword cf3BodyTypes mount volume printfile match_value contained nextgroup=cf3BundleName skipwhite +syn keyword cf3BodyTypes association select_region delete_select contained nextgroup=cf3BundleName skipwhite +syn keyword cf3BodyTypes insert_select location edit_field replace_with contained nextgroup=cf3BundleName skipwhite +syn keyword cf3BodyTypes common database_server environment_resources contained nextgroup=cf3BundleName skipwhite +syn match cf3Body /^\s*body\s\+/ nextgroup=Cf3BodyTypes skipwhite + +syn match cf3BodyControl /^\s*body\s\+\(common\|agent\|server\)\s\+control/ +syn match cf3BodyControl /^\s*body\s\+\(monitor\|runagent\)\s\+control/ +syn match cf3BodyControl /^\s*body\s\+\(executor\|knowledge\|hub\)\s\+control/ +syn match cf3BodyControl /^\s*body\s\+\(reporter\|file\)\s\+control/ + +syn match cf3Action /\<\(vars\|classes\|reports\|meta\|users\):/ +syn match cf3Action /\<\(commands\|databases\|files\|interfaces\|methods\|packages\|storage\):/ +syn match cf3Action /\<\(access\|measurements\|roles\|topics\|occurrences\|defaults\):/ +syn match cf3Action /\<\(control\|guest_environments\|outputs\|processes\|services\|things\):/ +syn match cf3Action /\<\(delete_lines\|field_edits\|insert_lines\|replace_patterns\):/ + +syn match cf3Class /[^ "\t:#]\+::/ +syn region cf3ClassBlock start=/\[%CFEngine/ end=/%\]/ contains=Cf3Class + +syn keyword TODO todo TODO FIXME TBD NOTE contained +syn match cf3Comment /#.*/ contains=TODO + +syn match cf3Identifier /=>/ + +" Escape sequences in regexes +syn match cf3Esc /\\\\[sSdD+][\+\*]*/ contained +" Array indexes contained in []. Does not seems to be working. +syn region cf3Array start=/\(\\\)\@]/ contains=cf3BuiltIns,cf3Stdlib +syn match cf3Function /\<\w\+[,;()]/ contains=cf3BuiltIns,cf3Stdlib,cf3Evolve_freelib + +syn keyword cf3ControlAttr bundlesequence cache_system_functions goal_categories contained +syn keyword cf3ControlAttr ignore_missing_bundles ignore_missing_inputs inputs contained +syn keyword cf3ControlAttr version lastseenexpireafter output_prefix domain contained +syn keyword cf3ControlAttr require_comments host_licenses_paid site_classes contained +syn keyword cf3ControlAttr syslog_host syslog_port fips_mode protocol_version contained +syn keyword cf3ControlAttr package_module contained +syn keyword cf3MethodAttr usebundle useresult inherit contained +syn keyword cf3CommonAttr action classes if unless ifvarclass handle depends_on comment policy with meta contained +syn keyword cf3ClassesAttr and dist expression not or persistence scope select_class xor contained +syn keyword cf3CommandsAttr args contain module contained +syn keyword cf3ProcessesAttr process_count process_select contained +syn keyword cf3ProcessesAttr process_stop restart_class signals contained +syn keyword cf3PackagesAttr package_architectures package_method package_policy contained +syn keyword cf3PackagesAttr package_select package_version package_module contained +syn keyword cf3GuestEnvAttr environment_host environment_interface contained +syn keyword cf3GuestEnvAttr environment_resources environment_state contained +syn keyword cf3GuestEnvAttr environment_type contained +syn keyword cf3TopicsAttr association synonyms generalizations contained +syn keyword cf3ServicesAttr service_policy service_dependencies service_method contained +syn keyword cf3DatabasesAttr database_server database_type contained +syn keyword cf3DatabasesAttr database_operation database_columns contained +syn keyword cf3DatabasesAttr database_rows registry_exclude contained +syn keyword cf3DefaultsAttr if_match_regex contained +syn keyword cf3StorageAttr mount volume contained +syn keyword cf3FilesAttr acl changes copy_from create delete depth_search contained +syn keyword cf3FilesAttr edit_defaults edit_line edit_template edit_xml file_select contained +syn keyword cf3FilesAttr link_from move_obstructions pathtype perms contained +syn keyword cf3FilesAttr rename repository template_method template_data touch transformer contained +syn keyword cf3AccessAttr admit_ips admit_hostnames admit_keys admit deny deny_ips deny_hostnames deny_keys maproot contained +syn keyword cf3AccessAttr ifencrypted resource_type contained +syn keyword cf3MeasurementsAttr stream_type data_type history_type contained +syn keyword cf3MeasurementsAttr units match_value contained +syn keyword cf3ReportsAttr friend_pattern intermittency lastseen contained +syn keyword cf3ReportsAttr printfile report_to_file showstate contained +syn keyword cf3ReportsAttr bundle_return_value_index contained + +" Bodies +syn keyword cf3EditLineAttr replace_with edit_field whitespace_policy location contained +syn keyword cf3EditLineAttr insert_select insert_type expand_scalars not_matching contained +syn keyword cf3EditLineAttr delete_select select_region contained +syn keyword cf3EditFieldAttr allow_blank_fields extend_fields field_operation contained +syn keyword cf3EditFieldAttr field_separator field_value select_field contained +syn keyword cf3EditFieldAttr start_fields_from_zero value_separator contained +syn keyword cf3ReplaceWithAttr occurrences replace_value contained +syn keyword cf3SelectRegionAttr include_start_delimiter include_end_delimiter contained +syn keyword cf3SelectRegionAttr select_start select_end contained +syn keyword cf3ProcCountAttr in_range_define match_range out_of_range_define contained +syn keyword cf3ProcSelectAttr command pid ppid pgid priority process_owner contained +syn keyword cf3ProcSelectAttr process_result rsize status stime_range ttime_range contained +syn keyword cf3ProcSelectAttr tty threads vsize contained +syn keyword cf3EditDefAttr edit_backup empty_file_before_editing max_file_size recognize_join contained +syn keyword cf3LocationAttr before_after first_last select_line_matching contained +syn keyword cf3BodyFileSelectAttr leaf_name path_name search_mode search_size search_owners contained +syn keyword cf3BodyFileSelectAttr search_groups search_bsdflags ctime mtime atime contained +syn keyword cf3BodyFileSelectAttr exec_regex exec_program file_types issymlinkto file_result contained +syn keyword cf3BodyClassesAttr promise_repaired repair_failed repair_denied contained +syn keyword cf3BodyClassesAttr repair_timeout promise_kept cancel_kept cancel_repaired contained +syn keyword cf3BodyClassesAttr cancel_notkept kept_returncodes repaired_returncodes contained +syn keyword cf3BodyClassesAttr failed_returncodes persist_time scope timer_policy contained +syn keyword cf3BodyLinkFromAttr copy_patterns link_children link_type source contained +syn keyword cf3BodyLinkFromAttr when_linking_children when_no_source contained +syn keyword cf3BodyPermsAttr bsdflags groups mode owners rxdirs contained +syn keyword cf3BodyACLAttr aces acl_directory_inherit acl_method acl_type specify_inherit_aces contained +syn keyword cf3BodyDepthSearchAttr depth exclude_dirs include_basedir include_dirs contained +syn keyword cf3BodyDepthSearchAttr rmdeadlinks traverse_links xdev contained +syn keyword cf3BodyDeleteAttr dirlinks rmdirs contained +syn keyword cf3BodyRenameAttr disable disable_mode disable_suffix newname rotate contained +syn keyword cf3BodyChangesAttr hash report_changes update_hashes report_diffs contained +syn keyword cf3BodyPackageModuleAttr default_options query_installed_ifelapsed contained +syn keyword cf3BodyPackageModuleAttr query_updates_ifelapsed contained +syn keyword cf3BodyPackageMethodAttr package_add_command package_arch_regex contained +syn keyword cf3BodyPackageMethodAttr package_changes package_delete_command contained +syn keyword cf3BodyPackageMethodAttr package_delete_convention package_file_repositories contained +syn keyword cf3BodyPackageMethodAttr package_installed_regex package_list_arch_regex contained +syn keyword cf3BodyPackageMethodAttr package_list_command package_list_name_regex contained +syn keyword cf3BodyPackageMethodAttr package_list_update_command package_list_update_ifelapsed contained +syn keyword cf3BodyPackageMethodAttr package_list_version_regex package_name_convention contained +syn keyword cf3BodyPackageMethodAttr package_name_regex package_noverify_regex contained +syn keyword cf3BodyPackageMethodAttr package_noverify_returncode package_patch_arch_regex contained +syn keyword cf3BodyPackageMethodAttr package_patch_command package_patch_installed_regex contained +syn keyword cf3BodyPackageMethodAttr package_patch_list_command package_patch_name_regex contained +syn keyword cf3BodyPackageMethodAttr package_patch_version_regex package_update_command contained +syn keyword cf3BodyPackageMethodAttr package_verify_command package_version_regex contained +syn keyword cf3BodyPackageMethodAttr package_version_less_command package_version_equal_command contained +syn keyword cf3BodyPackageMethodAttr package_multiline_start contained +syn keyword cf3BodyActionAttr action_policy ifelapsed expireafter log_string contained +syn keyword cf3BodyActionAttr log_level log_kept log_priority log_repaired contained +syn keyword cf3BodyActionAttr log_failed value_kept value_repaired value_notkept contained +syn keyword cf3BodyActionAttr audit background report_level contained +syn keyword cf3BodyActionAttr measurement_class contained +syn keyword cf3BodyContainAttr useshell umask exec_owner exec_group exec_timeout contained +syn keyword cf3BodyContainAttr chdir chroot preview no_output contained +syn keyword cf3BodyCopyFromAttr source servers collapse_destination_dir contained +syn keyword cf3BodyCopyFromAttr compare copy_backup encrypt check_root contained +syn keyword cf3BodyCopyFromAttr copylink_patterns copy_size findertype contained +syn keyword cf3BodyCopyFromAttr linkcopy_patterns link_type force_update contained +syn keyword cf3BodyCopyFromAttr force_ipv4 portnumber preserve protocol_version purge contained +syn keyword cf3BodyCopyFromAttr stealth timeout trustkey type_check verify contained +syn keyword cf3BodyVolumeAttr check_foreign freespace sensible_size contained +syn keyword cf3BodyVolumeAttr sensible_count scan_arrivals contained +syn keyword cf3BodyMountAttr edit_fstab mount_type mount_source contained +syn keyword cf3BodyMountAttr mount_server mount_options unmount contained +syn keyword cf3BodyServiceMethodAttr service_type service_args contained +syn keyword cf3BodyServiceMethodAttr service_autostart_policy service_dependence_chain contained +syn keyword cf3BodyDatabaseServerAttr db_server_owner db_server_password contained +syn keyword cf3BodyDatabaseServerAttr db_server_host db_server_type contained +syn keyword cf3BodyDatabaseServerAttr db_server_connection_db contained +syn keyword cf3BodyEnvResourcesAttr env_cpus env_memory env_disk contained +syn keyword cf3BodyEnvResourcesAttr env_baseline env_spec_file env_spec contained +syn keyword cf3BodyMatchValueAttr select_line_matching select_line_number contained +syn keyword cf3BodyMatchValueAttr extraction_regex track_growing_file contained +syn keyword cf3BodyServiceMethodAttr service_type service_args service_bundle contained +syn keyword cf3BodyServiceMethodAttr service_autostart_policy service_dependence_chain contained +syn keyword cf3BodyEnvInterfaceAttr env_addresses env_name env_network contained +syn keyword cf3BodyServerControlAttr allowallconnects allowconnects allowlegacyconnects contained +syn keyword cf3BodyServerControlAttr allowusers auditing bindtointerface contained +syn keyword cf3BodyServerControlAttr cfruncommand denybadclocks denyconnects contained +syn keyword cf3BodyServerControlAttr dynamicaddresses hostnamekeys keycacheTTL contained +syn keyword cf3BodyServerControlAttr logallconnections logencryptedtransfers contained +syn keyword cf3BodyServerControlAttr maxconnections port serverfacility contained +syn keyword cf3BodyServerControlAttr skipverify trustkeysfrom contained +syn keyword cf3BodyAgentControlAttr abortclasses abortbundleclasses addclasses contained +syn keyword cf3BodyAgentControlAttr agentaccess agentfacility alwaysvalidate contained +syn keyword cf3BodyAgentControlAttr auditing binarypaddingchar bindtointerface contained +syn keyword cf3BodyAgentControlAttr hashupdates childlibpath checksum_alert_time contained +syn keyword cf3BodyAgentControlAttr defaultcopytype dryrun editbinaryfilesize contained +syn keyword cf3BodyAgentControlAttr editfilesize environment exclamation expireafter contained +syn keyword cf3BodyAgentControlAttr files_single_copy files_auto_define hostnamekeys contained +syn keyword cf3BodyAgentControlAttr ifelapsed inform intermittency max_children contained +syn keyword cf3BodyAgentControlAttr maxconnections mountfilesystems nonalphanumfiles contained +syn keyword cf3BodyAgentControlAttr repchar refresh_processes default_repository contained +syn keyword cf3BodyAgentControlAttr secureinput sensiblecount sensiblesize contained +syn keyword cf3BodyAgentControlAttr skipidentify suspiciousnames syslog verbose contained +syn keyword cf3BodyAgentControlAttr track_value timezone default_timeout contained +syn keyword cf3BodyExecutorControlAttr splaytime mailfrom mailsubject mailto smtpserver contained +syn keyword cf3BodyExecutorControlAttr mailmaxlines schedule executorfacility contained +syn keyword cf3BodyExecutorControlAttr exec_command contained +syn keyword cf3BodyEditDefsAttr edit_backup empty_file_before_editing contained +syn keyword cf3BodyEditDefsAttr max_file_size recognize_join inherit contained +syn keyword cf3BodyDeleteSelectAttr delete_if_startwith_from_list contained +syn keyword cf3BodyDeleteSelectAttr delete_if_not_startwith_from_list contained +syn keyword cf3BodyDeleteSelectAttr delete_if_match_from_list contained +syn keyword cf3BodyDeleteSelectAttr delete_if_not_match_from_list contained +syn keyword cf3BodyDeleteSelectAttr delete_if_contains_from_list contained +syn keyword cf3BodyDeleteSelectAttr delete_if_not_contains_from_list contained +syn keyword cf3BodyInsertSelectAttr insert_if_startwith_from_list contained +syn keyword cf3BodyInsertSelectAttr insert_if_not_startwith_from_list contained +syn keyword cf3BodyInsertSelectAttr insert_if_match_from_list contained +syn keyword cf3BodyInsertSelectAttr insert_if_not_match_from_list contained +syn keyword cf3BodyInsertSelectAttr insert_if_contains_from_list contained +syn keyword cf3BodyInsertSelectAttr insert_if_not_contains_from_list contained +syn keyword cf3BodyMonitorControlAttr forgetrate monitorfacility histograms contained +syn keyword cf3BodyMonitorControlAttr tcpdump tcpdumpcommand contained +syn keyword cf3BodyPrintfileAttr file_to_print number_of_lines contained + +syn cluster cf3AttrCluster contains=cf3CommonAttr,cf3ClassesAttr,cf3Identifier, +syn cluster cf3AttrCluster add=cf3ProcessesAttr,cf3FilesAttr,cf3ReportsAttr +syn cluster cf3AttrCluster add=cf3PackagesAttr,cf3GuestEnvAttr,cf3TopicsAttr +syn cluster cf3AttrCluster add=cf3StorageAttr,cf3AccessAttr,cf3MeasurementsAttr +syn cluster cf3AttrCluster add=cf3EditLineAttr,cf3EditFieldAttr,cf3ReplaceWithAttr +syn cluster cf3AttrCluster add=cf3SelectRegionAttr,cf3ProcCountAttr,cf3ProcSelectAttr +syn cluster cf3AttrCluster add=cf3EditDefAttr,cf3LocationAttr,cf3CommandsAttr,cf3BodyFileSelectAttr +syn cluster cf3AttrCluster add=cf3ControlAttr,cf3MethodAttr,cf3BodyClassesAttr +syn cluster cf3AttrCluster add=cf3ServicesAttr,cf3DatabasesAttr,cf3DefaultsAttr + +syn cluster cf3AttrCluster add=cf3BodyLinkFromAttr,cf3BodyPermsAttr,cf3BodyACLAttr +syn cluster cf3AttrCluster add=cf3BodyDepthSearchAttr,cf3BodyDeleteAttr,cf3BodyRenameAttr +syn cluster cf3AttrCluster add=cf3BodyChangesAttr,cf3BodyPackageMethodAttr,cf3BodyActionAttr +syn cluster cf3AttrCluster add=cf3BodyPackageModuleAttr +syn cluster cf3AttrCluster add=cf3BodyContainAttr,cf3BodyCopyFromAttr,cf3BodyVolumeAttr +syn cluster cf3AttrCluster add=cf3BodyMountAttr,cf3BodyServiceMethodAttr,cf3BodyDatabaseServerAttr +syn cluster cf3AttrCluster add=cf3BodyEnvResourcesAttr,cf3BodyMatchValueAttr,cf3BodyServiceMethodAttr +syn cluster cf3AttrCluster add=cf3BodyEnvInterfaceAttr,cf3BodyServerControlAttr,cf3BodyEditDefsAttr +syn cluster cf3AttrCluster add=cf3BodyAgentControlAttr,cf3BodyExecutorControlAttr +syn cluster cf3AttrCluster add=cf3BodyDeleteSelectAttr,cf3BodyInsertSelectAttr +syn cluster cf3AttrCluster add=cf3BodyMonitorControlAttr,cf3BodyPrintfileAttr +syn match cf3Attributes /\w\+\s*=>/ contains=@cf3AttrCluster + +" }}} + +if version >= 508 || !exists("did_cfg_syn_inits") " {{{ + if version < 508 + let did_cfg_syn_inits = 1 + command -nargs=+ HiLink hi link + else + command -nargs=+ HiLink hi def link + endif + + hi cf3Context ctermfg=DarkGreen + hi cf3Arrows ctermfg=DarkCyan + hi cf3Type ctermfg=Magenta + hi Identifier ctermfg=Blue + hi Function ctermfg=DarkGreen + hi Library ctermfg=DarkGrey + hi cf3ClassBlock ctermfg=Yellow + + HiLink cf3Bundle Statement + HiLink cf3BundleTypes Statement + HiLink cf3BundleName Function + HiLink cf3BundleParams Identifier + + HiLink cf3Body Statement + HiLink cf3BodyTypes Statement + HiLink cf3Comment Comment + + HiLink cf3BodyControl Statement + HiLink cf3BodyControlTypes Statement + HiLink cf3BodyControlName Statement + + HiLink cf3Action Underlined + HiLink cf3Class cf3Context + + HiLink cf3String String + HiLink cf3BuiltIns Function + HiLink cf3Evolve_freelib Function + HiLink cf3Stdlib Library + + HiLink cf3Identifier cf3Arrows + HiLink cf3Esc Special + HiLink cf3Array Special + HiLink cf3Var Identifier + + HiLink cf3Type cf3Type + HiLink cf3CommonAttr Statement + HiLink cf3ClassesAttr Statement + HiLink cf3CommandsAttr Statement + HiLink cf3ProcessesAttr Statement + HiLink cf3FilesAttr Statement + HiLink cf3MethodAttr cf3Type + HiLink cf3PackagesAttr Statement + HiLink cf3ControlAttr Statement + HiLink cf3GuestEnvAttr Statement + HiLink cf3TopicsAttr Statement + HiLink cf3ServicesAttr Statement + HiLink cf3DatabasesAttr Statement + HiLink cf3DefaultsAttr Statement + HiLink cf3StorageAttr Statement + HiLink cf3AccessAttr Statement + HiLink cf3MeasurementsAttr Statement + HiLink cf3ReportsAttr Statement + + HiLink cf3EditLineAttr Statement + HiLink cf3EditFieldAttr Statement + HiLink cf3ReplaceWithAttr Statement + HiLink cf3SelectRegionAttr Statement + HiLink cf3ProcCountAttr Statement + HiLink cf3ProcSelectAttr Statement + HiLink cf3EditDefAttr Statement + HiLink cf3LocationAttr Statement + HiLink cf3BodyFileSelectAttr Statement + HiLink cf3BodyClassesAttr Statement + HiLink cf3BodyLinkFromAttr Statement + HiLink cf3BodyPermsAttr Statement + HiLink cf3BodyACLAttr Statement + HiLink cf3BodyDepthSearchAttr Statement + HiLink cf3BodyDeleteAttr Statement + HiLink cf3BodyRenameAttr Statement + HiLink cf3BodyChangesAttr Statement + HiLink cf3BodyPackageMethodAttr Statement + HiLink cf3BodyPackageModuleAttr Statement + HiLink cf3BodyActionAttr Statement + HiLink cf3BodyContainAttr Statement + HiLink cf3BodyCopyFromAttr Statement + HiLink cf3BodyVolumeAttr Statement + HiLink cf3BodyMountAttr Statement + HiLink cf3BodyServiceMethodAttr Statement + HiLink cf3BodyDatabaseServerAttr Statement + HiLink cf3BodyEnvResourcesAttr Statement + HiLink cf3BodyMatchValueAttr Statement + HiLink cf3BodyServiceMethodAttr Statement + HiLink cf3BodyEnvInterfaceAttr Statement + HiLink cf3BodyServerControlAttr Statement + HiLink cf3BodyAgentControlAttr Statement + HiLink cf3BodyExecutorControlAttr Statement + HiLink cf3BodyEditDefsAttr Statement + HiLink cf3BodyInsertSelectAttr Statement + HiLink cf3BodyDeleteSelectAttr Statement + HiLink cf3BodyMonitorControlAttr Statement + HiLink cf3BodyPrintfileAttr Statement + + delcommand HiLink +endif +let b:current_syntax = "cf3" + +" }}} + +" Folding {{{ + +function! CF3Folds() + let line = getline(v:lnum) + + " Don't include blank lines in previous fold {{{ + if line =~? '\v^\s*$' + return '-1' + endif + " }}} + + " Don't include comments in the previous fold {{{ + if line =~? '\v^\s*#.*$' + return '-1' + endif + " }}} + + " Fold bodies/bundles {{{ + let body_types = [ + \"^bundle", + \"^body" + \ ] + for type in body_types + if line =~ type + return ">1" + endif + endfor + " }}} + + " Fold promises {{{ + let promise_types = [ + \"meta:", + \"vars:", + \"defaults:", + \"classes:", + \"users:", + \"files:", + \"packages:", + \"guest_environments:", + \"methods:", + \"processes:", + \"services:", + \"commands:", + \"storage:", + \"databases:", + \"access:", + \"roles:", + \"measurements:", + \"reports:", + \ ] + for promise_type in promise_types + if line =~ promise_type + return ">2" + endif + endfor + " }}} + + " TODO: + " - fold lists + " - include trailing }'s in fdl 1 + + " If nothing matches, keep the previous foldlevel + return '=' + +endfunction + +setlocal foldmethod=expr +setlocal foldexpr=CF3Folds() + +" }}} + +" CREDITS +" Neil Watson +" Aleksey Tsalolikhin +" John Coleman of Yale U +" Matt Lesko +" Ivan Pesin +" Zach Himsel +" +" vim_cf3 files (https://github.com/neilhwatson/vim_cf3) +" Copyright (C) 2011 Neil H. Watson +" +" This program is free software: you can redistribute it and/or modify it under +" the terms of the GNU General Public License as published by the Free Software +" Foundation, either version 3 of the License, or (at your option) any later +" version. +" +" This program is distributed in the hope that it will be useful, but WITHOUT ANY +" WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A +" PARTICULAR PURPOSE. See the GNU General Public License for more details. +" +" You should have received a copy of the GNU General Public License along with +" this program. If not, see .