1. Mở bài
Cờ lờ i vs Gờ u i (CLI vs GUI) vẫn luôn là cuộc tranh luận nóng bỏng và dài hơi của người sử dụng máy tính nói chung.
Suy cho cùng, CLI hay GUI đều là một trong số nhiều phương pháp giao tiếp giữa 2 đối tượng (ở đây là người và máy). Nếu như giữa người vs người, chúng ta có 3 phương pháp: Speech
, Write
, Body language
. Thì giữa người vs máy, chúng ta cũng có 3 phương pháp: Speech
, Text
, Mouse&Screen
. Trong đó, Speech
là khả năng ra lệnh cho máy bằng giọng nói. Text
là khả năng ra lệnh cho máy bằng dòng lệnh command line
. Mouse&Screen
là khả năng ra lệnh cho máy bằng các thao tác chuột và màn hình (cảm ứng).
Bài viết này có mục đích rõ ràng là tôn vinh CLI (Text) hơn là GUI (Mouse&Screen).
2. Thân bài
2.1. Làm quen với CLI
Đầu tiên hãy tìm cho mình một terminal ưa thích. Đó sẽ là thứ mà bạn mở lên đầu tiên hàng ngày, và là thứ mà bạn sẽ vật lộn cả ngày. Do đó hãy lựa chọn một thứ phù hợp với mình: đủ thông minh để giúp bạn, đủ xinh đẹp để không khiến bạn cảm thấy buồn chán khi nhìn nó cả ngày.
Khuyến cáo của tôi là iTerm2 (hiện đã có version 3). Tiếc cái là chỉ có cho Mac. Với ubuntu thì có nhiều terminal, nhưng cái nào tốt nhất thì tôi không chắc.
Dù sao thì đây cũng chỉ là phần bề ngoài, quan trọng là chúng ta dùng shell gì.
Shell
là gì?
theo Wiki, thì Shell là cái sẽ nhận, cố gắng hiểu xem bạn đang muốn làm gì và thực hiện nó.
Tôi đã dùng qua bash
, sh
và giờ là fish
. Từ khi dùng fish
thì thực sự là tôi không nghĩ đến việc quay lại dùng các shell kia nữa.
2.2. Gặp fish
Ấn tượng lớn nhất của tôi đối với fish
đó là khả năng gợi ý lệnh và khả năng cài đặt custom function.
2.2.1. Gợi ý lệnh (Auto suggestion)
Đúng như được 'chém' ở trang chủ của mình, fish
gợi ý lệnh dựa trên lịch sử lệnh đã được dùng, kết hợp với những gì bạn đang gõ.
Nhưng không chỉ có thế, khả năng thực sự của fish nằm ở phím tab
, gọi là Tab completion.
Tab completion có một vài chức năng. Đầu tiên là Auto completion, khi bạn gõ 1 vài chữ cái đầu của lệnh, ấn Tab nghĩa là bạn yêu cầu fish đoán xem bạn đang muốn làm gì. Nếu đủ thông tin, thì fish sẽ tự động hoàn thành nốt dòng lệnh đó, nếu không fish sẽ đưa ra cho bạn những khả năng phù hợp nhất với những gì bạn đã gõ. Và việc của bạn là lựa chọn. Không cần nhấc tay ra cầm chuột, chỉ đơn giản là tab tiếp và enter.
Bên cạnh những lệnh có sẵn của unix, fish cũng hỗ trợ thêm rất nhiều lệnh của các thư viện phổ biến khác. Khả năng hỗ trợ của fish là tự động tìm và đưa ra các option có thể sử dụng với lệnh tương ứng. Ví dụ với docker, ngoài việc gợi ý các command:
fish còn có thể gợi ý dựa trên danh sách container hiện có:
2.2.2. Custom function
Nếu như bạn có nhiều công việc lặp đi lặp lại, bạn có thể tự tạo cho mình một function để thực hiện tất cả những việc đó. Fish cho phép bạn làm việc đó bằng nhiều cách.
Với các lệnh đơn giản, ví dụ ls -la
, bạn không muốn mỗi lần xem thư mục lại phải gõ đi gõ lại những chữ đó. Cho dùng tính năng Auto completion đã giúp bạn phần nào, nhưng... vẫn còn có cách tốt hơn. Đó là:
alias l "ls -la"
Với lệnh này, bạn thông báo với fish rằng: "từ giờ trở đi, mỗi khi anh gõ l
thì em hãy hiểu là anh muốn ls -la
nhé".
Và giờ bạn chỉ cần l
thôi.
Với những lệnh phức tạp hơn, bạn cần phải tạo 1 file mô tả function trong thư mục ~/.config/fish/functions/
2.3. Ứng dụng
Phần này sẽ tập hợp các mẹo vặt sử dụng CLI
2.3.1. Di chuyển qua lại giữa các thư mục
Một trong những điều phiền phức nhất khi sử dụng CLI đó là di chuyển qua lại các thư mục khác nhau. Đặc biệt là sau khi ngụp lặn vào các thư mục rất sâu. Bạn có thể sử dụng cd -
có sẵn để di chuyển nhanh về thư mục ngay trước đó, nhưng cũng chưa tiện hơn là mấy.
z
(xem tại đây) là 1 tiện ích khiến cho bạn cảm thấy mình như một jumper thực sự bằng cách cho phép bạn dịch chuyển tức thời đến 1 thư mục dựa trên một phần tên của thư mục đó.
Ví dụ, trước đó bạn đã vào thư mục project của mình bằng lệnh
cd /Volumes/Data/working/projects/customer/projectA
, rồi sau đó bạn phải qua check config của nginx
cd /usr/local/opt/nginx
và đi đến 1 loạt các thư mục khác nữa. Và giờ bạn muốn trở lại projectA. cd
nữa ư? Không, hãy nhảy đến đó:
z projectA
ngay lập tức bạn sẽ có mặt tại thư mục projectA, magic!!!
Có 1 chú ý là, để nhảy được đến thư mục nào đó, thì bạn phải ít nhất 1 lần cd
đến thư mục đó đã.
2.3.2. Git utils
Làm việc với git nhiều, bạn sẽ cần một số utils bổ trợ. Ví dụ, khi bắt đầu 1 project mới, bạn cần phải khởi tạo repository. Công việc cần làm là:
git init
git add .
git commit -m "First commit"
Mệt hả? git-extras
sẽ giúp bạn (Xem ở đây). Sau khi cài đặt, công việc của bạn sẽ là:
git setup
Xong rồi. Nhanh quá nhỉ?
Rồi khi bạn cần revert lại 3 commit vừa xong. Thay vì:
git revert HEAD~3..HEAD
git commit -m "em revert lại vì em nhầm ạ"
bạn có thể dùng:
git undo 3
Done.
Một trường hợp cũng hay gặp, đó là bạn commit 1 change trong nhiều lần commit, giờ muốn gộp lại thành 1 commit thôi để history dễ nhìn hơn. Làm nào khi mà mình đã commit xong xuôi hết rồi?
git squash HEAD~3
sẽ giúp bạn gộp 3 commit gần nhất lại thành 1.
2.3.3. Còn nữa
Còn nhiều tip khác nữa, sẽ thu thập tiếp và update tiếp...
3. Kết bài
Xét một cách toàn diện, mục tiêu của giao tiếp luôn là sự hiểu lẫn nhau. Nếu nhìn vào sự giao tiếp của người vs người ngày nay, tôi thấy nếu so sánh các phương pháp giao tiếp theo tiêu chí là sự hiệu quả, thì thứ tự như sau:
Speech > Write > Body language
Chúng ta luôn muốn máy tính có thể hiểu được con người, thì có lẽ đã đến lúc xem xét giao tiếp người vs máy giống như giao tiếp người vs người. Để người nghe có thể hiểu được mình, tốt nhất là dùng Speech, tiếp đến là Write/Text (CLI) và cuối cùng mới là Body language (GUI).
Nếu ví máy tính như một cô gái mà bạn muốn chinh phục (tại thời điểm hiện tại thì hãy coi như cô ấy không thể nghe thấy bạn (: ), tôi thực sự khuyên bạn hãy viết (CLI) cho cô ấy. Không chỉ là sẽ hiệu quả hơn mà còn an toàn hơn nhiều so với việc chỉ sờ, chạm và nhấp (touch, tap, click - GUI) vào cô ấy.