forked from aniani/vim
This is a followup to 816fbcc262
(patch
9.0.1833: [security] runtime file fixes)
It basically disables that external commands are run on loading of the
filetype plugin, **unless** the user has set the `g:plugin_exec = 1`
global variable in their configuration or for a specific filetype the
variable g:<filetype>_exec=1.
There are a few more plugins, that may execute system commands like
debchangelog, gitcommit, sh, racket, zsh, ps1 but those do at least
do not run those commands by default during loading of the filetype plugin
(there the command is mostly run as convenience for auto-completion or
to provide documentation lookup).
closes: #13034
Signed-off-by: Christian Brabandt <cb@256bit.org>
Co-authored-by: Tim Pope <vim@tpope.org>
72 lines
1.8 KiB
VimL
72 lines
1.8 KiB
VimL
" Vim filetype plugin file
|
|
" Language: Zig
|
|
" Upstream: https://github.com/ziglang/zig.vim
|
|
|
|
" Only do this when not done yet for this buffer
|
|
if exists("b:did_ftplugin")
|
|
finish
|
|
endif
|
|
|
|
let b:did_ftplugin = 1
|
|
|
|
let s:cpo_orig = &cpo
|
|
set cpo&vim
|
|
|
|
compiler zig_build
|
|
|
|
" Match Zig builtin fns
|
|
setlocal iskeyword+=@-@
|
|
|
|
" Recommended code style, no tabs and 4-space indentation
|
|
setlocal expandtab
|
|
setlocal tabstop=8
|
|
setlocal softtabstop=4
|
|
setlocal shiftwidth=4
|
|
|
|
setlocal formatoptions-=t formatoptions+=croql
|
|
|
|
setlocal suffixesadd=.zig,.zir
|
|
|
|
if has('comments')
|
|
setlocal comments=:///,://!,://,:\\\\
|
|
setlocal commentstring=//\ %s
|
|
endif
|
|
|
|
if has('find_in_path')
|
|
let &l:includeexpr='substitute(v:fname, "^([^.])$", "\1.zig", "")'
|
|
let &l:include='\v(\@import>|\@cInclude>|^\s*\#\s*include)'
|
|
endif
|
|
|
|
let &l:define='\v(<fn>|<const>|<var>|^\s*\#\s*define)'
|
|
|
|
" Safety check: don't execute zip from current directory
|
|
if !exists('g:zig_std_dir') && exists('*json_decode') &&
|
|
\ executable('zig') && get(g:, 'zig_exec', get(g:, 'plugin_exec', 0))
|
|
\ && (fnamemodify(exepath("zig"), ":p:h") != s:tmp_cwd
|
|
\ || (index(split($PATH,has("win32")? ';' : ':'), s:tmp_cwd) != -1 && s:tmp_cwd != '.'))
|
|
silent let s:env = system('zig env')
|
|
if v:shell_error == 0
|
|
let g:zig_std_dir = json_decode(s:env)['std_dir']
|
|
endif
|
|
unlet! s:env
|
|
endif
|
|
unlet! s:tmp_cwd
|
|
|
|
if exists('g:zig_std_dir')
|
|
let &l:path = &l:path . ',' . g:zig_std_dir
|
|
endif
|
|
|
|
let b:undo_ftplugin =
|
|
\ 'setl isk< et< ts< sts< sw< fo< sua< mp< com< cms< inex< inc< pa<'
|
|
|
|
augroup vim-zig
|
|
autocmd! * <buffer>
|
|
autocmd BufWritePre <buffer> if get(g:, 'zig_fmt_autosave', 1) | call zig#fmt#Format() | endif
|
|
augroup END
|
|
|
|
let b:undo_ftplugin .= '|au! vim-zig * <buffer>'
|
|
|
|
let &cpo = s:cpo_orig
|
|
unlet s:cpo_orig
|
|
" vim: tabstop=8 shiftwidth=4 softtabstop=4 expandtab
|