Pimp my command line

อาทิตย์ก่อนๆ ผมมีเพื่อนใหม่ชื่อ Christ มาจากเยอรมัน เค้าเป็น DevOps ซึ่งต้องใช้พวก command line  เยอะมาก ในระหว่างที่ผมไปนั่งดูเค้าทำงาน ก็ได้เหลือบไปเห็น Terminal ที่เค้าใช้ ซึ่งมันสวยงามมาก จนต้องร้อง … เจ๋งงงง !!!!!

Untitled-9

Terminal ใน Mac ที่เค้าใช้งานนั้น มันดู Damn Cool !!! มาก และต่างจากของผมมากมาย  .. นั่นแหละจึงเป็นที่มา ทำให้ผมต้องเขียนบทความนี้

หลายคนอาจจะยังไม่รู้จัก Terminal หรือ Command line ก็ไม่เป็นไร แต่ผมเชื่อว่าถ้าเขียนโปรแกรมไปสักพักหนึ่ง .. จะต้องได้ใช้ command line หรือ terminal อย่างแน่นอน และการใช้ command line interface  (ต่อไปนี้ขอเรียกว่า CLI) .. มันจะทำให้คุณดูเท่ห์ โคตรคูลลล .. จาก noob จะดูเป็น pro ขึ้นมาทันที

การใช้ terminal มันก็เปรียบเหมือนๆกับการใช้ hot key กด skill รัวๆ ในตอนเล่นเกมส์ มันย่อมเร็วกว่าลากเมาส์ไปกด icon เพื่อปล่อย skill ใช่ไหมละ ? นั่นแหละ เราถึงต้องมาหัดใช้ terminal กัน (ฟังดูอาจจะไม่เกี่ยวกันม่ะ แต่ก็ช่างมันเถอะ) แต่ .. เดี๋ยวก่อน .. เนื้อหาที่ผมจะเขียนต่อไปนี้ ไม่ใช่การหัดใช้ terminal แต่จะเป็นการปรับแต่ง ดังนั้นแล้ว ถ้าไม่เคยใช้มาก่อนเลย ผมแนะนำให้ไปฝึกใช้งานก่อน ซึ่งหาข้อมูลได้ทั่วไปจาก internet หรือจะอ่านจาก https://leanpub.com/lets_learn_cli_right_now/read  ก็ได้ และเนื่องจาก Mac OX นั้นมีพื้นฐานมาจาก BSD ดังนั้นคำสั่งต่างๆ มันก็เหมือนใน linux , unix นั่นแหละครับ ใช้กันได้

และที่เราต้องปรับแต่งก็เพราะว่า CLI ที่เราใช้ๆ กันอยู่ใน mac ถึงแม้ว่ามันจะดีกว่า CLI บน windows แต่เมื่อเทียบกับ unix หรือ linux แล้วมันก็ไม่ cool ไม่แจ่ม ประการที่สองถ้าเรามี terminal ที่ดูดี อลังการงานสร้าง และทำได้งานได้ดีกว่า CLI เดิม มันก็ดีกว่าใช่ม่ะ ?

Terminal App

ก่อนจะไปปรับแต่ง เราต้องทำความเข้าใจเกี่ยวกับ terminal ก่อน อย่างที่รู้ๆกันว่า ถ้าหากอยากจะใช้ CLI ใน Mac OSX นั้นสามารถทำได้ด้วยการเปิด Terminal ขึ้นมา โดยทั่วๆไปแล้ว เมื่อเปิดโปรแกรมขึ้นมาก็จะเจอหน้าตาของ  Terminal ประมาณนี้

01_basic

ดูๆแล้ว มันก็เห่ยๆ ไม่มีสีสันเอาซะเลย งั้นเราจะเพิ่มสีสันให้มันซะหน่อย ซึ่งโปรแกรม Terminal นี้สามารถปรับแต่ง color scheme สีสันของตัวอักษรต่างๆได้ จากเมนู preference

perference

เช่น ผมปรับเป็น  Ocean ก็จะได้หน้าตา สีสันแบบนี้

peref

 

จากสีขาวดำ .. ก็เปลี่ยนเป็นสีฟ้า แจ่มใสแล้ว .. เพียงเท่านี้ เราก็จะได้ Terminal สีสันแจ่มๆแล้ว ..  เป็นไงครับ Cool ไหม ?

Are-You-Fucking-Kidding-Me-Rage-Face-Meme-Temp

 

อ้าวเปลี่ยน color scheme ได้นี่ยังไม่คูลอีกเหรอ ..

แหม่ .. ถ้าจะปรับแค่นี้ คงไม่ต้องมาเขียนบทความนี้ให้เมื่อยหรอก เพราะใครๆก็ปรับได้

Shell

มันไม่ใช่ หอย หรือปั้มน้ำมันที่เราคุ้นเคย แต่อย่างใด ที่เราจะพูดถึงกันก็คือ Shell ในคอมพิวเตอร์ ซึ่ง Ken Thomson ได้พัฒนาขึ้นมาเป็นคนแรก ตั้งแต่ปี  1971 ( ลุง Ken คือหนึ่งในผู้พัฒนา Unix ) นับตั้งนั้นมา ก็มี shell หลายอย่างเกิดขึ้นมามากมาย ซึ่งหนึ่งในนั้นก็คือ bash และมันก็ได้เป็น shell หลักของ linux และ Mac OS X

ZSH

อย่างที่ได้บอกไปว่า bash เป็น shell มาตรฐานของ Mac OS X โดยทั่วๆไปมันก็ทำงานได้ดี แต่ว่ามันมี shell อื่นๆ ที่ดีกว่า bash ตั้งเยอะ และที่จะนำเสนอต่อไปนี้ก็คือ  zsh shell นั่นเอง มันฟีเจอร์เจ๋งๆกว่า bash เยอะ เช่น

  • cd completion
  • spell correction
  • git plugin
  • useful tab key.

นอกจากฟีเจอร์ต่างที่ดีกว่า bash แล้ว อีกเหตุผลหนึ่งที่ควรจะเปลี่ยนไปใช้ zsh ก็เนื่องจาก bash ตัวใหม่ล่าสุด .. มันเก่ามากกกกกกกกก เก่าแค่ไหนนะเหรอ …. มันก็ตั้งแต่ปี 2007

02_oldShell

เดี๋ยวๆๆๆๆ นะ .. bash ตัวใหม่ล่าสุด แต่เก่ามาก ? .. ถูกกกกกกก ต้อง ถ้านับเวลาตั้งแต่ปี 2007 จนถึงปีนี้ 2015 ก็ 8 ปีแล้วมั้ง .. จริงๆแล้ว bash มีการปรับปรุงพัฒนามาเรื่อย และตอนนี้ version 4.2 เป็นตัวล่าสุด .. อ้าวววววววว แล้วทำไม Apple ไม่เปลี่ยนไปใช้ bash ตัวใหม่ นั่นก็เพราะ bash 4.3 นั้นใช้ GPL license v.3 ซึ่งแอปเปิ้ลไม่ต้องการจะใช้  GPL license v.3 ดังนั้นแล้ว bash ตัวใหม่ล่าสุดที่ยังเป็น GPL ตัวเก่า หรือ v.2 อยู่นั้น ก็คือ รุ่น 3.2 นั่นแหละ ฟังดูย้อนแย้งดีม่ะ

เอาละเล่าประวัติศาสตร์มาซะเยอะ .. มาเปลี่ยนใช้ zsh กันดีกว่า โดยเราจะใช้  oh my zsh ซึ่งเป็น zsh configuration ที่นิยมใช้อย่างกว้างขวาง

วิธีการติดตั้งก็สุดแสนจะง่ายดาย ทำได้ด้วยคำสั่ง

จากนั้นก็ปล่อยให้มันโหลด และลงโปรแกรม

03_install

เมื่อลง oh my zsh เรียบร้อย ก็จะเจอข้อความบอกดังนี้

04_install

จากนั้นก็ให้ออกจาก Terminal และเปิดเข้ามาใหม่ ก็จะเห็นความเปลี่ยนแปลง โดยดูได้จากที่ shell prompt ของเราจะเปลี่ยนเป็นแบบนี้

promp

หากเจอแบบนี้ก็แสดงว่าตอนนี้เราได้เปลี่ยนไปใช้ zsh shell แล้ว ถ้าลองใช้คำสั่งง่ายๆเช่น ls ก็จะเห็นว่า zsh นั้นได้แสดงความแตกต่างระหว่าง folder กับ file ด้วยการใช้สีเป็นตัวแยกให้ด้วย ผิดกับ bash ที่ใช้สีเดียวกัน

compare

นอกจากจะเพิ่มสีสั้นให้กับโฟลเดอร์และไฟล์แล้ว zsh ยังมีความสามารถในการแสดง git branch และ status  ได้อีกด้วย แจ่มสุดๆ

07_Git

ZSH Theme

นอกจาก git สีสันของโฟลเดอร์และไฟล์แล้ว ความเจ๋งของ zsh มันยังไม่หมด เพราะเราสามารถเปลี่ยน theme ได้อีกด้วย และมันก็มีหลาย theme ให้เลือกมากมาย เข้าไปดูได้ที่

https://github.com/robbyrussell/oh-my-zsh/wiki/themes

เช่น them ที่ชื่อว่า pygmalion

theme2

วิธีการเปลี่ยน theme สามารถทำได้ด้วยการแก้ไขไฟล์ .zshrc ที่อยู่ในโฟรเดอร์ home ของเรา ใครถนัดใช้ VI ก็เปิดไฟล์แก้ไขได้เลย หรือถ้าชอบใช้ textEdit , sublime ,  textMate แก้ไขก็ทำได้ด้วยคำสั่ง open ดังเช่น

เมื่อเปิดไฟล์ .zshrc แล้ว ก็แก้ไข theme ตามใจชอบ (ตรงที่ไฮไลท์ไว้) และรายชื่อ theme ก็ดูได้จาก link ที่ให้ไว้

text_edit

 

เท่านี้ก็จะเพิ่มความ cool ของ zsh ได้อย่างมากมาย แต่…มันยังไม่หมด .. เพียงเท่านี้

Customize zsh

ไหนๆ ก็ไหนละ เราจะทำให้ zsh มันดู โคตร cooooool  จนต้องร้อง Holy Cow !!! ซึ่งสิ่งที่เราจะทำก็คือ

  1. ใช้ zsh theme ที่ชื่อว่า agnoster
  2. ใช้ Solarized Dark colorscheme
  3. ใช้ Powerline font
  4. เปลี่ยนไปใช้ iTerm แทน Terminal
  5. เพิ่มสีสันให้ไฟล์ และโฟลเดอร์

Step 1

อย่างแรกคือเปลี่ยนไปใช้ zsh theme ที่ชื่อว่า agnoster ซึ่งถ้าเราเปลี่ยนไปใช้ theme นี้พร้อมกับใช้ terminal color scheme ที่ชื่อ Basic แล้วก็จะได้ผลดังนี้

terminal

จะเห็นว่ามันอ่านไม่ออกว่าอะไรเป็นอะไร ถ้าหากเปลี่ยนใช้ IR Black ก็พออ่านได้บ้าง

term3

แล้วมัน cool ตรงไหน ?

Step 2

ใจเย็นๆ ตอนนี้มันยังไม่ cool ก็เพราะว่า agnoster นั้นถูกปรับมาใช้กับ color scheme ที่ชื่อ Solarized Dark ดังนั้นก็ไปโหลด color scheme สำหรับ Terminal กันได้ที่ https://github.com/altercation/solarized  หลังจากที่โหลดไฟล์ zip มาแล้ว ก็จะเข้าไปดูที่โฟลเดอร์  osx-terminal.app-colors-solarized จะเห็น color scheme สำหรับ terminal ก็ให้กดเปิดไฟล์ หรือจะ import ไฟล์ เข้ามาก็ได้

solarize

เมื่อให้ terminal เปลี่ยนมาใช้ solarized color แล้วก็จะได้ผลดังนี้

08_No_Font

Step 3

เมื่อดูจาก terminal แล้วก็จะเห็นว่า zsh shell ของเรานั้น ตัวอักษร บางตัวมันยังแสดงไม่ได้ นั่นก็เพราะว่า theme นี้ต้องการ font ที่เป็น powerline  ซึ่งฟ้อนต์ประเภทนี้จะมีการแก้ไขเพิ่มอักรพิเศษเข้ามา ซึ่งสามารถโหลดได้จาก

https://github.com/powerline/fonts

ผมแนะนำฟ้อนต์ Meslo หรือถ้าใครชอบ  Menlo ก็โหลดได้ที่

https://github.com/abertsch/Menlo-for-Powerline

เมื่อโหลดฟ้อนต์ เสร็จ ก็ปรับฟ้อนต์ใหม่ ก็จะได้ terminal ที่แสดงผลได้ถูกต้องแล้ว (ในตัวอย่างนี้ ใช้ฟ้อนต์ Menlo Powerline 12 pt.)

09_Font

อะ ฮ้าาาาา เป็นไง … มันเริ่มดู cool แล้วใช่ม่ะ ?

Step 4

ในตอนนี้ มันก็ เกือบจะ cool แต่เมื่อสังเกตดูจะเห็นว่า สีสันของ ลูกศร สีเหลือง ด้านขวา มันยังเพี้ยนๆ อยู่ นั่นก็เพราะว่า Terminal ของเรานั้น แสดงผลของ ANSI Color ได้แค่ 16 สี ( scheme color ที่ import เข้ามานั้น คนละอย่างกับ ANSI ) วิธีการที่จะทำให้ Terminal ของเราแสดงสีได้มากกว่า 16 สีนั้น คือ เปลี่ยนไปใช้ iTerm2 ซึ่งเป็นเป็น terminal ที่ดีกว่า (ดีกว่า .. อีกแล้ว)

เมื่อโหลด iTerm เสร็จแล้ว ก็จัดการเพิ่ม scheme color เข้ามาได้จาก preference > color ซึ่ง solarized color scheme ที่เราโหลดมาก่อนหน้านี้ก็มีให้อยู่แล้ว และเมื่อจัดการติดตั้ง scheme เสร็จ เปิด iTerm ใหม่ ก็จะได้ terminal ที่สุด cool ละ

10_install_iterm

Step 5

ต่อท้ายให้อีกนิด ตอนนี้มันก็ดู cool กว่าเดิมละ แต่ว่าเมื่อเราใช้คำสั่ง ll หรือ ls แล้วมันยังแยกความแตกต่าง ระหว่างไฟล์และโฟลเดอร์ยากอยู่ ก็อย่างที่เห็น ตัวหนาคือ folder ส่วนตัวหนังสือ ธรรมดาคือ file ถ้าเป็นสีแดง หมายถึง shell script

ls_color

เราจะเพิ่มสีสันให้กับ ls ด้วยการเปิดไฟล์ .zshrc และเพิ่มบรรทัด

เข้าไปต่อท้ายไฟล์

จากนั้นเมื่อเรียกใช้ ls หรือ ll ก็จะเห็นความแตกต่างแล้ว

final

เป็นไงละทีนี้ เจ๋งงงง ยัง

Before and After

จากขั้นตอนต่างๆที่เราได้ทำไปทั้งหมดนั้น เราได้เปลี่ยนจาก Terminal ของเดิม

default

ให้กลายเป็น Terminal สุด cool !!!!! เรียบร้อยละ

11_Directory

เท่านี้จาก noob ก็จะเปลี่ยนเป็น pro แล้ว

Leave a Reply