インストール - Zsh
ナビゲーションに移動
検索に移動
概要
Zshはシェルの一種で、Linux等の標準シェルであるbashよりも便利な機能を持ったシェルである。
Linuxにてターミナルでコマンドを実行することが多々あるが、zshに切り替えることで、作業効率を上げることができる。
ここでは、Zshの最新版をインストールする方法を記載する。
なお、CentOSのパッケージ管理システムでは、最新のZshをインストール出来ないため、yumは使用しない。
最新のZshはこちらのWebサイトで確認できる。
Zshのインストール
CentOS
まず、CentOSでは、Zshのインストールするにはncurses-develが必要となるので、以下のコマンドを実行してインストールする。
sudo yum install ncurses-devel
次に、Zshの公式WebサイトまたはGitリポジトリから、Zshのソースコードをダウンロードする。
wget https://sourceforge.net/projects/zsh/files/zsh/<バージョン名>/zsh-<バージョン名>.tar.xz/download -O zsh-<バージョン名>.tar.xz tar xvf zsh-<バージョン名>.tar.xz -C zsh-src cd zsh-src または git clone --depth 1 git://git.code.sf.net/p/zsh/code zsh-src cd zsh-src
続いて、Zshをインストールする。(ここでは、ホームディレクトリにインストールしている)
--enable-multibyteオプションは、マルチバイトを有効にするオプションである。
./configure --enable-multibyte --prefix=$HOME/zsh/zsh-<バージョン名> make make install
SUSE
CentOSと同様である。
Zshを利用可能にする
Zshを利用可能なシェル一覧に追加する。
ここに追加することで、chshコマンドでシェルの変更が可能となる。
sudo echo /<zshのインストールディレクトリ>/bin/zsh >> sudo /etc/shells
次に、ユーザのシェルを変更する。(コマンドを実行するとパスワードの入力が必要となる)
chsh -s /<zshのインストールディレクトリ>/bin/zsh
再度ログインするか再起動を行う。
すると、以下の文言が表示される。これは、Zshに設定ファイルが存在しないために表示される。
ここでは、 0を入力して空の設定ファイルを作成する。
This is the Z Shell configuration function for new users, zsh-newuser-install. You are seeing this message because you have no zsh startup files(the files .zshenv, .zprofile, .zshrc, .zlogin in the directory~). This function can help you with a few settings that should make your use of the shell easier. You can: (q) Quit and do nothing. The function will be run again next time. (0) Exit, creating the file ~/.zshrc containing just a comment. That will prevent this function being run again. (1) Continue to the main menu. --- Type one of the keys in parentheses ---
Zshの設定例(/home/ユーザ名/.zshrcファイル)
# Ctrl + Dでログアウトしてしまうことを防ぐ setopt IGNOREEOF # 日本語を使用 # export LANG=ja_JP.UTF-8 # パスを追加したい場合 # export PATH="$HOME/bin:$PATH" # 色を使用 autoload -Uz colors colors # 自動補完を有効にする # コマンドの引数やパス名を途中まで入力して <Tab> を押すといい感じに補完してくれる # 例: `cd path/to/<Tab>`, `ls -<Tab>` autoload -Uz compinit compinit # Emacs ライクな操作を有効にする(文字入力中に Ctrl-F,B でカーソル移動など) # Vi ライクな操作が好みであれば `bindkey -v` とする bindkey -e # 他のターミナルとヒストリーを共有 setopt share_history # ヒストリーに重複を表示しない setopt histignorealldups # 空白から始めたコマンドを無視 setopt hist_ignore_space HISTFILE=~/.zsh_history HISTSIZE=100 SAVEHIST=100 # 入力したコマンドが存在せず、かつディレクトリ名と一致するなら、ディレクトリに cd する # 例: /usr/bin と入力すると /usr/bin ディレクトリに移動 setopt auto_cd # cd した先のディレクトリをディレクトリスタックに追加する # ディレクトリスタックとは今までに行ったディレクトリの履歴のこと # `cd +<Tab>` でディレクトリの履歴が表示され、そこに移動できる setopt auto_pushd # pushdから重複を削除 setopt pushd_ignore_dups # コマンドミスを修正 setopt correct # グローバルエイリアス alias -g L='| less' alias -g H='| head' alias -g G='| grep' alias -g GI='| grep -ri' # エイリアス alias cd='cd -P' alias rm='rm -i' alias cp='cp -i' alias mv='mv -i' alias ls='ls -hlF' alias cat='cat -n' alias less='less -n' alias en='LANG=C LANGUAGE=C LC_ALL=C' alias lgrep='ls -ahlF | grep' alias igrep='sudo zypper search -i --detail' alias repoclean='sudo zypper clean -a' alias nano='nano -lmS' alias skate='kdesu /usr/bin/kate' alias scode='code --user-data-dir=~/Program/VScode_root_project' alias suse='cat /etc/SUSE-brand' alias sshpi='ssh <ユーザ名>@<ホスト名またはIPアドレス> -p <ポート番号> -i <暗号鍵ファイルのフルパス>' alias sshxrea='ssh <ユーザ名>@<ホスト名またはIPアドレス> -p <ポート番号>' # コマンド履歴に残さないコマンド群 # LinuxがホストOSの場合 export HISTIGNORE="fg*:bg*:history*:cd*:ls*:cat*:less*:more*:grep*:clear*:lgrep*:igrep*:suse:which*:man*:startx*" # LinuxがゲストOSの場合 export HISTIGNORE="fg*:bg*:history*:cd*:ls*:cat*:less*:more*:grep*:clear*:lgrep*:igrep*:suse:which*:man*:startx*:mhgfs:uhgfs" # backspace,deleteキーを使えるように stty erase ^H bindkey "^[[3~" delete-char # cdの後にlsを実行 chpwd() { ls -ltr --color=auto } # どこからでも参照できるディレクトリパス cdpath=(~) # 区切り文字の設定 autoload -Uz select-word-style select-word-style default zstyle ':zle:*' word-chars "_-./;@" zstyle ':zle:*' word-style unspecified # Ctrl + sのロック, Ctrl + qのロック解除を無効にする setopt no_flow_control # プロンプトを2行で表示、時刻を表示 PROMPT="%(?.%{${fg[green]}%}.%{${fg[red]}%})%n${reset_color}@${fg[blue]}%m${reset_color}(%*%) %~%# " # または PROMPT="%(?.%{${fg[red]}%}.%{${fg[red]}%})%n${reset_color}@${fg[green]}%m${reset_color}(%*%) command > " # <Tab> でパス名の補完候補を表示した後、続けて<Tab>を押すと候補からパス名を選択できるようになる # 補完後、メニュー選択モードになり左右キーで移動が出来る zstyle ':completion:*:default' menu select=2 # 補完で大文字にもマッチ zstyle ':completion:*' matcher-list 'm:{a-z}={A-Z}' # Ctrl+rでヒストリーのインクリメンタルサーチ、Ctrl+sで逆順 bindkey '^r' history-incremental-pattern-search-backward bindkey '^s' history-incremental-pattern-search-forward # コマンドを途中まで入力後、historyから絞り込み # 例 ls まで打ってCtrl+pでlsコマンドをさかのぼる、Ctrl+bで逆順 autoload -Uz history-search-end zle -N history-beginning-search-backward-end history-search-end zle -N history-beginning-search-forward-end history-search-end bindkey "^p" history-beginning-search-backward-end bindkey "^b" history-beginning-search-forward-end # cdrコマンドを有効 ログアウトしても有効なディレクトリ履歴 # cdr タブでリストを表示 autoload -Uz add-zsh-hook autoload -Uz chpwd_recent_dirs cdr add-zsh-hook chpwd chpwd_recent_dirs # cdrコマンドで履歴にないディレクトリにも移動可能に zstyle ":chpwd:*" recent-dirs-default true # 複数ファイルのmv 例 zmv *.txt *.txt.bk autoload -Uz zmv alias zmv='noglob zmv -W' # 改行のない出力をプロンプトで上書きするのを防ぐ unsetopt promptcr # mkdirとcdを同時実行 function mkcd() { if -d $1 ; then echo "$1 already exists!" cd $1 else mkdir -p $1 && cd $1 fi } # git設定 RPROMPT="%{${fg[blue]}%}[%~]%{${reset_color}%}" autoload -Uz vcs_info setopt prompt_subst zstyle ':vcs_info:git:*' check-for-changes true zstyle ':vcs_info:git:*' stagedstr "%F{yellow}!" zstyle ':vcs_info:git:*' unstagedstr "%F{red}+" zstyle ':vcs_info:*' formats "%F{green}%c%u[%b]%f" zstyle ':vcs_info:*' actionformats '[%b|%a]' precmd () { vcs_info } RPROMPT=$RPROMPT'${vcs_info_msg_0_}'