Hiểu rõ hơn, tối ưu và sử dụng phím tắt cho Terminal

1.Mở đầu

  • Đã bao giờ bạn từng rất ngại phải gõ lệnh trên Terminal.
  • Đã bao giờ bạn từng cảm thấy bối rối với các khái niệm Sheel, Bash, Sh, Zsh, Oh-my-zsh,... hay thậm chí là sự khác nhau giữa Linux và Linux Mint.
  • Đã bao giờ bạn nhìn thấy giao diện Terminal trên mạng rất đẹp, màu sắc hài hòa trong khi của mình thì ngồi căng mắt nhìn thấy chữ nào cũng giống nhau.
  • Đã bao giờ bạn thấy bạn bè ấn phím tắt nào đó xóa trắng cả 1 dòng lệnh rất dài trong khi bạn phải giữ phím Back Space để xóa từng chữ một.
  • Đã bao giờ bạn thấy thằng nào xấu zai hơn mình vừa có gấu lại còn cặp kè với cô em xinh tươi nữa trong khi mình vẫn chưa mảnh tình vắt vai.

Ahihi,

Đùa vậy thôi nhưng có một sự thật mình nghĩ ai cũng biết 😄 đó là nếu bạn sử dụng hệ điều hành dựa trên nhân Linux thì tần suất bạn làm việc với Shell là khá lớn. Còn nếu bạn đang là một Web dev nữa thì tần suất làm việc với

  • IDE (Có thể là Sublime Text)
  • Brower (Có thể là Google Chrome)

cũng chẳng thế nhỏ được.

Hiểu rõ, biết cách tối ưu các công cụ trên, tận dụng hết sức mạnh của chúng thì bạn sẽ cảm thấy thoải hơn khi làm việc rất nhìu đóa.

Sau khi chia sẻ một chút về cách tối ưu Sublime Text (phím tắt + plugin), hôm nay mình sẽ giới thiệt một số tùy chỉnh, phím tắt cho Terminal và Google Chrome mà mình biết và đang sử dụng, hi vọng sẽ giúp các bạn tiết kiệm đôi chút thời gian và cảm thấy thuận tiện khi áp dụng chúng.

Trước hết ta hiểu một chút về lý thuyết đã nhé !

2. Shell

2.1 Shell là gì ?

Khi làm việc với Linux, chương trình thân thiết với bạn nhất là Shell.

-> Ôi dào lòng vòng mãi, thế Shell là cái quái gì ?

  • Shell là một trình thông dịch dòng lệnh phát triển dành cho các máy tính chạy hệ điều hành có nhân Unix và Linux.
  • Nó cung cấp giao diện người dùng dưới dạng văn bản nằm giữa bạn và Linux (hay nói chính xác hơn là giữa bạn với nhân hệ điều hành).

-> Chức năng của Shell là gì ?

  • Việc thao tác trực tiếp tới phần nhân Linux là rất phức tạp và đòi hỏi ký thuật cao, để trách sự phức tạp cho người sử dụng và để bảo vệ nhân HĐH từ những sai sót của người sử dụng, shell đã được xây dựng thành lớp bao quanh nhân. Thuật ngữ Shell xuất phát từ nghĩa đen của nó (Shell -> Vỏ).
  • Người sử dụng gửi yêu cầu tới shell, chức năng chính của Shell là thông dịch chúng và sau đó gửi tới nhân HĐH.
  • Các lệnh này người dùng có thể nhập trực tiếp qua chế độ tương tác (interactive) hoặc thông qua dạng script.

-> Thông dịch hay biên dịch ?

  • Thông dịch - interpret nhé, chứ không phải biên dịch - compile. Điểm khác biệt giữa cách thức hoạt động của shell và trình biên dịch (compiler) đó là:
  • Các chương trình shell sẽ làm nhiệm vụ thông dịch các lệnh của người dùng sang chương trình có sẵn trên hệ thống từ đó thực thi các chức năng tương ứng. Shell đọc các lệnh trong script tuần tự từ trên xuống, tìm vị trí các lệnh đó trong hệ thống để thực thi.
  • Compiler sẽ biên dịch các lệnh trong script sang một dạng mà máy tính có thể hiểu được, ví dụ mã máy và sinh ra một chương trình (program) tương ứng. Ví dụ: Trình compiler của C biên dịch từ file .c ra file .exe. Sau đó hệ điều hành mới thực thi file .exe đó.

-> Ngay khi user đăng nhập vào hệ thống, user đã sử dụng 1 shell nào đó. Shell là phương thức cơ bản mà user có thể tương tác với hệ thống, Shell giấu đi các chi tiết phức tạp bên dưới của hệ điều hành mà người dùng không thấy được.

  • Shell là chương trình (phần mềm) phát triển dành cho các máy tính chạy hệ điều hành Unix và Linux.
  • Trên các máy tính Mac OS X hay Ubuntu thì chương trình Shell có tên là Terminal.
  • Hoặc khi bạn tạo kết nối SSH tới máy chủ thì bạn cũng đang sử dụng chương trình Shell trên remote server (thường gọi là Console).

2.2 Các loại Shell

Trong thế giới Unix/Linux có rất nhiều loại Shell.

  • Shell Bourne (SH)

    Do Steven Bourne viết, đó là Shell nguyên thuỷ có mặt trên hầu hết các hệ thống Unix/Linux… Nó rất hữu dụng cho việc lập trình Shell nhưng nó không xử lý tương tác người dùng như các Shell khác.

  • Bourne Again Shell (Bash)

    Thuộc nhóm Bourne Shell được viết bởi Brian Fox trong khuôn khổ một dự án của GNU cho việc thay thế sh, được công bố rộng rãi vào khoảng 1989.

    Đây là phần mở rộng của sh, nó kế thừa những gì sh đã có và phá huy những gì sh chưa có. Nó có giao diện lập trình rất mạnh và linh hoạt…Cùng với giao diện lệnh dễ dung… Đây là Shell được cài đặt mặc định trên các hệ thống Linux, Mac OS X, Darwin hiện nay.

  • Shell C (CSH)

    Đáp ứng tương thích cho người dung…Nó hỗ trợ rất mạnh cho những Programmer C…và với đặc tính tự động hoàn thành dòng lệnh…

  • Zsh

    Đây là shell được đánh giá là mạnh nhất trong thời gian gần đây. Hỗ trợ rất nhiều những tính năng cực mạnh, nhưng việc cài đặt lại rất đơn giản. Ngoài ra còn có một số Shell khác như: ssh, nfssh, mcsh… Sau đây mình sẽ viết về zsh.

3. Zsh

3.1 Cài đặt zsh và Oh-my-zsh

Đây là hình ảnh Terminal với Bash.

Hãy so sánh nó với hình ảnh Terminal sau khi được tinh chỉnh với Zsh nhé !

Zsh là một trình shell rất mạnh mẽ có thể tương tác như là một trình thông dịch và tương thích với Bash.

Oh-my-zsh là một plugin của Zsh dùng để thay đổi giao diện của terminal và hỗ trợ các plugin (rails, git, OSX, hub, capistrano, brew, ant, php, python, etc)

Oh-my-zsh hiện đang cung cấp hơn 200 plugins và hơn 140 themes được phát triển từ cộng đồng.

Cài đặt szh: sudo apt-get install zsh

Cài đặt Oh-my-zsh:

cd

sh -c "$(curl -fsSL https://raw.github.com/robbyrussell/oh-my-zsh/master/tools/install.sh)"

3.2 Cài đặt themes

Mình xin giới thiệu themes Agnoster - khá đẹp và dịu mắt mà mình đang sử dụng. Hình ảnh demo trên trang chủ của họ, lưu ý là mình có thể custom được tất cả các font và color cho nó nhé !

Cài đặt qua các bước sau:

  1. Install Powerline Font

    cd

    wget https://github.com/powerline/powerline/raw/develop/font/PowerlineSymbols.otf

    wget https://github.com/powerline/powerline/raw/develop/font/10-powerline-symbols.conf

    mkdir ~/.fonts/ #nếu chưa có thư mục

    mv PowerlineSymbols.otf ~/.fonts/

    mkdir -p .config/fontconfig/conf.d #nếu chưa có thư mục

  2. Clear fonts cache

    fc-cache -vf ~/.fonts/

  3. Move config file

    mv 10-powerline-symbols.conf ~/.config/fontconfig/conf.d/

  4. Config ZSH

    gedit ~/.zshrc

    Thay đổi dòng ZSH_THEME="robbyrussell" thành ZSH_THEME="agnoster"

    Restart Terminal

  5. Change terminal color to Solarize

    sudo apt-get install dconf-cli

    git clone git://github.com/sigurdga/gnome-terminal-colors-solarized.git ~/.solarized

    cd ~/.solarized

    ./install.sh

    Mình chọn Option 1 (Dark themes) vì nó khá dịu mắt

    Để active đc Dark themes thì phải chuột ở terminal

    Profiles>Profiles Preferences>Colors

    Text and Background Color >>> Built-in schemes: Solarized dark

    Palette >>> Built-in schemes: Solarized

    Còn để thiết lập zsh là terminal mặc định trên Ubuntu:

  6. Change directory color to Solarize

    cd

    wget https://raw.githubusercontent.com/seebi/dircolors-solarized/master/dircolors.ansi-dark

    mv dircolors.ansi-dark .solarized

    gedit ~/.zshrc

    Thêm vào câu lệnh sau:

    eval `dircolors ~/.solarized/dircolors.ansi-dark`

Khởi động lại Terminal và bạn đã có một Terminal hoàn hảo hơn rất nhiều !

Xem thử thành quả nào:

  • Không bao giờ cần đến câu lệnh git branch nữa nhé !

  • Đối với git, Oh-my-zsh hỗ trợ một phím tắt như sau: gst -> git status gco -> git checkout gp -> git push ...

    Bạn có tham khảo thêm ở đây.

Hoàn hảo hơn chỗ nào nữa ? Hãy nhìn thêm bức ảnh sau.

  • Có sự khác biệt ở màu nền của vùng hiển thị tên branch khi mình thêm file mới.
  • Sau khi gõ git add ., có icon + kìa.
  • Sau khi commit bạn có thấy sự khác biệt gì chưa ?
  • Và còn nhiều điều nữa, bạn tự cảm nhận nhé !

Note:

  1. Nếu như bạn cài zsh sau khi bạn cài ruby thì zsh sẽ không nhận được cấu hình cho ruby:
  • Cấu hình ruby (cài từ rvm) cho zsh, bạn thêm dòng sau vào file ~/.zshrc: [[ -s "$HOME/.rvm/scripts/rvm" ]] && . "$HOME/.rvm/scripts/rvm"

  • Nếu bạn cài ruby từ rbenv, chạy các câu lệnh sau:

    echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.zshenv

    echo 'eval "$(rbenv init -)"' >> ~/.zshenv

    echo 'source $HOME/.zshenv' >> ~/.zshrc

    exec $SHELL

  1. Chuyển đổi giữa zsh và bash:

    Cũng khá đơn giản, các bạn làm như sau:

3.3 Cài đặt plugin

Như đã nói ở trên, zsh hỗ trợ rất nhiều plugin, bạn có thể tham khảo ở đây Chính bạn hãy tự sử dụng và trải nghiệm. Mình xin suggest plugin này:

  • zsh-autosuggestions: Hiển thị gợi ý, auto suggest Note: Màu của chữ mờ hiển thị bởi zsh-autosuggestions mặc định sẽ trùng với màu của background color trong Terminal nếu như bạn chọn Solarized dark. Vậy nên bạn sẽ không thấy chữ mờ hiện ra mặc dù bạn đã install thành công 😃))) Giải pháp:
  1. Hoặc là thay đổi màu nền của Terminal, không chọn Solarized dark nữa.
  2. Hoặc là đổi màu nền hiển thị chữ mờ: Cấu hình trong file ~/.oh-my-zsh/custom/plugins/zsh-autosuggestions/zsh-autosuggestions.zsh với biến ZSH_AUTOSUGGEST_HIGHLIGHT_STYLE='fg=blue'

4. Phím tắt trong Terminal

4.1 Tab

  1. Ctrl + Alt + T: Mở Terminal

  2. Ctrl + Shirt + T: Mở Tab mới

  3. Ctrl + D: Đóng tab hiện tại

  4. Alt + [1-> 9]: Di chuyển đến tab số 1->9

4.2 Văn bản

  1. Ctrl + W: Xóa một từ

  2. Ctrl + U: Xóa trắng 1 dòng

  3. Ctrl + L: Xóa toàn màn hình

  4. Ctrl + R: Hiển thị gợi ý trong khi gõ lệnh

4.3 Toàn chương trình

  1. Ctrl + Super + Mũi tên lên: Max size terminal

  2. Ctrl + Super + Mũi tên xuống: Thu nhỏ kích thước terminal hoặc thu về task bar

  3. Ctrl + Super + Mũi tên trái: Hiện thị terminal với 1 nửa màn hình bên trái

  4. Ctrl + Super + Mũi tên phải: Hiện thị terminal với 1 nửa màn hình bên phải

  • Thời gian đầu mới sử dụng Terminal để lập trình RoR , mình mở rất nhiều của sổ Terminal, mỗi khi cần chuyển Terminal cũ để làm việc lại mất thời gian để mò xem nó ở đâu, Alt + Tab mỏi cả tay.
  • Sau đó mình sử dụng Ctrl + Shirt + T để mở tab mới trên cửa sổ hiện tại luôn.
  • Thường sẽ là 3 tab:
    • Tab thứ nhất chạy rails s
    • Tab thứ hai chạy rails c
    • Tab thứ ba chạy git
    • Cố định vậy, mọi thứ có vẻ đã vào quy cũ, đỡ rối hơn rồi hehe.

Bạn có thể tham khảo thêm ở đây.

5. Tạo alias trong Terminal

Ví dụ: Khi bạn muốn ghi nhận tất cả thay đổi vào commit gần nhất mà không cần chỉnh sửa nội dung commit, bạn dùng câu lệnh sau:

git commit --amend --no-edit

Hơi dài phải không, bạn có thể tạo một alias cho nó, chỉ cần gõ gcne chẳng hạn, câu lệnh trên sẽ được thực thi. Cách làm như sau:

gedit ~/.zshrc

alias gcne="git commit --amend --no-edit"

Mỗi lần bạn mở Terminal thì Shell sẽ load cấu hình từ file tương ứng.

Nếu bạn dùng Bash thì Shell sẽ load từ file ~/.bashrc

Nếu bạn dùng Zsh thì Shell sẽ load từ file ~/.zshrc

Do đó sau khi bạn sửa file config thì cần mở new terminal tab nhé !

Bạn có thể thiết kế bộ alias cho riêng mình rồi đấy !

Note: Bạn nên cẩn thận với con dao hai lưỡi này ! Nếu bạn tạo alias là alias git status="sudo rm -rf /" rồi chạy thử thì sẽ được một bài học lớn đó. Đừng thử khi chưa hiểu nhé 😄

6. Phím tắt trong Google Chrome

Như đã nói ở đầu bài viết, mình xin chia sẻ một vài phím tắt mình mong là sẽ hữu dụng và giúp ích các bạn, có một chút tương tự như đối với Terminal:

Bạn có thế tìm kiếm tất tần tật ở đây. Mình liệt kê một số phím tắt hay dùng.

Ctrl + Shirt + N: Mở tab ẩn danh

Ctrl + T: Mở Tab mới

Alt + D sau đó Alt + Enter: Nhân đôi tab hiện tại

Ctrl + W hoặc Ctrl + F4: Đóng tab hiện tại

Ctrl + R / F5: Reload trang

Ctrl + H: Mở trang Lịch sử trong tab mới

Ctrl + J: Mở trang hiển thị list các tài nguyên đã tải xuống trong tab mới

Ctrl + U: Hiển thị mã nguồn HTML không thể chỉnh sửa của trang hiện tại


Ctrl + Super + Mũi tên lên: Max size GC

Ctrl + Super + Mũi tên xuống: Thu nhỏ kích thước GC hoặc thu về taskbar

Ctrl + Super + Mũi tên trái: Hiện thị GC với 1 nửa màn hình bên trái

Ctrl + Super + Mũi tên phải: Hiện thị GC với 1 nửa màn hình bên phải

Ctrl + Shift + B: Hiển thị hoặc ẩn thanh Dấu trang


Ctrl + -: Phóng to trang

Ctrl + -: Thu nhỏ trang

Ctrl + 0: Trả lại mọi nội dung trên trang về kích thước mặc định

Ctrl + 9: Mở tab cuối cùng

Alt/Ctrl + [1-> 9]: Di chuyển đến tab số 1->9


Alt + D hoặc Ctrl + L: Bôi đen đường link trên URL

Ctrl + E: Search với Google

Nhập tên trang web + Ctrl + Enter -> Thêm www. và .com vào tên trang web rồi mở trang web đó trong tab hiện tại

Nhập cụm từ tìm kiếm + Alt + Enter -> Mở tab mới và thực hiện tìm kiếm trên Google.


Alt + Mũi tên trái: Mở trang trước từ lịch sử duyệt web của bạn trong tab hiện tại

Alt + Mũi tên phải: Mở trang tiếp theo từ lịch sử duyệt web của bạn trong tab hiện tại

Ctrl + Shift + Delete: Xóa dữ liệu duyệt web

Shift + F5 hoặc Ctrl + Shift + r: Tải lại trang bỏ qua dữ liệu được lưu trong cache.

F: Full màn hình youtube.

7. Updating

Độc giả có biết thêm công cụ, cách tối ưu nào hay ho vui lòng comment bên dưới nhé !

Tham khảo:

  1. https://google.com
  2. https://viblo.asia/p/terminal-bot-te-nhat-va-de-su-dung-voi-terminator-va-zsh-tren-ubuntu-pDOKjkrXzPr