#compdef vim gvim gex gview nvim rvim rview rgvim rgview evim eview vimdiff gvimdiff mvim (( $+functions[_vim_files] )) || _vim_files () { case $PREFIX in (+*) _files -P './' $* && return 0 ;; ((scp|http(|s)|(|s)ftp):*) _urls ;; (*) _files $* ;; esac case $PREFIX in (+) _message -e 'start at a given line (default: end of file)' ;; (+<1->) _message -e 'line number' ;; esac } local curcontext="$curcontext" state line expl ret=1 typeset -A opt_args local arguments arguments=( '-m[modifications (writing files) not allowed]' '-M[modifications in text not allowed]' '-b[binary mode]' '-l[lisp mode]' '-V-[verbosity level]::verbosity [10]:->verbosity' '-D[debugging mode]' '-n[no swap file (memory only)]' {-r,-L}'[list swap files and exit or recover from a swap file]::swap file:_vim_files -g "*.sw?(-.)"' '( -H -F)-A[start in Arabic mode]' '(-A -F)-H[start in Hebrew mode]' '(-A -H )-F[start in Farsi mode]' '-u[use given vimrc file instead of default .vimrc]:config:->config' "--noplugin[don't load plugin scripts]" '-o-[number of windows to open (default: one for each file)]::window count: ' '-O-[number of windows to vertically split open (default is one for each file)]::window count: ' '-p-[number of tabs to open (default: one for each file)]::tab count: ' '(* -t)-q+[quickfix file]::file:_files' '*--cmd[execute given command before loading any RC files]:command: ' '-c[execute given command after loading the first file]:command: ' '-S[source a session file after loading the first file]::session file:_files' '-s[read normal-mode commands from script file]:script file:_files' '-w[append all typed commands to given file]:output file:_files' '-W[write all typed commands to given file, overwriting existing file]:output file:_files' '--startuptime[write startup timing messages to given file]:log file:_files' '(- *)'{-h,--help}'[print help and exit]' '(- *)--version[print version information and exit]' '(* -q)-t+[edit file where tag is defined]:tag:_complete_tag' '(-t -q)*:file:_vim_files' ) if [[ $service = nvim ]]; then arguments+=( '(-e -E -es -Es -s -d)-e[ex mode, read stdin as ex command]' '(-e -E -es -Es -s -d)-E[ex mode, read stdin as text]' '(-e -E -es -Es -s -d)-es[silent mode, read stdin as ex command]' '(-e -E -es -Es -s -d)-Es[silent mode, read stdin as text]' '-i[use the specified shada file]:shada file:_files' '(- *)-v[print version information and exit]' '(- *)--api-info[print msgpack-encoded api-metadata and exit]' '--headless[do not start user interface]' '--embed[use standard input and output as a msgpack-rpc channel]' '--listen[start RPC server on the specified socket or named pipe]:address' ) else arguments+=( '(-v -E -d -y)-e[ex mode]' '(-v -e -d -y)-E[improved ex mode]' '( -e -E -s -d -y)-v[vi mode]' '(-v -e -E -s -d )-y[easy mode]' '-C[start in compatible mode]' '-N[start in incompatible mode]' '-nb[start as NetBean server]' '-T[set terminal type]:::_terminals' '--not-a-term[skip warning for input/output not being a terminal]' '--ttyfail[exit if input or output is not a terminal]' '-X[do not connect to X server]' '-x[edit encrypted files]' '--remote[edit given files in a vim server if possible]:*:file:_vim_files' '--remote-silent[as --remote but without complaining if not possible]:*:file:_vim_files' '--remote-wait[as --remote but wait for files to have been edited]:*:file:_vim_files' '--remote-wait-silent[as --remote-wait but without complaining if not possible]:*:file:_vim_files' '--remote-send[send given keys to vim server if possible]:keys: ' '--remote-tab[as --remote but open tab page for each file]:*:file:_vim_files' '--remote-tab-silent[as --remote-silent but open tab page for each file]:*:file:_vim_files' '--remote-tab-wait[as --remote-wait but open tab page for each file]:*:file:_vim_files' '--remote-tab-wait-silent[as --remote-wait-silent but open tab page for each file]:*:file:_vim_files' '--remote-expr[evaluate given expression in a vim server and print result]:expression: ' '--literal[do not expand wildcards in arguments (this is useless with ZSH)]' '(- *)--serverlist[list available vim servers and exit]' '--servername[name of vim server to send to or name of server to become]:server name:->server' '--socketid[run GVIM in another window]' '-i[use specified viminfo file]:viminfo file [~/.viminfo]:_files' '--clean[start with defaults in non-compatible mode]' ) fi [[ $service != *g* && $service != nvim ]] && arguments+='-g[start with GUI]' [[ $service != r* ]] && arguments+='-Z[restricted mode]' [[ $service != *diff ]] && arguments+='(-v -e -E -es -Es -s -y)-d[diff mode]' [[ $service != *view ]] && arguments+='-R[readonly mode]' [[ $service = *g* ]] || (( ${words[(I)-g]} )) && arguments+=( '(--nofork -f)'{--nofork,-f}'[do not detach the GUI version from the shell]' '-font:font:_xft_fonts' '-geometry:geometry:_x_geometry' '(-rv -reverse)'{-rv,-reverse}'[use reverse video]' '-display:display:_x_display' '--role[set unique role to identify main window]:role' '--socketid[open vim inside another GTK widget]:xid' '--echo-wid[echo window ID on stdout]' '-U[use given gvimrc file instead of default .gvimrc]:gui config:->configgui' ) _arguments -C -S $arguments && ret=0 if [[ "$state" = server ]]; then local -a servers servers=( ${(f)"$(_call_program servers $words[1] --serverlist 2>/dev/null)"} ) _wanted servers expl server compadd -M 'm:{a-z}={A-Z}' -a servers && ret=0 elif [[ $state = verbosity ]]; then _tags numbers files while _tags; do _requested numbers && _describe -V 'verbosity [10]' "( 0:don\'t' display any messages' 1:'display when viminfo file is read or written' 2:'display sourced files' 5:'display every searched tag-file' 8:'display files that trigger autocommands' 9:'display every triggered autocommand' 12:'display every executed function' 13:'report every thrown, caught, finished, or discarded exception' 14:'display anything pending in a :finally clause' 15:'display every executed ex-command' )" && ret=0 if _requested files expl 'file for verbose output'; then compset -P '[0-9]#' _files "$expl[@]" && ret=0 fi (( ret )) || break done elif [[ "$state" = config* ]]; then _tags special files local names=( "NONE:'skip initialization from files and environment variables'" "NORC:'same as NONE, but load plugins'" ) # gvim only supports -U NONE to skip GUI initialization. [[ $state != configgui || $service != *g* ]] && names+=( "DEFAULTS:'same as NONE, but loads defaults.vim'" ) while _tags; do _requested special && _describe -V 'special' "(${(F)names})" && ret=0 if _requested files expl 'rc file'; then _files "$expl[@]" && ret=0 fi (( ret )) || break done fi return ret