在Mac OSX上自定义Shell
Posted 21CTO
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在Mac OSX上自定义Shell相关的知识,希望对你有一定的参考价值。
导读:如何自定义你的Mac上的Shell终端,本篇供参考。
在Mac OSX上自定义Shell
如果你是Mac的忠实用户,而且有大量时间使用Shell,你一定会知道在OSX Shell下是非常笨拙的,效率并不怎么高。
那么问题来了,如何使OSX Shell更具生产力?
背景
安装/部署 iTerm2
iTearm2是Mac终端命令行的替代品,是第一版本iTerm的增强二代产品,它给人们带来了多项新功能和优化,可以让开发者更加灵活高效。
首先,我们从iTerm官网上下载iTerm2。
官方网址:https://iterm2.com
iTerm2提供了很多有意义的功能,如拆分窗格、搜索、自动填写
即时重现等。
安装XCode
开始安装Xcode,请在iTearm的命令行下运行。
xcode-select --install
提示窗口后,点击同意协议,开始安装,直到它安装完成为止。
部署自制软件
Homebrew(https://brew.sh/)是Mac系统中最常用的软件包管理器,用它来安装管理应用最合适不过。
下面来安装它。安装Homebrew是一个很简单的过程,只需要在iTerm2下运行如下之命令:
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"
如果出现curl: (7) Failed to connect to raw.githubusercontent.com port 443: Connection refused的信息。
https://github.com/jackzhaoyu/ceshi.git
下载下来的rb文件,你可以随便放,但是你能找到就可以。首先你先执行curl 看是不是有这句提示:
curl: try 'curl --help' or 'curl --manual' for more information
没有问题的话,然后cd到你保存rb文件的那个目录,继续执行
ruby ***********.rb
执行完毕之后,回报如下信息:
然后执行brew,就可以了。
Homebrew安装成功后,就可以对其升级更新。如下:
brew update
brew upgrade
Mac OSX默认状态下安装了Python 2.7,可以用Brew将Python更新到最新版本。接下来,将部署git和vim的最新版本,安装neovim作为vim的替代品。此外,将安装更多有用的软件包,稍后介绍。
brew install python git neovim coreutils inetutils
brew install vim --env-std --override-system-vim
python --version
git --version
对于Python,我们可以使用pip进行进安装,可以添加我们可能需要的任何软件包/模块。
pip3 install pygments
sudo pip install powerline-status
现在,我们新的Shell发光时间到。
添加以下代码行到你的 ~/.bash_profile中,然后在终端中执行~/.bashrc。
[[ -f ~/.bashrc ]] && . ~/.bashrc
test -e "${HOME}/.iterm2_shell_integration.bash" && source "${HOME}/.iterm2_shell_integration.bash"
现在,我们就可以给Shell添加更加丰富多彩和有用的功能了。在~/.bashrc文件中,添加如下代码:
# ~/.bashrc
# If not running interactively, don't do anything
[[ $- != *i* ]] && return
if [ -f /etc/bashrc ]; then
. /etc/bashrc
fi
if [ -f /etc/bash_completion ]; then
. /etc/bash_completion
fi
[ -z "$PS1" ] && return
if [[ ${EUID} == 0 ]] ; then
PS1='[e[01;31m]h[e[01;34m] W $[e[00m] '
else
PROMPT_COMMAND='__git_ps1 "[e[01;32m]u@h[e[01;34m] W[e[00m]" " \$ "'
fi
现在,我们就可以配置其余的bash,如history,手册的别名,为less和cat命令提供更好的颜色输出。
在~/.bashrc文件中添加如下几行:
export EDITOR=vim
export HISTSIZE=100000
export HISTFILESIZE=1000000
HISTCONTROL=ignoreboth:erasedups:ignorespace
shopt -s histappend
PROMPT_COMMAND="history -a; history -c; history -r;$PROMPT_COMMAND"
# aliases
alias la='/usr/local/bin/gls --color -lah --group-directories-first'
alias ls="ls -G";
alias cat="pygmentize -f terminal256 -g -P style=monokai";
alias dmesg="dmesg --color=always | less";
alias sudo="sudo -i";
alias vdir="vdir --color=auto";
alias grep="grep --color=auto";
alias fgrep="fgrep --color=auto";
alias egrep="egrep --color=auto";
alias mv="mv -i";
alias rm="rm -i";
alias cp="cp -i";
alias exit="clear ; exit";
alias ping="ping -c3";
# less colors
export LESSOPEN='|pygmentize -f terminal256 -g -P style=monokai %s'
export LESS='-R'
# man pages in colores
man() {
LESS_TERMCAP_md=
e[01;31m'
LESS_TERMCAP_me=
e[0m'
LESS_TERMCAP_se=
e[0m'
LESS_TERMCAP_so=
e[01;44;33m'
LESS_TERMCAP_ue=
e[0m'
LESS_TERMCAP_us=
e[01;32m'
command man "$@"
}
export LC_ALL=en_US.UTF-8
export LANG=en_US.UTF-8
~/.vimrc的例子:
这样的就可以增强history命令,不必再使用上下箭头在整个历史记录中循环。
接着在主目录里创建一个文件 .inputrc,添加如下条目。
#.inputrc
"e[A": history-search-backward
"e[B": history-search-forward
"e[C": forward-char
"e[D": backward-char
set match-hidden-files off
set page-completions off
set completion-query-items 350
set completion-ignore-case on
set show-all-if-ambiguous on
set bell-style none
TAB: menu-complete
在~/.bashrc中导入~/.inputrc设置:
# import input rc for bash history
export INPUTRC=~/.inputrc
如果你是一个Git用户,经常在shell下运行CLI命令,现在可以直接知道在哪个分支,而不用再输入 git branch。
在命令行下,使用curl下载两个文件到你的主目录中。
curl -O https://raw.githubusercontent.com/git/git/master/contrib/completion/git-completion.bash --output ~/.git-completion.bash
curl https://raw.githubusercontent.com/git/git/master/contrib/completion/git-prompt.sh --output ~/.git-prompt.sh
并且在~/.bashrc中添加以下两行:
# git completion
source ~/.git-completion.bash
# git prompth
source ~/.git-prompt.sh
Master分支
Tmux
另一个有用的工具是TMUX。TMUX是一个终端复用工具,可以让我们在单个窗口中同时使用多个会话,这对于同时运行多个命令行程序很有用。它还可以用于将进程与控制终端分离,让SSH会话保持激活状态,但又不会被看到。
使用如下命令:
brew install tmux
安装后的TMUX
以下是TMUX的配置文件,供各位参考:
# -- general -------------------------------------------------------------------
set -g default-terminal "screen-256color" # colors!
setw -g xterm-keys on
set -s escape-time 10 # faster command sequences
set -sg repeat-time 600 # increase repeat timeout
set -s focus-events on
set -g prefix2 C-a # GNU-Screen compatible prefix
bind C-a send-prefix -2
unbind C-b # Unbind original key activisioin
set -q -g status-utf8 on # expect UTF-8 (tmux < 2.2)
setw -q -g utf8 on
set -g history-limit 406000 # boost history
# reload configuration
bind r source-file ~/.tmux.conf ; display '~/.tmux.conf sourced'
# -- display -------------------------------------------------------------------
set -g base-index 1 # start windows numbering at 1
setw -g pane-base-index 1 # make pane numbering consistent with windows
setw -g automatic-rename on # rename window to reflect current program
set -g renumber-windows on # renumber windows when a window is closed
set -g set-titles on # set terminal title
set -g set-titles-string '#H:#S.#I.#P #W #T'
set -g display-panes-time 800 # slightly longer pane indicators display time
set -g display-time 1000 # slightly longer status messages display time
set -g status-interval 10 # redraw status line every 10 seconds
# clear both screen and history
bind -n C-l send-keys C-l ; run 'sleep 0.1' ; clear-history
# activity
set -g monitor-activity on
set -g visual-activity off
# -- navigation ----------------------------------------------------------------
# create session
bind C-c new-session
# find session
bind C-f command-prompt -p find-session 'switch-client -t %%'
# split current window horizontally
bind - split-window -v
# split current window vertically
bind split-window -h
# pane navigation
bind -r h select-pane -L # move left
bind -r j select-pane -D # move down
bind -r k select-pane -U # move up
bind -r l select-pane -R # move right
bind > swap-pane -D # swap current pane with the next one
bind < swap-pane -U # swap current pane with the previous one
# maximize current pane
bind + run 'cut -c3- ~/.tmux.conf | sh -s _maximize_pane "#{session_name}" #D'
# pane resizing
bind -r H resize-pane -L 2
bind -r J resize-pane -D 2
bind -r K resize-pane -U 2
bind -r L resize-pane -R 2
# window navigation
unbind n
unbind p
bind -r C-h previous-window # select previous window
bind -r C-l next-window # select next window
bind Tab last-window # move to last active window
# Bells
set -g visual-bell on
set -g bell-action any
# Don't lose track of SSH_AGENT etc. from parent environment.
set -g update-environment -r
# Scroll in shell
set -g terminal-overrides 'xterm*:smcup@:rmcup@'
set -wg xterm-keys 1
# Set status bar
set -g status-bg black
set -g status-fg white
set -g status-left-style fg=green
# default statusbar colors
set -g status-fg white
set -g status-bg black
set -g status-style bright
# default window title colors
set-window-option -g window-status-style fg=white
set-window-option -g window-status-style bg=default
set-window-option -g window-status-style dim
# active window title colors
set-window-option -g window-status-current-style fg=white
set-window-option -g window-status-current-style bg=default
set-window-option -g window-status-current-style bright
# Highlight active window
set-window-option -g window-status-current-style bg=red
# Set window notifications
setw -g monitor-activity on
set -g visual-activity on
以上配置文件将tmux的激活键从Ctrl+b更改为Ctrl+a,类似于上述屏幕。
至此,配置好了外观漂亮的bash shell和终端,并学习了如何利用添加选项,这样我们可以转到更好的终端Shell,比如使用外观更现代用户体验更好的FISH shell代替bash。
接下来我们来安装FISH终端,并增加一些主题管理器:
brew install fish
curl -L https://get.oh-my.fish | fish
omf install bobthefish
omf theme bobthefish
omf reload
以上,我们安装了FISH和oh-my-fish并部署了bobthefish作为主题。
为了让FISH看起来更好看,再安装几个字体。
sudo pip install powerline-status
# install powerline fonts
git clone https://github.com/powerline/fonts.git --depth=1
cd fonts/
./install.sh
接下来将FISH Shell设置为默认值,使用chsh命令把bash替换为FISH的路径。
不要忘记为iTerm2修改为新安装的字体,在Preferences../Profile/Text。
以上配置文件将tmux的激活键从Ctrl+b更改为Ctrl+a,类似于上述屏幕。
至此,配置好了外观漂亮的bash shell和终端,并学习了如何利用添加选项,这样我们可以转到更好的终端Shell,比如使用外观更现代用户体验更好的FISH shell代替bash。
接下来我们来安装FISH终端,并增加一些主题管理器:
brew install fish
curl -L https://get.oh-my.fish | fish
omf install bobthefish
omf theme bobthefish
omf reload
以上,我们安装了FISH和oh-my-fish并部署了bobthefish作为主题。
为了让FISH看起来更好看,再安装几个字体。
sudo pip install powerline-status
# install powerline fonts
git clone https://github.com/powerline/fonts.git --depth=1
cd fonts/
./install.sh
接下来将FISH Shell设置为默认值,使用chsh命令把bash替换为FISH的路径。
不要忘记为iTerm2修改为新安装的字体,在Preferences../Profile/Text中,如下图。
还可以通过编辑如下代码为FISH增加其它选项。文件名为~/.config/fish/config.fish
set -g theme_display_git yes
set -g theme_display_git_dirty yes
set -g theme_display_git_untracked yes
set -g theme_display_git_ahead_verbose yes
set -g theme_display_git_dirty_verbose yes
set -g theme_display_git_stashed_verbose yes
set -g theme_display_git_master_branch yes
set -g theme_git_worktree_support no
set -g theme_display_vagrant no
set -g theme_display_docker_machine yes
set -g theme_display_k8s_context yes
set -g theme_display_hg no
set -g theme_display_virtualenv yes
set -g theme_display_ruby no
set -g theme_display_user ssh
set -g theme_display_hostname ssh
set -g theme_display_vi no
set -g theme_display_date no
set -g theme_display_cmd_duration yes
set -g theme_title_display_process yes
set -g theme_title_display_path yes
set -g theme_title_display_user yes
set -g theme_title_use_abbreviated_path no
set -g theme_avoid_ambiguous_glyphs yes
set -g theme_powerline_fonts yes
set -g theme_nerd_fonts no
set -g theme_show_exit_status yes
set -g theme_color_scheme dark
set -g fish_prompt_pwd_dir_length 0
set -g theme_project_dir_length 1
set -x EDITOR vim
set -Ux LC_ALL en_US.UTF-8
set -Ux LANG en_US.UTF-8
想要让tmux以FISH界面启动,可以在~/.tmux.conf的开头添加如下两行:
source /usr/local//lib/python3.7/site-packages/powerline/bindings/tmux/powerline.conf
set-option -g default-shell "/usr/local/bin/fish"
可以在 ~/.config/fish/functions/中添加别名。可以在https://github.com/mudrii/.files/tree/master/HWD_Mac/.config/fish/functions找到更多实例。
使用FISH和tmux,我们的终端应该看起来更好。如下图:
改进的终端视图与部局
还没有完全完成,我们需要让shell主题和VIM编辑器都看起来不错,这样才更完美。
第一步来安装vim-plug(https://github.com/junegunn/vim-plug),它是vim的插件管理器,可以用来安装、卸载vim的相关插件。
curl -fLo〜 / .vim / autoload / plug.vim --create -dirs
https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim
编辑~/.vimrc配置文件,添加以下代码行:
call plug#begin()
Plug 'scrooloose/nerdTree'
Plug 'ctrlpvim/ctrlp.vim'
Plug 'bling/vim-airline'
Plug 'tpope/vim-fugitive'
call plug#end()
let g:airline_powerline_fonts = 1
if !exists('g:airline_symbols')
let g:airline_symbols = {}
endif
let g:airline_symbols.space = "ua0"
let g:airline#extensions#tabline#enabled = 1
let g:airline#extensions#tabline#show_buffers = 0
let g:airline_theme = 'dark'
let g:airline#extensions#hunks#enabled=0
let g:airline#extensions#branch#enabled=1
let NERDTreeShowHidden=1
打开vim编辑器并运行 PlugInstall,这将安装所有的插件。其定义文件在 ~/.vimrc。如下图:
在vim编辑器上添加插件
余下的 ~/.vimrc(一些编辑器的简洁选项),可以在https://github.com/mudrii/.files/blob/master/HWD_Mac/.vimrc。
https://github.com/mudrii/.files/tree/master/HWD_Mac
作者:场长
推荐阅读:
以上是关于在Mac OSX上自定义Shell的主要内容,如果未能解决你的问题,请参考以下文章
在 Mac OSX 10.6 中将新行附加到 etc/hosts 和 Apache httpd-vhosts.conf 的 Shell 脚本