Add completion for ack2

This commit is contained in:
liuxiang 2014-12-30 13:15:59 +08:00
parent 175b4a8073
commit ecbc879dfa

View File

@ -0,0 +1,102 @@
#compdef ack ack2 ack-grep
function _ack2_completion() {
declare -a ack_types
declare -a arguments
local type
arguments=( \
"--ackrc""[specify an alternative ackrc]" \
{--after-context,-A}"[print NUM lines of trailing context after matching lines]" \
"--bar""[check with the admiral for traps]" \
{--before-context,-B}"[print NUM lines of leading context before matching lines]" \
"--break""[print a break between results for different files]" \
"--cathy""[chocolate, chocolate, chocolate!]" \
{--color,--colour}"[highlight matching text]" \
"--color-filename""[set color for filenames]" \
"--color-lineno""[set color for line numbers]" \
"--color-match""[set color for matches]" \
"--column""[show column number of first match]" \
{--context,-C}"[print NUM lines of context around matching lines]" \
{--count,-c}"[print a count of matching lines for each input file]" \
"--create-ackrc""[dumps default ack options to standard output]" \
"--dump""[writes the list of loaded options and where they came from]" \
"--env" \
"--files-from""[specifies the list of files to search within FILE]" \
{--files-with-matches,-l}"[only print filenames of matching files]" \
{--files-without-matches,-L}"[only print filenames of non-matching files]" \
"--filter""[force ack to behave as if it were receiving input via a pipe]" \
"--flush""[flushes output immediately]" \
"--follow""[follow symlinks]" \
"--group""[group matches by filename]" \
"--heading""[print a filename heading above each file's result]" \
{--help,-\?}"[displays help]" \
"--help-types""[print all known types]" \
"--ignore-ack-defaults""[ignore default definitions provided with ack]" \
{--ignore-case,-i}"[ignore case in matches]" \
{--ignore-directory,--ignore-dir}"[ignore directories (at any level) named DIRNAME]" \
"--ignore-file""[ignore files matching FILTERTYPE:FILTERARGS]" \
{--invert-match,-v}"[select non-matching lines]" \
"--lines""[print only line NUM of each file]" \
{--literal,-Q}"[quote all metacharacters in PATTERN]" \
"--man""[displays the ack man page]" \
"--match""[specify PATTERN explicitly]" \
{--max-count,-m}"[stop reading after NUM matches]" \
{--no-filename,-h}"[don't print filenames on output]" \
{--no-recurse,-n} \
"--nobreak" \
"--nocolor" \
"--nocolour" \
"--nocolumn" \
"--noenv""[don't consider ackrc files/environment variables for configuration]" \
"--nofilter" \
"--nofollow" \
"--nogroup" \
"--noheading" \
"--noignore-dir" \
"--noignore-directory" \
"--nopager" \
"--nosmart-case" \
"--output""[output the evaluation of EXPR for each line]" \
"--pager""[direct ack's output through PAGER]" \
"--passthru""[print all lines, whether or not they match the expression, highlighting matches]" \
"--print0""[seperate output lines with NUL characters]" \
{--recurse,-r,-R}"[recurse into subdirectories]" \
"--show-types""[outputs the filetypes that ack associates with each file]" \
"--smart-case""[ignores case in search strings if PATTERN contains no uppercase characters]" \
"--sort-files""[sorts found files lexicographically]" \
"--thpppt""[display the Bill The Cat logo.]" \
"--type-add""[add a type definition]" \
"--type-del""[removes a type definition]" \
"--type-set""[add a type definition]" \
"--version""[displays version and copyright information]" \
{--with-filename,-H}"[print the filename for each match]" \
{--word-regexp,-w}"[force PATTERN to match only whole words]" \
"-1""[stops after reporting first match]" \
"-f""[only print files that would be searched]" \
"-g""[only print files whose names match PATTERN]" \
"-o""[only print the part of each matching line that matches PATTERN]" \
"-s""[suppress error messages about nonexistent or unreadable files]" \
"-x""[search files specified on standard input]" \
)
while read LINE; do
case $LINE in
--*)
type="${LINE%% *}"
type=${type/--\[no\]/}
arguments[$(( ${#arguments[@]} + 1 ))]="--${type}[restrict to files of type $type]"
arguments[$(( ${#arguments[@]} + 1 ))]="--no${type}[restrict to files other than type $type]"
ack_types[$(( ${#ack_types[@]} + 1 ))]="$type"
;;
esac
done < <(ack --help-types)
arguments[$(( ${#arguments[@]} + 1 ))]="--type=[restrict to files of given type]:filetype:(${ack_types[@]})"
arguments[$(( ${#arguments[@]} + 1 ))]="--notype=[restrict to files other than given type]:notfiletype:(${ack_types[@]})"
arguments[$(( ${#arguments[@]} + 1 ))]="*:files:_files"
_arguments -S $arguments
}
compdef _ack2_completion ack