เปลี่ยนมาใช้ iTerm2 + zsh พร้อม Features เพียบ

เปลี่ยนมาใช้ iTerm2 + zsh พร้อม Features เพียบ Cover Image

เมื่อก่อนบน Ubuntu ผมก็ใช้งาน Terminal ร่วมกับ bash มาโดยตลอด ใช้บ่อยกว่า nautilus (File Explorer) ซะอีก หลังๆเริ่มหัดใช้ vim บางทีก็เปิดแค่ Terminal ตัวเดียว แล้วเขียนโค๊ดเลย

ปัจจุบัน Environment ในการทำงานเปลี่ยนไป ตอนนี้ได้มาจับ Mac OS X แล้ว ก็เลยลองมองหาอะไรใหม่ๆ แล้วก็ดันไปเจอ iTerm2 เข้า (เคยได้ยินมานานแล้ว แต่ว่าไม่มี Mac ก็เลยไม่ได้ใช้ซักที) + ได้เจอ Developers หลายๆคนจากต่างประเทศใช้ zsh ทีแรกก็ไม่รู้ว่ามันคืออะไร ลองโหลดๆมาดู หลังจากลองใช้มา 1 อาทิตย์ รู้สึกประทับใจอย่างบอกไม่ถูก :) ซึ่งผมไม่รู้ว่าเป็นความสามารถของ zsh เพียวๆ หรือว่าเพราะ oh-my-zsh ตัวเสริมของกันแน่

วันนี้ก็เลยมาแชร์วิธีและขั้นตอนในการใช้งาน Terminal ในแบบฉบับของผม (ผู้เริ่มต้น)

zsh ต่างกับ bash อย่างไร ?

ต้องบอกเลยว่า มันแทบไม่ต่างกันเลย อะไรที่ bash ทำได้ zsh ก็ทำได้เหมือนกัน คล้ายๆกับเป็นเวอร์ชันปรับปรุงของ bash ซะมากกว่า โดยมี features หลายๆ features ที่ไม่มีใน bash อย่างเช่น

  • Autocompleted
  • Kill Process
  • Auto Correct

AutoCompleted

เวลาที่เราพิมพ์อะไร หรือว่าจะ cd เพื่อเปลี่ยน directory ก็สามารถกด Tab เพื่อเลือกดูรายชื่อโฟลเดอร์ได้

Auto Completed

Kill Process

เราสามารถพิมพ์ kill แล้วกด Tab เพื่อแสดง List Process ทั้งหมด หรือใช้ลูกศร เลือก Process ที่รันอยู่ เพื่อ kill ได้

Kill Process

Auto Correct

เวลาที่เราพิมพ์คำสั่งไม่ถูกต้อง ก็ไม่ต้องกลัวเลย มีไกด์มาแนะนำเราด้วย เช่น จะพิมพ์ git status แต่ดันพิมพ์เป็น gitt status (t เกินมาตัวนึง)

Auto Correct

Install zsh & oh-my-zsh

เมื่อเห็น Features แล้ว ก็ถึงเวลาในการติดตั้งซักที ขั้นตอนก็ไม่มีอะไรมากครับ ติดตั้งผ่าน Homebrew ได้เลย

brew install zsh

จากนั้นติดตั้ง oh-my-zsh เพิ่มเลย ตัวนี้เป็นไอเท็มพิเศษสำหรับเพิ่มพลังให้กับ zsh ครับ หลักๆ เลยก็คงจะเป็นพวก Themes, Plugins อะไรพวกนี้

curl -L https://raw.github.com/robbyrussell/oh-my-zsh/master/tools/install.sh | sh

Custom zsh

หลังจากที่ติดตั้ง zsh + oh-my-zsh เสร็จ ก็ลองมา Custom กันดูซะหน่อย

ไฟล์ที่เราจะใช้ในการแก้ไขค่าต่างๆของ zsh จะอยู่ที่ ~/.zshrc ซึ่งโดยปกติถ้าเป็น ​bash จะใช้ ~/.bash_profile ก็ทำการเปิดไฟล์ ~/.zshrc ขึ้นมา จะสังเกตเห็นการตั้งค่า รวมถึง comment ต่างๆ คร่าวๆ ดังนี้ (ด้านล่างคือไฟล์ของผมเอง)


export ZSH=/Users/phonbopit/.oh-my-zsh

# Set name of the theme to load.
# Look in ~/.oh-my-zsh/themes/
# Optionally, if you set this to "random", it'll load a random theme each
# time that oh-my-zsh is loaded.
# ZSH_THEME="maran"
ZSH_THEME="gianu"
# Uncomment the following line to use case-sensitive completion.
# CASE_SENSITIVE="true"

# Uncomment the following line to disable bi-weekly auto-update checks.
# DISABLE_AUTO_UPDATE="true"

# Uncomment the following line to change how often to auto-update (in days).
# export UPDATE_ZSH_DAYS=13

# Uncomment the following line to disable colors in ls.
# DISABLE_LS_COLORS="true"

# Uncomment the following line to disable auto-setting terminal title.
# DISABLE_AUTO_TITLE="true"

# Uncomment the following line to enable command auto-correction.
ENABLE_CORRECTION="true"

# Uncomment the following line to display red dots whilst waiting for completion.
# COMPLETION_WAITING_DOTS="true"

# Uncomment the following line if you want to disable marking untracked files
# under VCS as dirty. This makes repository status check for large repositories
# much, much faster.
# DISABLE_UNTRACKED_FILES_DIRTY="true"

# Uncomment the following line if you want to change the command execution time
# stamp shown in the history command output.
# The optional three formats: "mm/dd/yyyy"|"dd.mm.yyyy"|"yyyy-mm-dd"
# HIST_STAMPS="mm/dd/yyyy"

# Would you like to use another custom folder than $ZSH/custom?
# ZSH_CUSTOM=/path/to/new-custom-folder

# Which plugins would you like to load? (plugins can be found in ~/.oh-my-zsh/plugins/*)
# Custom plugins may be added to ~/.oh-my-zsh/custom/plugins/
# Example format: plugins=(rails git textmate ruby lighthouse)
# Add wisely, as too many plugins slow down shell startup.
plugins=(git)

# User configuration

export PATH="/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin"
# export MANPATH="/usr/local/man:$MANPATH"

source $ZSH/oh-my-zsh.sh

# You may need to manually set your language environment
# export LANG=en_US.UTF-8

# Preferred editor for local and remote sessions
# if [[ -n $SSH_CONNECTION ]]; then
#   export EDITOR='vim'
# else
#   export EDITOR='mvim'
# fi

# Compilation flags
# export ARCHFLAGS="-arch x86_64"

# ssh
# export SSH_KEY_PATH="~/.ssh/dsa_id"

# Set personal aliases, overriding those provided by oh-my-zsh libs,
# plugins, and themes. Aliases can be placed here, though oh-my-zsh
# users are encouraged to define aliases within the ZSH_CUSTOM folder.
# For a full list of active aliases, run `alias`.
#
# Example aliases
# alias zshconfig="mate ~/.zshrc"
# alias ohmyzsh="mate ~/.oh-my-zsh"

alias zshconfig="subl ~/.zshrc"

alias subl="/Applications/Sublime\ Text.app/Contents/SharedSupport/bin/subl"

### Added by the Heroku Toolbelt
export PATH="/usr/local/heroku/bin:$PATH"

# Config rbenv
export PATH="$HOME/.rbenv/bin:$PATH"
eval "$(rbenv init -)"
Note สำหรับ RVM ให้เพิ่มคำสั่ง ด้านล่างลงบนไฟล์ ~/.zshrc ดังนี้
[[ -s "$HOME/.rvm/scripts/rvm" ]] && . "$HOME/.rvm/scripts/rvm" 

สร้าง alias

สิ่งที่เราสามารถปรับแต่งได้ อย่างแรกเลยคือ alias หรือก็คือประมาณ short cut นั่นแหละ ทีแรกผมติดตั้ง Sublime Text เสร็จแล้วต้องการสั่งรันผ่าน command line ด้วย subl ปรากฎว่ามันไม่รัน ก็เลยตั้ง alias ให้มันซะ โดยลิงค์ไปยัง path ของ Sublime Text (ตอนใช้ Ubuntu รู้สึกมันจะสร้าง symbolic link ให้นะ) ดังเช่น 2 บรรทัดนี้

alias zshconfig="subl ~/.zshrc"
alias subl="/Applications/Sublime\ Text.app/Contents/SharedSupport/bin/subl"

เปลี่ยน Theme

สามารถเปลี่ยนแปลง Theme ของ zsh ได้ด้วย โดยดูรายชื่อ Theme ทั้งหมดที่นี่

Theme Preview

เมื่อเลือกชื่อ Theme ได้แล้ว ก็มาแก้ไขบรรทัดนี้ ในไฟล์ ~/.zshrc เช่น เลือกธีม gianu

ZSH_THEME="gianu"

เพิ่ม Plugins (รายชื่อ Plugin ทั้งหมด) ความสามารถของ Plugins ก็คล้ายๆกับ short key ของ Plugin นั้นๆ อย่างเช่น Git

  • gst = git status
  • gd = git diff
  • gup = git pull --rebase
  • grh = git reset HEAD

Install iTerm2

ต่อมา เปลี่ยนจาก Terminal ซึ่งเป็น default มาใช้ iTerm2 เนื่องจากว่ามี Features หลายๆอย่างให้ใช้งานที่ Terminal ปกติไม่มี ยิ่งมารวมร่างกับ zsh อีกนี่บอกเลยว่า ชอบมาก

Terminal vs iTerm2

ด้านซ้ายคือ Terminal และด้านขวาคือ iTerm2 มองด้วยตา อาจจะไม่เห็นความต่าง ถ้าไม่นับเรื่องสีนะ :)

Features เด่นๆ

Features เด่นๆ ของ iTerm2 ที่ผมชอบคือ

  • Copy Paste ได้เลย จะก็อบ จะวางอะไรก็ได้ ไม่เหมือนอย่าง Terminal
  • สร้าง Hot Key เช่น เปิด/ปิด iTerm2
  • Split Pane โดยการกด Command + d

split-pane

Custom iTerm2

อย่างแรกเลยคือผมชอบ Custom Theme ครับ มักจะเปลี่ยนสีบ่อยๆ ก็เลยไปเลือก Theme ที่ชอบที่ iTerm2 Theme จากนั้นดาวน์โหลด Theme มาไว้ที่เครื่อง

ตัวอย่าง Theme

วิธีการเปลี่ยน Theme ก็เปิด iTerm2 ขึ้นมา กด Command + i หรือเลือก iTerm2 => Preferences => Profile จากนั้นเลือกไปที่แท็ป Colors เลือกไปที่ Load Presents แล้วเลือก Import สีที่ชอบได้เลยครับ

เปลี่ยนให้อยู่ on top ก็ได้ โดยตั้งค่าตามด้านล่างนี้ (ใส่ transparent พอประมาณ)

split pane

จะได้ผลลัพธ์ดังนี้ สามารถใช้ iTerm2 ก็ได้ และสามารถเห็นพื้นหลังได้อีกด้วย

final

สรุป

ต้องบอกเลยว่าหลังจากใช้ iTerm2 + zsh นี้ทำให้ชีวิตง่ายขึ้นเยอะเลย ยิ่งถ้าหากว่าหัดใช้งาน vim คล่องเมื่อไหร่คิดว่าน่าจะมี Productivity ที่ดีกว่านี้ (ปัจจุบันยังไม่ค่อยคล่อง vim เรียกได้ว่า move cursor เป็นอย่างเดียว :D เลยใช้ Sublime Text 3 เขียนโค๊ด และใช้ iTerm2 รัน command line ไปก่อน)

ทั้งหมดนี้ก็เป็นการลองผิดลองถูกของผมในฐานะ Mac User มือใหม่นะครับ อีกทั้งผมก็ไม่เก่งทางด้าน Unix Command Line ด้วย หากใครมีข้อแนะนำ ติชม สามารถบอกหรือมาแชร์กันได้นะครับ จะขอบคุณมากเลย :)

Chai Chai Phonbopit : Software Engineer @Nextzy • ผู้ชายธรรมดาๆ ที่ชื่นชอบ Android, JavaScript (Node.js) และ Open Source มีงานอดิเรกเป็น Acoustic Guitar และ Football

บทความล่าสุด