auto-fu.zsh


Ⅰ. 插件描述

#zsh automatic complete-word and list-choices. Originally incr-0.2.zsh by y.fujii

Ⅱ. 基本信息

创建日期:  2010-05-26
使用用户:  2
Github星:  383
插件作者:  Takeshi Banse

Ⅲ. 安装方法

使用Vundle管理器安装

在你的.vimrc下添加:
Plugin 'hchbaw/auto-fu-zsh'
… 然后在Vim中运行以下命令:
:source %
:PluginInstall

对于Vundle版本 < 0.10.2,请用上面的Bundle替换Plugin。

使用NeoBundle管理器安装

在你的.vimrc下添加:
NeoBundle 'hchbaw/auto-fu-zsh'
… 然后在Vim中运行以下命令:
:source %
:NeoBundleInstall

使用VimPlug管理器安装

在你的.vimrc下添加:
Plug 'hchbaw/auto-fu-zsh'
… 然后在Vim中运行以下命令:
:source %
:PlugInstall

使用Pathogen管理器安装

在终端中运行以下命令:
cd ~/.vim/bundle
git clone https://github.com/hchbaw/auto-fu.zsh

Ⅳ. 文档说明

zsh automatic complete-word and list-choices

Originally incr-0.2.zsh
Incremental completion for zsh
by y.fujii <y-fujii at mimosa-pudica.net>

Thank you very much y.fujii!

Adapted by Takeshi Banse <takebi@laafc.net>, public domain
I want to use it with menu selection.

To use this,
1) source this file.
% source auto-fu.zsh
2) establish zle-line-init' containing auto-fu-init' something like below.
% zle-line-init () {auto-fu-init;}; zle -N zle-line-init
3) use the _oldlist completer something like below.
% zstyle ':completion:*' completer _oldlist _complete
(If you have a lot of completer, please insert _oldlist before _complete.)
4) establish zle-keymap-select' containing auto-fu-zle-keymap-select'.
% zle -N zle-keymap-select auto-fu-zle-keymap-select
(This enables the afu-vicmd keymap switching coordinates a bit.)
Optionally you can use the zcompiled file for a little faster loading on
every shell startup, if you zcompile the necessary functions.
*1) zcompile the defined functions. (generates ~/.zsh/auto-fu.zwc)
% A=/path/to/auto-fu.zsh; (zsh -c "source $A ; auto-fu-zcompile $A ~/.zsh")
*2) source the zcompiled file instead of this file and some tweaks.
% source ~/.zsh/auto-fu; auto-fu-install
*3) establish `zle-line-init' and such (same as a few lines above).
Note:
It is approximately *(6~10) faster if zcompiled, according to this result :)
TIMEFMT="%*E %J"
0.041 ( source ./auto-fu.zsh; )
0.004 ( source ~/.zsh/auto-fu; auto-fu-install; )
Here is the auto-fu-zcompile manual.
--- >8 ---
NAME
       auto-fu-zcompile - zcompile auto-fu
SYNOPSIS
       auto-fu-zcompile <auto-fu.zsh file> <directory to output>
              [<restoffiles>...]
DESCRIPTION
       This command dumps out the auto-fu's functions, zle and stuff to
       <directory to output>/auto-fu. This is inspired from `compinit' which
       dumps out the completion system's internal stuff to ~/.zcompdump.
       Then `zrecompile' the <directory to output>/auto-fu.
       As you can see, auto-fu.zsh has some `eval' calls, so it may result
       poor loading performance. I want to avoid that as far as possible, so
       the resulting file (~/.zsh/auto-fu) has fewer `eval's and stripped
       unnecessary things at runtime.
       afu+ and auto-fu widgets and afu+ functions will NOT* be
       stripped by auto-fu-zcompile.
OPTIONS
       <auto-fu.zsh file>
           This file.
       <directory to output>
           Directory to dumped and zcompiled files reside.
       [<restoffile>...]
           Files to be `source'ed right before the dumped file creation.
           auto-fu-zcompile will strip unnecessary stuff, so some utility
           shell functions will not be available at runtime. If you want
           to customize auto-fu stuff using auto-fu.zsh's internal
           functions, you can code it at this point (example below).
EXAMPLES
       .   zcompile auto-fu in ~/.zsh.d:
               % A=/path/to/auto-fu.zsh
               % (zsh -c "source $A ; auto-fu-zcompile $A ~/.zsh.d")
       .   Customize some not-easily-customizable things:
               % A=/path/to/auto-fu.zsh
               % (zsh -c "source $A ; \
                 auto-fu-zcompile $A ~/.zsh.d ~/.zsh/auto-fu-customize.zsh")
           '~/.zsh/auto-fu-customize.zsh' is something like this:
>
             afu+my-kill-line-maybe () {
               if (($#BUFFER > CURSOR));
               then zle kill-line
               else zle kill-whole-line
               fi
             }
             zle -N afu+my-kill-line-maybe
             afu-register-zle-eof \
               afu+orf-ignoreeof-deletechar-list \
               afu-ignore-eof afu+my-kill-line-maybe
             afu-register-zle-eof \
               afu+orf-exit-deletechar-list exit afu+my-kill-line-maybe
<
           Using `afu-register-zle-eof' to customize the <C-d> behaviors.
--- 8< ---

Configuration
The auto-fu features can be configured via zstyle.

:auto-fu:highlight
  input
    A highlight specification used for user input string.
  completion
    A highlight specification used for completion string.
  completion/one
    A highlight specification used for completion string if it is the
    only one candidate.
:auto-fu:var
  postdisplay
    An initial indication string for POSTDISPLAY in auto-fu-init.
  postdisplay/clearp
    If set, POSTDISPLAY will be cleared after the accept-lines.
    'yes' by default.
  enable
    A list of zle widget names the automatic complete-word and
    list-choices to be triggered after its invocation.
    Only with ALL in 'enable', the 'disable' style has any effect.
    ALL by default.
  disable
    A list of zle widget names you do NOT want the complete-word to be
    triggered. Only used if 'enable' contains ALL. For example,
      zstyle ':auto-fu:var' enable all
      zstyle ':auto-fu:var' disable magic-space
    yields; complete-word will not be triggered after pressing the
    space-bar, otherwise automatic thing will be taken into account.
  track-keymap-skip
    A list of keymap names to NOT be treated as a keymap change.
    In other words, these keymaps cannot be used with the standalone main
    keymap. For example "opp". If you use my opp.zsh, please add an 'opp'
    to this zstyle.
  autoable-function/skipwords
  autoable-function/skiplbuffers
  autoable-function/skiplines
    A list of patterns to NOT be treated as auto-stuff appropriate.
    These patterns will be tested against the part of the command line
    buffer as shown on the below figure:
    (*) is used to denote the cursor position.
      # nocorrect aptitude --assume-*yes -d install zsh && echo ready
                           <-------->skipwords
                  <----------------->skiplbuffers
                  <----------------------------------->skplines
    Examples:
    - To disable auto-stuff inside single and also double quotes.
      And less than 3 chars before the cursor.
      zstyle ':auto-fu:var' autoable-function/skipwords \
        "('|$'|")*" "^((???)##)"
    - To disable the rm's first option, and also after the '(cvs|svn) co'.
      zstyle ':auto-fu:var' autoable-function/skiplbuffers \
        'rm -[![:blank:]]#' '(cvs|svn) co *'
    - To disable after the 'aptitude word '.
      zstyle ':auto-fu:var' autoable-function/skiplines \
        '([[:print:]]##[[:space:]]##|(#s)[[:space:]]#)aptitude [[:print:]]# *'
  autoable-function/preds
    A list of functions to be called whether auto-stuff appropriate or not.
    These functions will be called with the arguments (above figure)
      - $1 '--assume-'
      - $2 'aptitude'
      - $3 'aptitude --assume-'
      - $4 'aptitude --assume-yes -d install zsh'
    For example,
    to disable some 'perl -M' thing, we can do by the following zsh codes.
>
      afu-autoable-pm-p () { [[ ! ("$2" == 'perl' && "$1" == -(#i)m*) ]] }
      # retrieve default value into 'preds' to push the above function into.
      local -a preds; afu-autoable-default-functions preds
      preds+=afu-autoable-pm-p
      zstyle ':auto-fu:var' autoable-function/preds $preds
<
    The afu-autoable-dots-p is actually an example of this ability to skip
    uninteresting dots.
  autoablep-function
    A predicate function to determine whether auto-stuff could be
    appropriate. (Default `auto-fu-default-autoable-pred' implements the
    above autoablep-function/* functionality.)
Configuration example

zstyle ':auto-fu:highlight' input bold
zstyle ':auto-fu:highlight' completion fg=black,bold
zstyle ':auto-fu:highlight' completion/one fg=white,bold,underline
zstyle ':auto-fu:var' postdisplay $'
-azfu-'
zstyle ':auto-fu:var' track-keymap-skip opp
#zstyle ':auto-fu:var' disable magic-space

XXX: use with the error correction or _match completer.
If you got the correction errors during auto completing the word, then
plese do not do magic-space or accept-line. Insted please do the
following, undo and then hit <tab> or throw away the buffer altogether.
This applies _match completer with complex patterns, too.
I'm very sorry for this annonying behaviour.
(For example, 'ls --bbb' and 'ls --~^al*' etc.)

XXX: ignoreeof semantics changes for overriding ^D.
You cannot change the ignoreeof option interactively. I'm verry sorry.
To customize the ^D behavior further, it will be done for example above
auto-fu-zcomple manual's EXAMPLE section's code. Please take a look.

TODO: play nice with zsh-syntax-highlighting.
TODO: http://d.hatena.ne.jp/tarao/20100531/1275322620
TODO: pause auto stuff until something happens. ("next magic-space" etc)
TODO: handle RBUFFER.
TODO: signal handling during the recursive edit.
TODO: handle empty or space characters.
TODO: cp x /usr/loc
TODO: region_highlight vs afu-able-p → nil
Do NOT clear the region_highlight if it should.
TODO: ^C-n could be used as the menu-select-key outside of the menuselect.
TODO: *-directories|all-files may not be enough.
TODO: recommend zcompiling.
TODO: undo should reset the auto stuff's state.
TODO: when _matching,
sometimes extra <TAB> key is needed to enter the menu select,
sometimes is not needed. (already be entered menu select state.)

History

v0.0.1.12
fix some options potentially will be reset during the auto-stuff.
fix afu-keymap+widget to $afu_zles work in custom widgets.
Thank you very much for the reports, Christian271!

v0.0.1.11
play nice with banghist.
Thank you very much for the report, yoshikaw!
add autoablep-function machinery.
Thank you very much for the suggestion, tyru and kei_q!

v0.0.1.10
Fix not work auto-thing without extended_glob.
Thank you very much for the report, myuhe!

v0.0.1.9
add auto-fu-activate, auto-fu-deactivate and auto-fu-toggle.

v0.0.1.8.3
in afu+complete-word PAGER=<TAB> ⇒ PAGER=PAGER= bug fix.
Thank you very much for the report, tyru!

v0.0.1.8.2
afu+complete-word bug fixes.

v0.0.1.8.1
README.md

v0.0.1.8
add completion/one and postdisplay/clearp configurations.
add kill-word and yank to afu_zles.

v0.0.1.7
Fix "no such keymap `isearch'" error.
Thank you very much for the report, mooz and Shougo!

v0.0.1.6
Fix parameter not set. Thank you very much for the report, Shougo!
Bug fix.

v0.0.1.5
afu+complete-word bug (directory vs others) fix.

v0.0.1.4
afu+complete-word bug fixes.

v0.0.1.3
Teach ^D and magic-space.

v0.0.1.2
Add configuration option and auto-fu-zcompile for a little faster loading.

v0.0.1.1
Documentation typo fix.

v0.0.1
Initial version.

添加新评论