Bash සිට zsh වෙත ගමන් කිරීම [වසා ඇත]


146

මම බොහෝ විට zsh ට ප්‍රශංසා කරන පෝස්ට් හමු වන බැවින් මම bash සිට zsh වෙත ගමන් කිරීම ගැන සලකා බලමි. මම පළපුරුදු විධාන රේඛා පරිශීලකයෙක් වන අතර, මූලික කරුණු බොහෝ දුරට එක හා සමාන යැයි මම සිතමි, එබැවින් මම චලනය වීමේ ප්‍රතිලාභ ලබා ගැනීම සඳහා උපදෙස් සොයමි.

කරුණාකර පිළිතුරකට එක් උපදෙස් ටිකක් දෙන්න. මම නැවත නැවත පැමිණ මගේ ෂෙල් භාවිතයට අමතර තොරතුරු ප්‍රමාණයක් එකවර ඉගෙන ගැනීමට උත්සාහ කරනවාට වඩා ස්ථාවර වේගයකින් ඒකාබද්ධ කළ හැකි කුඩා ප්‍රමාණයේ කුට්ටි සොයමි.


8
උබුන්ටුගේ විධානය සොයාගත නොහැකි zsh සමඟ ඒකාබද්ධ කළ හැකිදැයි දැන ගැනීමට මම කැමතියි. මේ නිසා (සහ තවත් බොහෝ කරදර) මම නැවත බාෂ් වෙත මාරු වීමි.
මාරියස් ගෙඩ්මිනාස්


තවත් සිත්ගන්නා සබැඳි දෙකක්: "ZSH FAQ" zsh.sourceforge.net/FAQ & "ZSH ඔබේ මිතුරා" mikegrouchy.com/blog/zsh-is-your-friend.html
Shadok

3
ArMariusGedminas: ( මෙතැන් සිට ) zsh මෙයට සහය දක්වයි, නමුත් ඔබ එය අතින් සක්‍රීය කළ යුතුය. source /etc/zsh_command_not_foundඔබේ එකතු කරන්න .zshrc.
naught101

Answers:


96

ඔබ පවසන පරිදි, zshබොහෝ ආකාරවලින් සමාන වේ bash. එය ඔබට සොයාගත නොහැකි විශේෂාංග කිහිපයක් ඇති bashඅතර එය ප්‍රබල ආකාරයකින් දීර් can කළ හැකිය. යම් ආකාරයක විප්ලවයක් ලෙස සිතීම නොව ඔබේ දෛනික වැඩ කටයුතුවලදී ඔබට උපකාර වන පරිණාමීය පියවර මාලාවක් ලෙස සිතන්න. මෙන්න මගේ ඉඟි කිහිපයක් .zshrc. ඔබ තනි උපදෙස් වලට කැමති බව ඔබ පැවසුවද, මෙම ලිපිය දිගු ලැයිස්තුවකි. තවමත් ලකුණු එකින් එක ඉදිරියට යාම හොඳ අදහසකි. ඔබේ සිත් ඇදගන්නා සුළු බිටු එකතු කර ~/.zshrcනැවත පූරණය කරන්න source ~/.zshrc. අවසාන ඉඟිය: zshපෙරනිමි ("ඉමාක්ස්") යතුරුපුවරු කෙටිමං වල යතුරු පහර ඉගෙන ගන්න : ^A ^E ^W Alt-F Alt-B Alt-P ^L ^R. ඔබට Altවෙනම යතුරු එබීම් දෙකකින් ප්‍රතිස්ථාපනය කළ හැකිය : Alt-Pසමාන වේ ESC P.


මෙය ඔබට වඩාත් පුළුල් ටැබ් සම්පූර්ණ කිරීමක් ලබා දෙයි.

autoload -U compinit
compinit

ටැබ් දෙකේම කෙළවර.

setopt completeinword

ටැබ් සම්පුර්ණ කිරීම සිද්ධි සංවේදී නොවිය යුතුය.

zstyle ':completion:*' matcher-list 'm:{a-zA-Z}={A-Za-z}'

කිල්ලල් සඳහා වඩා හොඳ නිම කිරීම.

zstyle ':completion:*:killall:*' command 'ps -u $USER -o cmd'

"වචනය" යන්නෙහි අර්ථ දැක්වීම වෙනස් කරයි, උදා: ^ W සමඟ.

autoload select-word-style
select-word-style shell

Ls සඳහා වර්ණ.

if [[ -x "`whence -p dircolors`" ]]; then
  eval `dircolors`
  alias ls='ls -F --color=auto'
else
  alias ls='ls -F'
fi

Ls සඳහා කෙටිමං.

alias ll='ls -l'
alias la='ls -a'

සියලුම විවෘත කවච සඳහා එක් ඉතිහාසයක්; ඇතුළත් කිරීම් 10,000 ක් ගබඩා කරන්න. මෙය ඔබ අවසන් වරට භාවිතා කළ විධාන සොයා ගැනීමට ප්‍රයෝජනවත් මතක ආධාරකයක් බවට පත් කරයි ./configure. Alt-P (මේ ආකාරයෙන් ආරම්භ වන විධානය සොයා ගන්න) සහ ^ R (ඉතිහාසයේ සෙවීම) ලිබරල් ලෙස භාවිතා කරන්න.

HISTFILE=~/.zhistory
HISTSIZE=SAVEHIST=10000
setopt sharehistory
setopt extendedhistory

Ls ** / *. Txt (සියලු පෙළ ලිපිගොනු සොයා ගන්න) වැනි සියලු ආකාරයේ දීර් glo ග්ලෝබින් කිරීම සක්‍රීය කරයි, ls -d *(D)("." සමඟ ආරම්භ වන ගොනු ඇතුළුව සියලුම ගොනු පෙන්වන්න). වැඩි විස්තර දැනගැනීම සඳහා man zshexpn"FILENAME GENERATION" කොටස වෙත යන්න .

# superglobs
setopt extendedglob
unsetopt caseglob

ඔබේ ඉතිහාසයේ විධාන ක්‍රියාත්මක නොකර මතක තබා ගැනීමට මෙය ප්‍රයෝජනවත් වේ.

setopt interactivecomments # pound sign in interactive prompt

"Cd .." වෙනුවට ".." ටයිප් කරන්න, "cd / usr / include" වෙනුවට "/ usr / include" ටයිප් කරන්න.

setopt auto_cd

නියම විමසුමක්.

PS1='[%T] %n@%m:%~# '

තත්පර 10 කට වඩා වැඩි කාලයක් ගතවන විධාන සඳහා CPU භාවිත සංඛ්‍යාලේඛන පෙන්වන්න

REPORTTIME=10

සමහර විධාන ඔබ උබුන්ටු වල බහුලව භාවිතා කරයි.

alias 'a=sudo aptitude'
alias 'ai=sudo aptitude install'
alias 'ar=sudo aptitude remove'
alias 'au=sudo aptitude update'
alias 'ag=sudo aptitude safe-upgrade'
alias 'as=apt-cache search'
alias 'aw=apt-cache show'

පැකේජ ඒවායේ ප්‍රමාණය අනුව වර්ග කර ඇත - ඔබේ තැටියේ ඉඩ ප්‍රමාණය ගන්නේ කුමන පැකේජද යන්න තීරණය කිරීමේදී ප්‍රයෝජනවත් වේ.

function apt-list-packages {
  dpkg-query -W --showformat='${Installed-Size} ${Package} ${Status}\n' | grep -v deinstall | sort -n | awk '{print $1" "$2}'
}

7
ප්‍රයෝජනවත් වීමට +1. -1 රහසිගත ඊමාක්ස් වෙනුවෙන් පෙනී සිටීම!
ට්‍රිප්ටිච්

3
ඔබට [ github.com/robbyrussell/oh-my-zsh ]( oh-my-zsh) කැමති විය හැකි අතර එය zsh සඳහා ප්ලගීන විශාල ප්‍රමාණයක් එක් කරයි.
රෙඩ්පික්සල්

14

මම බාෂ් සිට ඉසෙඩ් ෂෙල් දක්වා පොත නිර්දේශ කරමි . ඔබේ කවචය මාරු කිරීම සඳහා ඔබට අවශ්‍ය සියලුම උපදෙස් එහි ඇත. එය ෂෙල් වෙඩි දෙකේම වෙනස්කම් පැහැදිලි කරන අතර නව ශේෂර් සඳහා පහසු කරයි.


මෙම පොත bash සහ zsh භාවිතා කරන්නන්ට එකසේ විශිෂ්ටයි. සෑම පරිච්ඡේදයක්ම "බාෂ් සහ zsh යන දෙකින්ම මේ සියල්ල කළ හැකිය" යන්නෙන් ආරම්භ වී තවත් පිටු 30 ක් වෙත යොමු වන අතර "මෙන්න zsh පමණක් දේවල්"
රික්

8

මෙන්න මගේ .zshrc සහ එය වඩාත්ම වැදගත් දෙයයි! zsh ඔබට භාවිතා කළ හැකි විකල්ප රාශියක් ඇත, එබැවින් ජාලය වටා ඇති සියලුම උදාහරණ දෙස බලන්න හෝ Zsh මුල් පිටුවේ ඇති ලියකියවිලි කියවන්න .

මගේ .zshrc විධාන රේඛාවේ දකුණු පැත්තේ කාලරාමුව හැර වෙනත් සිසිල් දේවල් අඩංගු නොවේ.

Btw, මෙහි උදාහරණ කිහිපයක් ඇති සෑම තැනකම ටැබ් සම්පූර්ණ කිරීමට උත්සාහ කිරීමට මතක තබා ගන්න:

mplayer -a[tab]

මේ වගේ දෙයක් පෙන්වයි:

mplayer -a
 -ac                 -- force usage of a specific audio codec
 -af                 -- activate audio filters
 -afm                -- force usage of a specific audio codec family
 -alang              -- select the DVD audio language
 -ao                 -- specify audio driver
 -aop                -- specify audio output filter

ඔබ මුරපද රහිත ssh-key හෝ ssh-agent භාවිතා කරන්නේ නම් දුරස්ථ ලිපිගොනු සම්පුර්ණ කිරීම සඳහා එය ප්‍රයෝජනවත් වේ:

scp apollo:/home/user/[tab]
Desktop/ Documents/ Downloads/ Music/ Pictures/ Public/ Templates/ Videos/

ලැයිස්තුව ලබා ගැනීමෙන් පසු ඔබට විවිධ හැකියාවන් හරහා චක්‍රයට ටැබ් එක ඔබන්න.

නමුත් අවවාද කරන්න, මෙම කවචය ඔබව කම්මැලි කරවන අතර සම්මත කවචයක් මෝඩ හා කරදරකාරී යැයි ඔබට හැඟෙනු ඇත!


5

විශේෂයෙන් ප්‍රයෝජනවත් විස්තාරණ ග්ලෝබ් කිහිපයක්:

  1. rmdir *(/^F) - වත්මන් නාමාවලිය යටතේ ඇති හිස් නොවන නාමාවලි සියල්ල මකන්න

  2. grep traceback /srv/log/**/*(.m-2) - පසුගිය දින දෙක තුළ වෙනස් කරන ලද ලිපිගොනු වල මෙම රීජෙක්ස් සොයා බලන්න

  3. chmod g+w **/*(U^I) - මට අයිති ඕනෑම ලිපිගොනු සාදන්න, කණ්ඩායම් ලිවිය නොහැකි ඒවා කණ්ඩායම් ලිවිය හැකි ය

ඔව්, ඇත්ත වශයෙන්ම ඔබට මෙය ලිවිය හැකි findනමුත් මෙය ඉරීම පහසුය. එහි අඩුපාඩු දෙකක් ඇත, ඒවා සියල්ලම විධාන රේඛාවට විස්තාරණය කිරීම සමඟ කළ යුතුය: එය ගොනු දහස් ගණනකට ගැලපෙන්නේ නම් විධාන රේඛාව දිගු වන අතර මෙය අසාර්ථක වනු ඇත, දෙවනුව සියලුම ලිපිගොනු හමු වේ ගොනුව ක්‍රියාත්මක වීමට පෙර.

( setopt extendedglobඑය දැනටමත් ක්‍රියාත්මක නොවේ නම් ඔබට අවශ්‍ය වනු ඇත)


4

මම බාෂ් ගැන එතරම් දෙයක් නොදනිමි, එබැවින් මට සංසන්දනය කළ නොහැක. මගේ zsh වින්‍යාස ගොනුවේ ස්නිපෙට් කිහිපයක්.

සමහර වින්‍යාසය

HISTFILE=~/.zsh_history
HISTSIZE=1000
SAVEHIST=1000
REPORTTIME=10 # print elapsed time when more than 10 seconds
setopt NO_HUP
setopt NO_LIST_BEEP
setopt LOCAL_OPTIONS # allow functions to have local options
setopt LOCAL_TRAPS # allow functions to have local traps
setopt HIST_VERIFY
setopt SHARE_HISTORY # share history between sessions ???
setopt EXTENDED_HISTORY # add timestamps to history
setopt PROMPT_SUBST
setopt CORRECT
setopt COMPLETE_IN_WORD
setopt IGNORE_EOF

setopt APPEND_HISTORY # adds history
setopt INC_APPEND_HISTORY SHARE_HISTORY  # adds history incrementally and share it across sessions
setopt HIST_IGNORE_ALL_DUPS  # don't record dupes in history
setopt HIST_REDUCE_BLANKS
# Leave some chars out of the out of WORDCHARS so ^W acts more nicely 
WORDCHARS='*?_-[]~\!#$%^(){}<>|`@#$%^*()+:?'

විමසුමට ඇතුල් වන්න

if [[ -n $SSH_CONNECTION ]]; then
  export PS1='%m:%3~$(git_info_for_prompt)%# '
else
  export PS1='%3~$(git_info_for_prompt)%# '
fi

සමහර හොට්කි, පේළියේ ආරම්භයේ දී යම් පෙළක් ඇතුළු කරන්න.

insert_sudo     () { zle beginning-of-line; zle -U "sudo "         }
insert_apt      () { zle beginning-of-line; zle -U "sudo apt-get " }
insert_gem      () { zle beginning-of-line; zle -U "sudo gem "     }
insert_install  () { zle -U "install "     }

zle -N insert-sudo      insert_sudo
zle -N insert-apt       insert_apt
zle -N insert-gem       insert_gem
zle -N insert-install   insert_install

bindkey "^B" insert-gem
bindkey "^N" insert-install
bindkey "^k" insert-sudo
bindkey "^a" insert-apt

ශ්‍රිත, මම then / .zsh / ශ්‍රිත තුළ ගබඩා කරමි

Git_info_for_prompt

local g="$(git rev-parse --git-dir 2>/dev/null)"
if [ -n "$g" ]; then
  local r
  local b
  if [ -d "$g/../.dotest" ]
  then
    if test -f "$g/../.dotest/rebasing"
    then
      r="|REBASE"
    elif test -f "$g/../.dotest/applying"
    then
      r="|AM"
    else
      r="|AM/REBASE"
    fi
    b="$(git symbolic-ref HEAD 2>/dev/null)"
  elif [ -f "$g/.dotest-merge/interactive" ]
  then
    r="|REBASE-i"
    b="$(cat "$g/.dotest-merge/head-name")"
  elif [ -d "$g/.dotest-merge" ]
  then
    r="|REBASE-m"
    b="$(cat "$g/.dotest-merge/head-name")"
  elif [ -f "$g/MERGE_HEAD" ]
  then
    r="|MERGING"
    b="$(git symbolic-ref HEAD 2>/dev/null)"
  else
    if [ -f "$g/BISECT_LOG" ]
    then
      r="|BISECTING"
    fi
    if ! b="$(git symbolic-ref HEAD 2>/dev/null)"
    then
      if ! b="tag: $(git describe --exact-match HEAD 2>/dev/null)"
      then
        b="$(cut -c1-7 "$g/HEAD")..."
      fi
    fi
  fi

  if [ -n "$1" ]; then
    printf "$1" "${b##refs/heads/}$r"
  else
    printf "[%s]" "${b##refs/heads/}$r"
  fi
fi

සමහර ගිතුබ් විකල්ප

#compdef github

_github() {
  if (( CURRENT > 2 )); then
    # shift words so _arguments doesn't have to be concerned with second command
    (( CURRENT-- ))
    shift words
    # use _call_function here in case it doesn't exist
    _call_function 1 _github_${words[1]}
  else
    _values "github command" \
     "fetch[Fetch from a remote to a local branch.]" \
     "ignore[Ignore a SHA (from 'github network commits')]" \
     "fetch_all[Fetch all refs from a user]" \
     "info[Info about this project.]" \
     "browse[Open this repo in a web browser.]" \
     "home[Open this repo's master branch in a web browser.]" \
     "clone[Clone a repo.]" \
     "pull-request[Generate the text for a pull request.]" \
     "network[Project network tools.]" \
     "pull[Pull from a remote.]" \
     "track[Track another user's repository.]"
  fi
}

_github_pull() {
  _arguments \
    "--merge[Automatically merge remote's changes into your master.]"
}
_github_clone() {
  _arguments \
    "--ssh[Clone using the git@github.com style url.]"
}

_github_track() {
  _arguments \
    "--private[Use git@github.com: instead of git://github.com/.]" \
    "--ssh[Equivalent to --private.]"
}

_github_network() {
  if (( CURRENT > 2 )); then
    # shift words so _arguments doesn't have to be concerned with second command
    (( CURRENT-- ))
    shift words
    # use _call_function here in case it doesn't exist
    _call_function 1 _github_network_${words[1]}
  else
    _values "github network command" \
     "web[Open network in a web browser.]" \
     "list[List networked repositories.]" \
     "fetch[Fetched commits for a given networked repository.]" \
     "commits[List networked commits not pulled into this repo.]"
  fi
}

_github_network_commits() {
  _arguments \
    "--project[Filter commits on a certain project.]" \
    "--author[Filter commits on a email address of author.]" \
    "--common[Show common branch point.]" \
    "--nocache[Do not use the cached network data.]" \
    "--sort[How to sort : date(*), branch, author.]" \
    "--thisbranch[Look at branches that match the current one]" \
    "--applies[Filter commits to patches that apply cleanly.]" \
    "--limit[Only look through the first X heads - useful for really large projects]" \
    "--before[Only show commits before a certain date.]" \
    "--after[Only show commits after a certain date.]" \
    "--shas[Only show shas.]" \
    "--cache[Use the network data even if it's expired.]" \
    "--noapply[Filter commits to patches that do not apply cleanly.]"
}

3

මම එකම ගමනක සිටිමි :)

මෙතෙක් මා සොයාගෙන ඇත්තේ කාරණය වන්නේ හොඳ වින්‍යාස ගොනුවක් (.zshrc) තිබීමයි.

මෙය උදාහරණයක් ලෙස ගන්න http://matt.blissett.me.uk/linux/zsh/zshrc , අදහස් දෙස බලා ඔබේ මාර්ගය හැක් කරන්න. Stackoverflow සහ severphault සහ සෙවීමට හොඳ ස්ථාන.

මට තවම http://dotfiles.org/.zshrc වෙතට කිමිදීමට නොහැකි වී ඇත, නමුත් මට ලිහිල් කිරීමට එතරම් කාලයක් නොමැත :)


3

Zsh හි විස්තාරිත ග්ලෝබින් සහ පුනරාවර්තන ග්ලෝබ් ගැන ඉගෙන ගන්න.

Zstyle ගැන ටිකක් ඉගෙන ගන්න සහ විවිධ දේවල් (විශේෂයෙන් සම්පුර්ණ කිරීම) zstyle භාවිතයෙන් ඒවායේ වින්‍යාසය සුසර කිරීමට ඔබට ඉඩ දෙන්නේ කෙසේද.

සහායක අරා සොයා බලන්න. සම්මත අරා (වඩා හොඳ සඳහා, බාෂ් වෙතින් වෙනස්කම් වලින් පරිස්සම් වන්න!)

ඔබ නිත්‍ය ප්‍රකාශන භාවිතා කරන්නේ නම්, සොයා බලන්න =~(කුමන බෑෂ් ද තිබේ) සහ සලකා බලන්න:setopt rematch_pcre

Zsh හි මැජික් ස්වල්පයකට වඩා රඳා පවතින ස්ක්‍රිප්ට් ලිවීමෙන් වළකින්න, මන්ද එය භාවිතා කිරීම අපූරු වුවත්, zsh ලිවීමට පමණක් නැඹුරු විය හැකිය. ඔබ වැඩිපුර භාවිතා කරන්නේ නම්, පයිතන් වැනි භාෂාවකට මාරු වන්නේ කවදාදැයි සිතා බලන්න.

Zsh ආකර්ෂණීයයි. එය අඳුරු පැත්තයි. සාදරයෙන් පිළිගනිමු.


2

විශාල ප්‍රතිලාභයක් - බොහෝ විධාන සඳහා පෙර ඇසුරුම් කරන ලද සම්පූර්ණ කිරීමේ ස්ක්‍රිප්ට් සමඟ විශිෂ්ට ටැබ් සම්පූර්ණ කිරීම. මෙහි ප්‍රතිදානය පෙන්වන උදාහරණයක් මෙන්න apt-get<TAB>:

apt-get
action
autoclean        build-dep        clean            dselect-upgrade  install          remove           update           
autoremove       check            dist-upgrade     help             purge            source           upgrade          

1

මම කතා කූපයක් ලබා දී කිහිප දෙනෙකු zsh බවට පරිවර්තනය කර ඇත්තෙමි. මගේ (වාසි මොනවාද) සටහන් වල ගිතබ් රිපෝ එකක් සමඟ ආරම්භකයක් සහ මගේම zsh වින්‍යාසයේ පිටපතක් ගිතූබ් හි තබා ඇත.

http://github.com/mitechie/zshrc


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.