Kaip gauti baimę nutraukti darbą su slapyvardžiais?

Pavyzdys:

Aš esu su bash v3.2.17 Mac, aš naudoju git įdiegta per Macports su bash_completion parinktį.

Kai git checkout m<tab> . Pavyzdžiui, aš jį užbaigiu prieš master .

Tačiau turiu slapyvardžio git checkout , gco . Kai aš gco m<tab> , gco m<tab> automatinio užbaigimo filialo pavadinimo.

Idealiu atveju norėčiau, kad automatinis užbaigimas tiesiog stebuklingai dirbtų visiems mano slapyvardžiams. Ar tai įmanoma? Priešingu atveju norėčiau ją konfigūruoti rankiniu būdu kiekvienam slapyvardžiui. Taigi, kaip man eiti?

140
05 дек. nustatyti kch 05 dec. 2008-12-05 08:17 '08, 08:17, 2008-12-05 08:17
@ 9 atsakymai

Kaip nurodyta pirmiau pateiktose pastabose,

 complete -o default -o nospace -F _git_checkout gco 

nebeveiks. Tačiau git- __git_complete yra __git_complete funkcija, kuria galima konfigūruoti pseudonimų, tokių kaip:

 __git_complete gco _git_checkout 
134
21 февр. atsakymas pateikiamas chris_sutter 21 vasaris. 2013-02-21 21:25 '13, 21:25, 2013-02-21 21:25

Aš susidūriau su šia problema ir pateikiau šį kodo fragmentą. Tai automatiškai suteiks jums galimybę nutraukti visus slapyvardžius. Vykdykite jį po visų (ar bet kokių) slapyvardžių paskelbimo.

border=0
 # wrap_alias takes three arguments: # $1: The name of the alias # $2: The command used in the alias # $3: The arguments in the alias all in one string # Generate a wrapper completion function (completer) for an alias # based on the command and the given arguments, if there is a # completer for the command, and set the wrapper as the completer for # the alias. function wrap_alias() { [[ "$#" == 3 ]] || return 1 local alias_name="$1" local aliased_command="$2" local alias_arguments="$3" local num_alias_arguments=$(echo "$alias_arguments" | wc -w) # The completion currently being used for the aliased command. local completion=$(complete -p $aliased_command 2> /dev/null) # Only a completer based on a function can be wrapped so look for -F # in the current completion. This check will also catch commands # with no completer for which $completion will be empty. echo $completion | grep -q -- -F || return 0 local namespace=alias_completion:: # Extract the name of the completion function from a string that # looks like: something -F function_name something # First strip the beginning of the string up to the function name by # removing "* -F " from the front. local completion_function=${completion##* -F } # Then strip " *" from the end, leaving only the function name. completion_function=${completion_function%% *} # Try to prevent an infinite loop by not wrapping a function # generated by this function. This can happen when the user runs # this twice for an alias like ls='ls --color=auto' or alias l='ls' # and alias ls='l foo' [[ "${completion_function#$namespace}" != $completion_function ]]  return 0 local wrapper_name="${namespace}${alias_name}" eval " function ${wrapper_name}() { let COMP_CWORD+=$num_alias_arguments args=( \"${alias_arguments}\" ) COMP_WORDS=( $aliased_command \${args[@]} \${COMP_WORDS[@]:1} ) $completion_function } " # To create the new completion we use the old one with two # replacements: # 1) Replace the function with the wrapper. local new_completion=${completion/-F * /-F $wrapper_name } # 2) Replace the command being completed with the alias. new_completion="${new_completion% *} $alias_name" eval "$new_completion" } # For each defined alias, extract the necessary elements and use them # to call wrap_alias. eval "$(alias -p | sed -e 's/alias \([^=][^=]*\)='\''\([^ ][^ ]*\) *\(.*\)'\''/wrap_alias \1 \2 '\''\3'\'' /')" unset wrap_alias 
44
25 нояб. Atsakymą pateikė Hesky Fisher lapkričio 25 d. 2009-11-25 00:52 '09 ne 0:52 2009-11-25 00:52

git-completion.bash yra eilutė:

 complete -o default -o nospace -F _git git 

Žiūrėdami šią eilutę (ir _git funkciją), galite pridėti šią eilutę prie .bash_profile :

 complete -o default -o nospace -F _git_checkout gco 
17
05 дек. Chris Lloyd atsakymas 05 Dec 2008-12-05 08:55 '08 at 8:55 2008-12-05 08:55

Turiu slapyvardį g = 'git', ir kartu su mano git pseudonimais, rašau panašius dalykus

 $ g co <branchname> 

Paprastesnis sprendimas mano ypatingam naudojimui buvo pridėti atskirą eilutę, kad galėčiau baigti.

Tiesiai žemiau šios eilutės:

 __git_complete git _git 

Pridėjau šią eilutę, kad galėčiau tvarkyti vieną slapyvardį „g“:

 __git_complete g _git 
14
22 мая '12 в 21:07 2012-05-22 21:07 atsakymas pateikiamas stebuklingai, gegužės 22 d., 12 val. 21:07 2012-05-22 21:07

Idealiu atveju norėčiau, kad automatinis užbaigimas tiesiog stebuklingai dirbtų visiems mano slapyvardžiams. Ar tai įmanoma?

Taip, tai įmanoma įgyvendinant pilno slapyvardžio projektą.

8
24 дек. Cyker atsakymas . 2016-12-24 10:15 '16 at 10:15 am 2016-12-24 10:15

Šiame forume pateikiamas sprendimas.

Įdėkite šias eilutes į .bashrc arba .bash_profile :

 # Author.: Ole J # Date...: 23.03.2008 # License: Whatever # Wraps a completion function # make-completion-wrapper <actual completion function> <name of new func.> # <command name> <list supplied arguments> # eg. # alias agi='apt-get install' # make-completion-wrapper _apt_get _apt_get_install apt-get install # defines a function called _apt_get_install (that $2) that will complete # the 'agi' alias. (complete -F _apt_get_install agi) # function make-completion-wrapper () { local function_name="$2" local arg_count=$(($#-3)) local comp_function_name="$1" shift 2 local function=" function $function_name { ((COMP_CWORD+=$arg_count)) COMP_WORDS=( "$@" \${COMP_WORDS[@]:1} ) "$comp_function_name" return 0 }" eval "$function" } # and now the commands that are specific to this SO question alias gco='git checkout' # we create a _git_checkout_mine function that will do the completion for "gco" # using the completion function "_git" make-completion-wrapper _git _git_checkout_mine git checkout # we tell bash to actually use _git_checkout_mine to complete "gco" complete -o bashdefault -o default -o nospace -F _git_checkout_mine gco 

Šis sprendimas yra panašus į balsetzerio scenarijų , bet tik tas, kuris man iš tikrųjų veikia. (Balsetzerio scenarijus turėjo problemų su kai kuriais mano slapyvardžiais.)

5
16 янв. atsakymas duotas hcs42 Jan 16 2010-01-16 21:19 '10, 21:19, 2010-01-16 21:19

Taip pat galite pabandyti naudoti „Git“ slapyvardžius. Pavyzdžiui, mano ~/.gitconfig turiu skyrių, kuris atrodo taip:

 [alias] co = checkout 

Taigi galite įvesti git co m<TAB> , o tai turėtų būti išplėsta, kad ji būtų git co master , kuri yra git checkout komanda.

5
05 дек. Atsakymas pateikiamas mipadi 05 d. 2008-12-05 18:39 '08, 18:39, 2008-12-05 18:39

Kita galimybė - naudoti ~/.bash_completion . Jei norite sukurti „ gco slapyvardį „ git checkout gco , tiesiog įdėkite jį čia:

 _xfunc git __git_complete gco _git_checkout 

Tada į ~/.bashrc jums reikia įdėti slapyvardį:

 alias gco='git checkout' 

Dvi eilutės. Tai yra.

Paaiškinimas:

~/bash_completion gauna šaltinį pagrindinio „bash_completion“ scenarijaus failo pabaigoje. „Gentoo“ pagrindinį scenarijų rasta /usr/share/bash-completion/bash_completion .

_xfunc git bit“ rūpinasi, kad _xfunc git git-completion failą, taigi jums nereikia nieko įdėti į ~/.bashrc .

Priimtas atsakymas reikalauja kopijuoti .git-completion.sh ir atsiųsti jį iš savo ~/.bashrc , kurį aš rasiu.


PS: vis dar stengiuosi išsiaiškinti, kaip git-completion viso „ git-completion scenarijaus savo „bash“ aplinkoje. Jei radote kelią, komentuokite ar redaguokite.

2
26 февр. atsakymas pateikiamas kub1x 26 vasaris 2016-02-26 21:52 '16 at 21:52 2016-02-26 21:52

Jums tereikia rasti complete komandą ir pasikartoti eilutę su slapyvardžio vardu.

Turiu alias dm="docker-machine" . Žodžiu dm turėtų būti priskirtas mašinisto slapyvardis.

Taigi, „Mac“ (per užvirinti) užbaigimo failai yra cd `brew --prefix`/etc/bash_completion.d/ .
Mano atveju aš docker-machine failą, vadinamą docker-machine .
Visiškai žemyn:

 complete -F _docker_machine docker-machine 

Taigi, pridėjau kitą eilutę su mano slapyvardžiu:

 complete -F _docker_machine docker-machine complete -F _docker_machine dm 
1
07 нояб. atsakymą pateikė luckydonald 07 nov. 2016-11-07 14:07 '16 at 14:07 2016-11-07 14:07

Kiti klausimai apie „ žymes „ arba Užduoti klausimą