Cách cài đặt zsh và zsh-autosuggestions trên Ubuntu

Giới thiệu chung

Sau khoảng thời gian làm việc trên Ubuntu, có quá nhiều lệnh bạn phải nhớ, hoặc đôi khi bạn phải thực hiện đi thực hiện lại nhiều lần, giá như terminal ngoài auto-complete mà có thể suggest được lệnh cho chúng ta thì tốt biết mấy. Bài viết này giúp bạn giải quyết điều đó!

Về mình, thực ra mình là một thằng Developer khá đơn giản 😄 nên mình thích mọi thứ cũng đơn giản, rộng rãi và thoáng đãng. Cũng bởi lẽ đó nên ngay từ khi bắt đầu sử dụng Ubuntu để làm việc, mình đã yêu thích Terminal mặc định của nó; ngay từ khi nhìn cái logo đơn giản nhưng không kém phần bắt mắt.

Để làm được việc suggest lệnh thì với /bin/bash là không đủ, chúng ta cần đổi bộ shell mặc định này sang một thằng khác mạnh mẽ hơn đó là Z-Shell hay còn gọi là zsh.

Đi kèm zsh có một framework đó là oh-my-zsh support mọi thứ từ theme, command line prompts, auto suggestions, .etc. Trong bài mình sẽ hướng dẫn mọi người cài đặt zshoh-my-zsh trên Ubuntu 18.04, tích hợp plugin zsh-autosuggestions cho oh-my-zsh để terminal có thể tự động suggest lệnh cho chúng ta. Hãy cùng bắt đầu nhé!

Cài đặt zsh

Cài đặt trực tiếp zsh thông qua apt-get như sau:

$ sudo apt-get install zsh -y

Reading package lists... Done
Building dependency tree
Reading state information... Done
The following additional packages will be installed:
  zsh-common
Suggested packages:
  zsh-doc
The following NEW packages will be installed:
  zsh zsh-common
0 upgraded, 2 newly installed, 0 to remove and 126 not upgraded.
Need to get 4,066 kB of archives.

Kiểm tra xem đã cài đặt thành công chưa:

$ which zsh

/usr/bin/zsh

Trên máy mình, zsh vừa được cài đặt và store tại đường dẫn /usr/bin/zsh. Như vậy là chúng ta đã cài đặt thành công nhé, nhưng đừng vội vã sử dụng. Nếu bạn chạy nó luôn bây giờ thì cần phải config một tỉ thứ loằng ngằng bắt đầu như này:

Nếu lỡ chạy, bạn nhập q và nhấn enter để thoát cài đặt nhé. Sau khi thoát nó sẽ hiển thị như này trên terminal, bạn đừng lo lắng, cứ nhập lệnh bình thường nhé:

webee-srv1%

Cài đặt oh-my-zsh

Bây giờ chúng ta cài đặt oh-my-zsh, là một framework cho zsh sẽ giúp mình cài đặt nhiều thứ như theme, PS1 prompts:

$ sudo curl -L http://install.ohmyz.sh | sh

  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0   115    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
100  8445  100  8445    0     0  11170      0 --:--:-- --:--:-- --:--:-- 11170
Cloning Oh My Zsh...
Cloning into '/home/kimnh/.oh-my-zsh'...
remote: Enumerating objects: 1136, done.
remote: Counting objects: 100% (1136/1136), done.
remote: Compressing objects: 100% (1101/1101), done.
remote: Total 1136 (delta 22), reused 938 (delta 17), pack-reused 0
Receiving objects: 100% (1136/1136), 739.38 KiB | 1.27 MiB/s, done.
Resolving deltas: 100% (22/22), done.

Looking for an existing zsh config...
Using the Oh My Zsh template file and adding it to ~/.zshrc.

         __                                     __
  ____  / /_     ____ ___  __  __   ____  _____/ /_
 / __ \/ __ \   / __ `__ \/ / / /  /_  / / ___/ __ \
/ /_/ / / / /  / / / / / / /_/ /    / /_(__  ) / / /
\____/_/ /_/  /_/ /_/ /_/\__, /    /___/____/_/ /_/
                        /____/                       ....is now installed!


Please look over the ~/.zshrc file to select plugins, themes, and options.

p.s. Follow us on https://twitter.com/ohmyzsh

p.p.s. Get stickers, shirts, and coffee mugs at https://shop.planetargon.com/collections/oh-my-zsh

Run zsh to try it out.

Thoát terminal hiện tại và mở lại terminal mới để thưởng thức giao diện mới:

[12:13] [email protected] ~  $ zsh
➜  ~

Mình phải thực hiện chạy zsh để bắt đầu bật và dùng, để set nó làm mặc định, bạn chạy lệnh sau:

$ chsh -s $(which zsh)
Password:

Lại thực hiện khởi động lại. ZSH được tự động bật.

Cài đặt zsh-autosuggestions

Cài đặt plugin zsh-autosuggestions, giúp tự động suggetions các lệnh mà mình đã dùng:

$ git clone git://github.com/zsh-users/zsh-autosuggestions ~/.oh-my-zsh/custom/plugins/zsh-autosuggestions

Cloning into '/home/kimnh/.oh-my-zsh/custom/plugins/zsh-autosuggestions'...
remote: Enumerating objects: 2385, done.
remote: Total 2385 (delta 0), reused 0 (delta 0), pack-reused 2385
Receiving objects: 100% (2385/2385), 541.32 KiB | 844.00 KiB/s, done.
Resolving deltas: 100% (1531/1531), done.

Theo như mình đọc các bài viết tham khảo trên Viblo thì chúng ta kích hoạt plugin bằng lệnh sau:

➜  ~ plugins=(zsh-autosuggestions)

Cơ mà mình làm 4 lần trên cả 4 con server + 1 PC cũng đều không thấy plugin này nó hoạt động. Dù có khởi động lại terminal, hay là restart máy.

Cách giải quyết đó là bạn thêm dòng sau vào cuối file ~/.zshrc để kích hoạt plugin zsh-autosuggtestions lên:

➜  ~ vi ~/.zshrc
...
# Example aliases
# alias zshconfig="mate ~/.zshrc"
# alias ohmyzsh="mate ~/.oh-my-zsh"

source ~/.oh-my-zsh/custom/plugins/zsh-autosuggestions/zsh-autosuggestions.zsh

Lưu lại và khởi động lại terminal và tận hưởng:

Khi suggestion hiện ra, nếu bạn muốn dùng luôn suggestion đấy thì nhấn nút: Up Arrow (mũi tên đi lên) để chọn. Tuy nhiên cá nhân mình thấy dùng phím này khá bất tiện với các bàn phím dạng Full, Lite phổ thông bởi thường vị trí nút này ở ngoài vùng soạn thảo chính (A-Enter). Do đó, mình sẽ custom sang tổ hợp Shift + Enter để chọn suggestion. Bản thân mình thấy nó tiện hơn vì khi muốn thực thi luôn suggestion sau khi chọn thì tương đương Shift + Enter + Enter. 😄

➜  ~ vi ~/.zshrc

source ~/.oh-my-zsh/custom/plugins/zsh-autosuggestions/zsh-autosuggestions.zsh

## Add shortcut "Shift + Enter"
bindkey '^[OM' autosuggest-accept

Tổng kết

Như vậy, mình đã thực hiện xong việc hướng dẫn cài đặt zshzsh-autosuggestions để việc sử dụng terminal trong công việc bớt nhàm chán hơn. Nếu bạn không thích Terminal mặc định trên Ubuntu, bạn có thể sử dụng một số terminal sau như:

  • Terminator
  • KDE Konsole -> MÌnh thích thằng này vì nó đơn giản giống Terminal, nhưng có thêm cả Split view:
sudo apt-get install konsole

Ở chế độ Split View của Konsole sẽ như này, tất nhiên bạn có thể chia dọc màn hình:

P/S

P/S: Nếu bạn đã thực hiện đầy đủ các bước trên nhưng khi nhấn khi mở Terminal của Ubuntu mà vẫn không thấy giao diện của zsh được tự động kích hoạt thì hãy làm thêm bước sau cho Terminal:

  • Mở Terminal (Ctrl+Alt+T)
  • Ediit > Preferences, chọn tab Command ở bên phải
  • Tích chọn Run a custom command instead of my shell, điền /usr/bin/zsh vào ô Custom Command phía ngay dưới
  • Nhấn Close rồi tắt bỏ Terminal và mở lại là sẽ được

Nếu muốn cài đặt Konsole hay một cái khác làm terminal mặc đinh, bạn chạy lệnh sau trên Ubuntu:

➜  ~ sudo update-alternatives --config x-terminal-emulator 
There are 6 choices for the alternative x-terminal-emulator (providing /usr/bin/x-terminal-emulator).

  Selection    Path                             Priority   Status
------------------------------------------------------------
* 0            /usr/bin/gnome-terminal.wrapper   40        auto mode
  1            /usr/bin/gnome-terminal.wrapper   40        manual mode
  2            /usr/bin/koi8rxterm               20        manual mode
  3            /usr/bin/konsole                  40        manual mode
  4            /usr/bin/lxterm                   30        manual mode
  5            /usr/bin/uxterm                   20        manual mode
  6            /usr/bin/xterm                    20        manual mode

Press <enter> to keep the current choice[*], or type selection number: 3

Chọn terminal bằng cách nhập các số tương ứng. Của mình Konsole tương ứng là 3.

Hy vọng bài viết này sẽ là tiền đề để các bạn dần biết cách tùy biến Terminal của mình sao cho phù hợp. Ví dụ như cài thêm plugin zsh-syntax-highlighting nữa chẳng hạn. 🤔

Chúc các bạn thành công!

New update

Phần update này mình xin tổng hợp thêm một vài comment hay ho từ cộng đồng anh em Viblo đã suggest phía dưới. Rất cảm ơn mọi người vì sự chia sẻ:

bạn nào sau khi chạy chsh -s $(which zsh) rồi khởi động lại terminal mà vẫn shell cũ thì logout rồi login lại máy là ok nhé

A đã từ bỏ zsh và dùng fish

zsh mỗi lần update version là xóa hết history của terminal

Em thì trước có dùng Oh My Zsh, xong sau này đổi sang những cái alternative nhẹ nhanh hơn như là prezto hay zimfw. Đặc biệt là zimfw khởi động chỉ mất một nửa thời gian so với Oh My Zsh. Mặc định khi cài zim là đã có sẵn syntax highlight, suggestion, auto completion đầy đủ và việc cài/gỡ module rất đơn giản. Nên mọi người có thể thử dùng và cảm nhận nhé 😄


All Rights Reserved