在Mac OSX上自定义Shell

Posted 21CTO

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在Mac OSX上自定义Shell相关的知识,希望对你有一定的参考价值。

导读:如何自定义你的Mac上的Shell终端,本篇供参考。

在Mac OSX上自定义Shell

在Mac OSX上自定义Shell


如果你是Mac的忠实用户,而且有大量时间使用Shell,你一定会知道在OSX Shell下是非常笨拙的,效率并不怎么高。


那么问题来了,如何使OSX Shell更具生产力?


背景


安装/部署 iTerm2


iTearm2是Mac终端命令行的替代品,是第一版本iTerm的增强二代产品,它给人们带来了多项新功能和优化,可以让开发者更加灵活高效。


首先,我们从iTerm官网上下载iTerm2。


官方网址:https://iterm2.com


在Mac OSX上自定义Shell


iTerm2提供了很多有意义的功能,如拆分窗格、搜索、自动填写

即时重现等。


安装XCode


开始安装Xcode,请在iTearm的命令行下运行。


xcode-select --install

在Mac OSX上自定义Shell

提示窗口后,点击同意协议,开始安装,直到它安装完成为止。


在Mac OSX上自定义Shell


部署自制软件


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

执行完毕之后,回报如下信息:

在Mac OSX上自定义Shell

然后执行brew,就可以了。


Homebrew安装成功后,就可以对其升级更新。如下:


brew updatebrew upgrade



Mac OSX默认状态下安装了Python 2.7,可以用Brew将Python更新到最新版本。接下来,将部署git和vim的最新版本,安装neovim作为vim的替代品。此外,将安装更多有用的软件包,稍后介绍。


brew install python git neovim coreutils inetutilsbrew install vim --env-std --override-system-vimpython --versiongit --version



对于Python,我们可以使用pip进行进安装,可以添加我们可能需要的任何软件包/模块。


pip3 install pygmentssudo pip install powerline-status



现在,我们新的Shell发光时间到。


添加以下代码行到你的 ~/.bash_profile中,然后在终端中执行~/.bashrc。


[[ -f ~/.bashrc ]] && . ~/.bashrctest -e "${HOME}/.iterm2_shell_integration.bash" && source "${HOME}/.iterm2_shell_integration.bash"



现在,我们就可以给Shell添加更加丰富多彩和有用的功能了。在~/.bashrc文件中,添加如下代码:


# ~/.bashrc# If not running interactively, don't do anything[[ $- != *i* ]] && returnif [ -f /etc/bashrc ]; then . /etc/bashrcfiif [ -f /etc/bash_completion ]; then . /etc/bash_completionfi[ -z "$PS1" ] && returnif [[ ${EUID} == 0 ]] ; thenPS1='[e[01;31m]h[e[01;34m] W $[e[00m] 'elsePROMPT_COMMAND='__git_ps1 "[e[01;32m]u@h[e[01;34m] W[e[00m]" " \$ "'fi



现在,我们就可以配置其余的bash,如history,手册的别名,为less和cat命令提供更好的颜色输出。


在~/.bashrc文件中添加如下几行:


export EDITOR=vimexport HISTSIZE=100000export HISTFILESIZE=1000000HISTCONTROL=ignoreboth:erasedups:ignorespaceshopt -s histappendPROMPT_COMMAND="history -a; history -c; history -r;$PROMPT_COMMAND"# aliasesalias 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 colorsexport LESSOPEN='|pygmentize -f terminal256 -g -P style=monokai %s'export LESS='-R'# man pages in coloresman() { 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-8export LANG=en_US.UTF-8



~/.vimrc的例子:


在Mac OSX上自定义Shell


这样的就可以增强history命令,不必再使用上下箭头在整个历史记录中循环。


接着在主目录里创建一个文件 .inputrc,添加如下条目。


#.inputrc"e[A": history-search-backward"e[B": history-search-forward"e[C": forward-char"e[D": backward-charset match-hidden-files offset page-completions offset completion-query-items 350set completion-ignore-case onset show-all-if-ambiguous onset bell-style noneTAB: menu-complete

在~/.bashrc中导入~/.inputrc设置:

# import input rc for bash historyexport 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.bashcurl https://raw.githubusercontent.com/git/git/master/contrib/completion/git-prompt.sh --output ~/.git-prompt.sh


并且在~/.bashrc中添加以下两行:


# git completionsource ~/.git-completion.bash# git prompthsource ~/.git-prompt.sh

在Mac OSX上自定义Shell

Master分支


Tmux


另一个有用的工具是TMUX。TMUX是一个终端复用工具,可以让我们在单个窗口中同时使用多个会话,这对于同时运行多个命令行程序很有用。它还可以用于将进程与控制终端分离,让SSH会话保持激活状态,但又不会被看到。


使用如下命令:


brew install tmux

在Mac OSX上自定义Shell

安装后的TMUX


以下是TMUX的配置文件,供各位参考:


# -- general -------------------------------------------------------------------set -g default-terminal "screen-256color" # colors!setw -g xterm-keys onset -s escape-time 10 # faster command sequencesset -sg repeat-time 600 # increase repeat timeoutset -s focus-events onset -g prefix2 C-a # GNU-Screen compatible prefixbind C-a send-prefix -2unbind C-b # Unbind original key activisioinset -q -g status-utf8 on # expect UTF-8 (tmux < 2.2)setw -q -g utf8 onset -g history-limit 406000 # boost history# reload configurationbind r source-file ~/.tmux.conf ; display '~/.tmux.conf sourced'# -- display -------------------------------------------------------------------set -g base-index 1 # start windows numbering at 1setw -g pane-base-index 1 # make pane numbering consistent with windowssetw -g automatic-rename on # rename window to reflect current programset -g renumber-windows on # renumber windows when a window is closedset -g set-titles on # set terminal titleset -g set-titles-string '#H:#S.#I.#P #W #T'set -g display-panes-time 800 # slightly longer pane indicators display timeset -g display-time 1000 # slightly longer status messages display timeset -g status-interval 10 # redraw status line every 10 seconds# clear both screen and historybind -n C-l send-keys C-l ; run 'sleep 0.1' ; clear-history# activityset -g monitor-activity onset -g visual-activity off# -- navigation ----------------------------------------------------------------# create sessionbind C-c new-session# find sessionbind C-f command-prompt -p find-session 'switch-client -t %%'# split current window horizontallybind - split-window -v# split current window verticallybind  split-window -h# pane navigationbind -r h select-pane -L # move leftbind -r j select-pane -D # move downbind -r k select-pane -U # move upbind -r l select-pane -R # move rightbind > swap-pane -D # swap current pane with the next onebind < swap-pane -U # swap current pane with the previous one# maximize current panebind + run 'cut -c3- ~/.tmux.conf | sh -s _maximize_pane "#{session_name}" #D'# pane resizingbind -r H resize-pane -L 2bind -r J resize-pane -D 2bind -r K resize-pane -U 2bind -r L resize-pane -R 2# window navigationunbind nunbind pbind -r C-h previous-window # select previous windowbind -r C-l next-window # select next windowbind Tab last-window # move to last active window# Bellsset -g visual-bell onset -g bell-action any# Don't lose track of SSH_AGENT etc. from parent environment.set -g update-environment -r# Scroll in shellset -g terminal-overrides 'xterm*:smcup@:rmcup@'set -wg xterm-keys 1# Set status barset -g status-bg blackset -g status-fg whiteset -g status-left-style fg=green# default statusbar colorsset -g status-fg whiteset -g status-bg blackset -g status-style bright# default window title colorsset-window-option -g window-status-style fg=whiteset-window-option -g window-status-style bg=defaultset-window-option -g window-status-style dim# active window title colorsset-window-option -g window-status-current-style fg=whiteset-window-option -g window-status-current-style bg=defaultset-window-option -g window-status-current-style bright# Highlight active windowset-window-option -g window-status-current-style bg=red# Set window notificationssetw -g monitor-activity onset -g visual-activity on


以上配置文件将tmux的激活键从Ctrl+b更改为Ctrl+a,类似于上述屏幕。


至此,配置好了外观漂亮的bash shell和终端,并学习了如何利用添加选项,这样我们可以转到更好的终端Shell,比如使用外观更现代用户体验更好的FISH shell代替bash。


接下来我们来安装FISH终端,并增加一些主题管理器:


brew install fishcurl -L https://get.oh-my.fish | fishomf install bobthefishomf theme bobthefishomf reload



以上,我们安装了FISH和oh-my-fish并部署了bobthefish作为主题。


为了让FISH看起来更好看,再安装几个字体。


sudo pip install powerline-status# install powerline fontsgit clone https://github.com/powerline/fonts.git --depth=1cd fonts/./install.sh



接下来将FISH Shell设置为默认值,使用chsh命令把bash替换为FISH的路径。


不要忘记为iTerm2修改为新安装的字体,在Preferences../Profile/Text。


在Mac OSX上自定义Shell


以上配置文件将tmux的激活键从Ctrl+b更改为Ctrl+a,类似于上述屏幕。


至此,配置好了外观漂亮的bash shell和终端,并学习了如何利用添加选项,这样我们可以转到更好的终端Shell,比如使用外观更现代用户体验更好的FISH shell代替bash。


接下来我们来安装FISH终端,并增加一些主题管理器:


brew install fishcurl -L https://get.oh-my.fish | fishomf install bobthefishomf theme bobthefishomf reload



以上,我们安装了FISH和oh-my-fish并部署了bobthefish作为主题。


为了让FISH看起来更好看,再安装几个字体。


sudo pip install powerline-status# install powerline fontsgit clone https://github.com/powerline/fonts.git --depth=1cd fonts/./install.sh



接下来将FISH Shell设置为默认值,使用chsh命令把bash替换为FISH的路径。


不要忘记为iTerm2修改为新安装的字体,在Preferences../Profile/Text中,如下图。


在Mac OSX上自定义Shell


还可以通过编辑如下代码为FISH增加其它选项。文件名为~/.config/fish/config.fish


set -g theme_display_git yesset -g theme_display_git_dirty yesset -g theme_display_git_untracked yesset -g theme_display_git_ahead_verbose yesset -g theme_display_git_dirty_verbose yesset -g theme_display_git_stashed_verbose yesset -g theme_display_git_master_branch yesset -g theme_git_worktree_support noset -g theme_display_vagrant noset -g theme_display_docker_machine yesset -g theme_display_k8s_context yesset -g theme_display_hg noset -g theme_display_virtualenv yesset -g theme_display_ruby noset -g theme_display_user sshset -g theme_display_hostname sshset -g theme_display_vi noset -g theme_display_date noset -g theme_display_cmd_duration yesset -g theme_title_display_process yesset -g theme_title_display_path yesset -g theme_title_display_user yesset -g theme_title_use_abbreviated_path noset -g theme_avoid_ambiguous_glyphs yesset -g theme_powerline_fonts yesset -g theme_nerd_fonts noset -g theme_show_exit_status yesset -g theme_color_scheme darkset -g fish_prompt_pwd_dir_length 0set -g theme_project_dir_length 1set -x EDITOR vimset -Ux LC_ALL en_US.UTF-8set -Ux LANG en_US.UTF-8



想要让tmux以FISH界面启动,可以在~/.tmux.conf的开头添加如下两行:


source /usr/local//lib/python3.7/site-packages/powerline/bindings/tmux/powerline.confset-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,我们的终端应该看起来更好。如下图:


在Mac OSX上自定义Shell

改进的终端视图与部局


还没有完全完成,我们需要让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 = 1if !exists('g:airline_symbols') let g:airline_symbols = {}endiflet g:airline_symbols.space = "ua0"let g:airline#extensions#tabline#enabled = 1let g:airline#extensions#tabline#show_buffers = 0let g:airline_theme = 'dark'let g:airline#extensions#hunks#enabled=0let g:airline#extensions#branch#enabled=1let 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的主要内容,如果未能解决你的问题,请参考以下文章

在 Linux 上自定义 bash 命令提示符

在 Mac OSX 10.6 中将新行附加到 etc/hosts 和 Apache httpd-vhosts.conf 的 Shell 脚本

无法在 Mac 应用程序中添加自定义字体(OSX 10.9+ Xcode5+)

递归重命名文件 Mac OSX

如何在 MAC OSX 上获取 NIB 文件的资源

Mac OSX:Powerline风格的zsh配置