กล่องเครื่องมือเทอร์มินัลที่ทันสมัย

May 10 2023
เครื่องมือเทอร์มินัล เชลล์ และบรรทัดคำสั่งกำหนดมาตรฐานในปี 2566 นักพัฒนาทั้งหมดใช้เทอร์มินัล สำหรับบางคน เวิร์กโฟลว์ทั้งหมดของพวกเขาคือเทอร์มินัล โพสต์นี้จะแนะนำกล่องเครื่องมือเทอร์มินัล Hypermodern — เครื่องมือเทอร์มินัล เชลล์ และบรรทัดคำสั่งที่กำหนดมาตรฐานในปี 2023 คิตตี้เป็นเทอร์มินัลอีมูเลเตอร์ คิตตี้เป็นเทอร์มินัลอีมูเลเตอร์ — เป็นทางเลือกแทนเทอร์มินัล GNOME , Alacritty หรือ Windows Terminal

เครื่องมือเทอร์มินัล เชลล์ และบรรทัดคำสั่งกำหนดมาตรฐานในปี 2566

สร้างด้วยการแพร่กระจายที่เสถียร ข้อความแจ้ง: 'หน้าจอเทอร์มินอลคอมพิวเตอร์:0.3, การพิมพ์โปรแกรมเชลล์ไปยังหน้าจอเทอร์มินัล:0.3, รูปแบบการเรียกเก็บเงินของผู้ชาย, สดใส, สดใส' เมล็ดพันธุ์: 42.

นักพัฒนาทั้งหมดใช้เทอร์มินัล สำหรับบางคน เวิร์กโฟลว์ทั้งหมดของพวกเขาคือเทอร์มินัล

โพสต์นี้แนะนำHypermodern Terminal Toolbox — เครื่องมือเทอร์มินัล เชลล์ และบรรทัดคำสั่งที่กำหนดมาตรฐานในปี 2023

คิตตี้เป็น Terminal Emulator

คิตตี้เป็นโปรแกรมจำลองเทอร์มินัลซึ่งเป็นทางเลือกแทนเทอร์มินัล GNOME, Alacritty หรือ Windows Terminal

เบราว์เซอร์ธีมคิตตี้ในตัว เข้าถึงได้โดยเรียกใช้ `$ kitty +kitten themes`

โปรแกรมจำลองเทอร์มินัลคือโปรแกรมที่รันเทอร์มินัลของคุณ ระบบปฏิบัติการ (OS) ที่แตกต่างกันมีเทอร์มินัลอีมูเลเตอร์ที่แตกต่างกัน ไม่ว่าจะเป็นส่วนหนึ่งของระบบปฏิบัติการหรือเป็นโปรแกรมของบุคคลที่สามที่ติดตั้งได้

Kitty เป็นโปรแกรมจำลองเทอร์มินัลของบุคคลที่สามที่เร่งด้วย GPU Kitty ทำงานรวดเร็ว ปรับแต่งได้สูง และเป็นโอเพ่นซอร์ส

การกำหนดค่าเสร็จสิ้นโดยใช้kitty.confไฟล์ข้อความ:

# $XDG_CONFIG_HOME/kitty/kitty.conf

font_family      Operator Mono Book
font_size 14.0
scrollback_lines 2000

เคล็ดลับ — เมื่อเปลี่ยนการตั้งค่าของ Kitty ในkitty.confคุณจะต้องรีสตาร์ทโปรแกรม Kitty ทั้งหมด

Zsh & Prezto เป็นเชลล์

Zshเป็นเชลล์ที่เขียนด้วยภาษา Cซึ่งเป็นทางเลือกแทน Bash หรือ Fish

เชลล์เป็นส่วนต่อประสานข้อความของระบบปฏิบัติการที่ทำงานภายในเทอร์มินัล คำสั่งเชลล์ทำงานเช่นการสร้างไฟล์และเรียกใช้โปรแกรม

Zsh เป็นเชลล์โอเพ่นซอร์สที่มีฟังก์ชันการทำงานและการปรับแต่งได้มากกว่า Bash

Zsh ได้รับการกำหนดค่าโดยใช้.zshrcไฟล์:

# ~/.zshrc

HISTSIZE=9999
alias brew='arch -x86_64 brew'
export PATH="$HOME/dotfiles/scripts:$PATH"

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

Prezto ได้รับการกำหนดค่าโดยใช้.zpreztorcไฟล์:

# ~/.zpreztorc

zstyle ':prezto:load' pmodule \
  'environment' \
  'terminal' \
  'editor' \
  'history' \
  'directory' \
  'spectrum' \
  'utility' \
  'completion' \
  'git' \
  'syntax-highlighting' \
  'history-substring-search' \
  'autosuggestions' \
  'prompt'

Neovim เป็นโปรแกรมแก้ไขข้อความ

Neovimเป็นโปรแกรมแก้ไขข้อความที่เขียนด้วย Luaซึ่งเป็นทางเลือกแทน Vim, Nano หรือ Emacs

Neovim เป็นผู้สืบทอดยอดนิยมของ Vim ระบบนิเวศทั้งหมดของปลั๊กอิน Vim ที่เขียนด้วย Vimscript ทำงานใน Neovim นอกเหนือจากระบบนิเวศที่พลุกพล่านของปลั๊กอิน Neovim ที่เขียนด้วย Lua

Neovim ที่ได้รับการกำหนดค่าอย่างดีมีเซิร์ฟเวอร์ภาษาสำหรับการเติมข้อความอัตโนมัติ (เซิร์ฟเวอร์ภาษาเดียวกับที่มีอยู่ใน VS Code) การเน้นไวยากรณ์ด้วย Treesitter และ Telescope สำหรับการค้นหาผ่านรายการประเภทต่างๆ

การกำหนดค่า Neovim เสร็จสิ้นใน Lua — เริ่มต้นด้วยinit.luaไฟล์:

-- $XDG_CONFIG_HOME/nvim/init.lua

--  set size of a tab to be 4
--  vim command line `:set tabstop=2`
--  vimscript `set tabstop=2`
vim.opt.set.tabstop = 2

--  run vimscript in lua
vim.cmd([[set tabstop=2]])

--  set variable
--  vimscript `let g:zoom#statustext = 'Z'`
vim.g['zoom#statustext'] = 'Z'

เคล็ดลับ — สมัครสมาชิกสัปดาห์นี้ใน Neovimเพื่อรับจดหมายข่าวรายสัปดาห์ที่ครอบคลุมระบบนิเวศ Neovim ที่พลุกพล่าน

Tmux สำหรับเทอร์มินัลหลายเครื่อง

Tmuxเป็นเทอร์มินัลมัลติเพล็กเซอร์ที่เขียนด้วยภาษา Cซึ่งเป็นทางเลือกแทน Screen หรือการรันเทอร์มินัลในหลายหน้าต่าง

เทอร์มินัลมัลติเพล็กเซอร์ช่วยให้คุณจัดการเซสชันเทอร์มินัลหลายรายการได้ภายในหน้าต่างเดียว

Tmux ให้เซสชันแบบถาวร การจัดการหน้าต่างและบานหน้าต่างด้วยการผูกคีย์ที่ปรับแต่งได้

Tmux ใช้ลำดับชั้นของแนวคิดในการจัดการเทอร์มินัลหลายเครื่อง:

  • บานหน้าต่างเป็นพื้นที่สี่เหลี่ยมภายในหน้าต่าง แต่ละบานหน้าต่างแสดงเซสชันของเทอร์มินัลแยกกัน
  • หน้าต่างคือคอนเทนเนอร์แบบเต็มหน้าจอที่มีบานหน้าต่างอย่างน้อยหนึ่งบาน
  • เซสชันคือชุดของหนึ่งหรือหลายหน้าต่าง

คุณสามารถเริ่มเซสชัน Tmux ใหม่ด้วยtmux new:

#  create a session named `work`
$ tmux new -s work

คุณสามารถเชื่อมต่อกับเซสชัน Tmux ที่กำลังทำงานอยู่ใหม่ได้ด้วยtmux attach:

#  reattach to last session
$ tmux attach

#  reattach the session named `work`
$ tmux attach -t work

  • Ctrl-b c: สร้างหน้าต่างใหม่
  • Ctrl-b n: สลับไปยังหน้าต่างถัดไป
  • Ctrl-b p: สลับไปยังหน้าต่างก่อนหน้า

# ~/.tmux.conf

set -g default-terminal "screen-256color"
setw -g mode-keys vi
set -g status-left "#[fg=green,bold]Session: #S #[fg=white,bold]| #[fg=yellow,bold]Window: #W"
set-option -g prefix C-a

เอ็นเตอร์ไพรส์สำหรับพริตตี้

Starshipเป็นเชลล์พรอมต์ที่เขียนด้วย Rustซึ่งเป็นทางเลือกแทน Powerlevel10k หรือ Pure

พรอมต์คือส่วนที่ปรับแต่งได้ของบรรทัดคำสั่งที่มีบริบท เช่น ไดเร็กทอรีปัจจุบันหรือสาขา Git

Starship มอบการแจ้งเตือนที่รวดเร็วและปรับแต่งได้ การกำหนดค่าเสร็จสิ้นโดยใช้starship.tomlไฟล์:

# $XDG_CONFIG_HOME/starship.toml

[username]
disabled = true

[hostname]
disabled = true

[git_status]
ahead = "↑"
behind = "↓"

[directory]
truncation_length = 2

Ripgrep สำหรับค้นหาข้อความ

Ripgrepเป็นตัวค้นหาไฟล์ข้อความที่เขียนด้วยภาษา Rustซึ่งเป็นทางเลือกแทน grep หรือ find

คุณลักษณะหลักของ Ripgrep คือความเร็ว ซึ่งเร็วกว่าเครื่องมือทางเลือกอื่น

การใช้งานพื้นฐานของ Ripgrep คือการค้นหารูปแบบในไดเร็กทอรี:

$ rg 'pattern' ~/project

alias g='rg -l --hidden --smart-case --line-buffered'

$ g 'some-pattern' some/directory

fzf สำหรับการค้นหาแบบคลุมเครือ

fzfเป็นตัวค้นหาแบบคลุมเครือที่เขียนด้วยภาษา Goซึ่งเป็นทางเลือกแทนการค้นหาแบบกำหนดขอบเขต

fzf ช่วยให้คุณค้นหาโดยใช้อัลกอริทึมการค้นหาแบบคลุมเครือที่จับคู่รูปแบบ regex กับข้อมูลที่ไม่สมบูรณ์ ซึ่งจะทำให้ผลการค้นหาปรากฏขึ้นขณะที่คุณพิมพ์ แม้ว่าจะสะกดผิดก็ตาม

fzf สามารถเรียกใช้เป็นโปรแกรมบรรทัดคำสั่ง:

$ fzf

#  fuzzy search all files in the `work` directory
$ cat ~/work/** <TAB>

fzf สามารถใช้กับแบ็คเอนด์การค้นหาต่างๆ เช่น find, grep หรือ Ripgrep

เคล็ดลับ — ใช้ Ripgrep เป็นแบ็กเอนด์ fzf โดยตั้งค่าFZF_DEFAULT_COMMANDตัวแปรสภาพแวดล้อมexport FZF_DEFAULT_COMMAND='rg --files --hidden'

Exa สำหรับรายชื่อไฟล์

Exaเป็นโปรแกรมแสดงรายการไฟล์ที่เขียนขึ้นใน Rustซึ่งเป็นทางเลือกแทน ls และ tree

โปรแกรมแสดงรายการไฟล์จะแสดงรายการไฟล์และไดเร็กทอรี Exa นำเสนอคุณสมบัติต่างๆ เช่น ไอคอน การรวม Git และตัวเลือกการเรียงลำดับที่หลากหลาย

Exa มีมุมมองพื้นฐานที่แตกต่างกันเล็กน้อย:

#  list as a grid
$ exa -G
bp-historical-data  cities  data-science-south-data  predict-newspapers  README.md  titanic

#  list each item on one line
$ exa -1
bp-historical-data
cities
data-science-south-data
predict-newspapers
README.md
titanic

#  list as a table - same as `ls -l`
$ exa -l
drwxr-xr-x   - adam 26 Apr 20:20 bp-historical-data
drwxr-xr-x   - adam 14 Feb 16:42 cities
drwxr-xr-x   - adam 26 Apr 20:25 data-science-south-data
drwxr-xr-x   - adam 28 Apr 14:52 predict-newspapers
.rw-r--r-- 124 adam 29 Apr 15:20 README.md
drwxr-xr-x   - adam 26 Apr 17:31 titanic

$ exa --tree --level=2
├── bp-historical-data
│  ├── __pycache__
│  ├── dashboard.py
│  ├── data
│  ├── notebooks
│  ├── README.md
│  └── requirements.txt
├── README.md
└── titanic
   ├── data
   ├── requirements.txt
   ├── titanic.ipynb
   ├── titanic.md
   └── titanic.py

นามแฝงของฉันสำหรับ Exa คือ:

alias ls = 'exa --long --icons --no-permissions --no-user --git --time-style long-iso --time=modified --group-directories-first -a' 
alias tree = 'exa --tree'

Bat สำหรับการดูไฟล์

Batเป็นโปรแกรมดูไฟล์ที่เขียนด้วย Rustซึ่งเป็นทางเลือกแทน cat

โปรแกรมดูไฟล์คือโปรแกรมที่แสดงเนื้อหาของไฟล์

Bat มีฟังก์ชันการทำงาน เช่น การเน้นไวยากรณ์ การรวม Git และการเพจไฟล์อัตโนมัติ

Bat ใช้โดยชี้โปรแกรมไปที่ไฟล์ข้อความ:

$ bat path/to/file

เศร้าสำหรับการแทนที่ข้อความ

Sadเป็นตัวแก้ไขสตรีมที่เขียนด้วย Rustซึ่งเป็นทางเลือกแทน sed หรือ awk

ตัวแก้ไขสตรีมดำเนินการค้นหาและแทนที่การดำเนินการกับสตรีมข้อความหรือไฟล์ข้อความ

Sad (Space Age seD) แสดงสิ่งทดแทนที่เสนอก่อนที่จะนำไปใช้ ช่วยให้คุณตรวจสอบและเลือกสิ่งทดแทนที่จะทำก่อนที่จะยอมรับ

Sad ใช้เป็นโปรแกรมบรรทัดคำสั่ง:

$ sad '<pattern>' '<replacement>'

$ cat README.md
# Data Science South Projects

Example projects for the courses at [Data Science South](https://www.datasciencesouth.com/).

$ exa -1 | sad "courses" "modules"      

$ cat README.md
# Data Science South Projects

Example projects for the modules at [Data Science South](https://www.datasciencesouth.com/).

jq สำหรับการทำงานกับ JSON

jqเป็นโปรเซสเซอร์ JSON ที่เขียนด้วยภาษา Cซึ่งเป็นทางเลือกแทน fx, jp หรือประมวลผล JSON ในภาษาเช่น Python

jq ช่วยให้คุณสามารถกรอง แปลง และจัดการข้อมูล JSON ซึ่งมีประโยชน์สำหรับการทำงานกับการตอบสนองของ API ไฟล์การกำหนดค่า และที่เก็บข้อมูล

แนวคิดหลักใน jq คือตัวกรอง ซึ่งใช้กับอินพุต JSON:

$ jq 'filter_expression' input.json

  • .key- แยกค่าของคีย์
  • .[]- แยกค่าทั้งหมดจากอาร์เรย์
  • .[2]- แยกค่าที่สามออกจากอาร์เรย์

#  extract the `name` key
$ echo '{"name": "Alice", "data": [6, 12]}' | jq '.name'
"Alice"

#  extract the second element from the `data` list
$ echo '{"name": "Alice", "data": [6, 12]}' | jq '.data[1]'
12

zoxide สำหรับการนำทาง

zoxideเป็นโปรแกรมอรรถประโยชน์การนำทางเทอร์มินัลที่เขียนด้วยภาษา Rustซึ่งเป็นทางเลือกแทน cd, pushd และ popd

zoxide ข้ามไปยังไดเร็กทอรีจากประวัติการเยี่ยมชมของคุณ โดยจะกำหนดคะแนนให้กับแต่ละไดเร็กทอรีตามความถี่และล่าสุดที่มีการเข้าชม

zoxide ใช้เป็นโปรแกรมบรรทัดคำสั่ง:

#  move to a folder that best matches `code`
$ z code

Tig สำหรับการดูประวัติ Git

Tigเป็นโปรแกรมดูประวัติ Git ที่เขียนด้วยภาษา Cซึ่งเป็นทางเลือกแทนการใช้ Git CLI หรือ Lazygit

Tig จัดเตรียมส่วนต่อประสานรหัสสีที่นำทางได้สำหรับการเรียกดูประวัติการคอมมิต Git ของคุณ ช่วยให้ค้นหาคอมมิชชัน ดูกราฟคอมมิชชัน และแสดงไฟล์ ณ เวลาต่างๆ ได้

Tig ทำงานเป็นโปรแกรมบรรทัดคำสั่ง:

$ tig

direnv สำหรับการจัดการตัวแปรสภาพแวดล้อม

direnvโหลดและยกเลิกการโหลดตัวแปรสภาพแวดล้อมเชลล์ - เขียนใน Go ซึ่งเป็นทางเลือกแทนการใช้$ source .env.

direnv โหลดและยกเลิกการโหลดตัวแปรสภาพแวดล้อมโดยอัตโนมัติเมื่อคุณนำทางระหว่างไดเร็กทอรีโครงการต่างๆ

การใช้ direnv หลีกเลี่ยงการโหลดตัวแปรสภาพแวดล้อมด้วยตนเอง และป้องกันตัวแปรสภาพแวดล้อมจากโปรเจ็กต์หนึ่งที่ตั้งค่าไว้ในอีกโปรเจ็กต์หนึ่ง

direnv ใช้.envrcไฟล์เพื่อเก็บตัวแปรเฉพาะสำหรับโครงการของคุณ ซึ่งรันเป็นเชลล์สคริปต์:

# .envrc

export PROJECT_NAME="alpha"

$ direnv allow .

แนวทางปฏิบัติทั่วไปคือการเลือกที่จะโหลดความลับหรือส่วนตัว.envrc:

source_env_if_exists .envrc.secret

เคล็ดลับ — ใช้direnv exec <path> <command>เพื่อเรียกใช้คำสั่งโดยโหลดสภาพแวดล้อมสำหรับไดเร็กทอรีเฉพาะโดยไม่ต้องไปที่ไดเร็กทอรีนั้น

Lazydocker สำหรับนักเทียบท่า

Lazydockerจัดการคอนเทนเนอร์และอิมเมจของ Dockerซึ่งเขียนด้วย Go ซึ่งเป็นทางเลือกแทน Docker Desktop หรือ Docker CLI

Lazydocker ทำให้ง่ายต่อการดู เริ่ม หยุด และลบคอนเทนเนอร์และรูปภาพผ่าน UI ของเทอร์มินัล นอกจากนี้ยังสามารถให้ภาพรวมตามเวลาจริงของสถานะคอนเทนเนอร์ บันทึก และการใช้ทรัพยากร

Lazydocker ใช้เป็นโปรแกรมบรรทัดคำสั่ง:

$ lazydocker

Markserv สำหรับการดูตัวอย่าง Markdown

Markservแสดงไฟล์ Markdown ในเบราว์เซอร์ — เขียนใน Node.js ซึ่งเป็นทางเลือกแทน Grip หรือ Markdown Preview

Markserv แสดงผล Markdown เป็น HTML แบบเรียลไทม์ โดยจะแสดงการเปลี่ยนแปลงโดยอัตโนมัติเมื่อคุณดำเนินการ

Markserv รองรับ Markdown ที่ปรุงรสด้วย GitHub ซึ่งหมายความว่าจะจัดรูปแบบบล็อคโค้ดและตารางเหมือนกับ Github Markserv นั้นยอดเยี่ยมสำหรับการดูตัวอย่างREADME.mdไฟล์โดยไม่ต้องพุชไปที่ Github

ในการเริ่มเซิร์ฟเวอร์ Markserv บนพอร์ต 8010:

$ markserv -p 8010

Ngrok สำหรับการแบ่งปันเซิร์ฟเวอร์ภายในเครื่อง

ngrokสร้างอุโมงค์ไปยังเซิร์ฟเวอร์ภายในของคุณ — ซึ่งเขียนด้วยภาษา Go ซึ่งเป็นทางเลือกแทน Serveo, LocalTunnel หรือ PageKite

ngrok เปิดเผยเซิร์ฟเวอร์ภายในที่อยู่เบื้องหลัง NAT หรือไฟร์วอลล์ไปยังอินเทอร์เน็ต สิ่งนี้มีประโยชน์สำหรับการแบ่งปันเซิร์ฟเวอร์การพัฒนากับทีมของคุณ

คุณสามารถเริ่มอุโมงค์ไปยังพอร์ต 8000 ได้โดยเรียกใช้:

$ ngrok http 8000

สรุป

กล่องเครื่องมือเทอร์มินัลไฮเปอร์โมเดิร์นคือ:

  • คิตตี้สำหรับ GPU ที่เร่งความเร็ว เทอร์มินัลที่ปรับแต่งได้สูง
  • Zshสำหรับเชลล์ & Preztoสำหรับการกำหนดค่า Zsh
  • Neovimเป็นโปรแกรมแก้ไขข้อความ
  • Tmuxสำหรับจัดการเทอร์มินัลหลายเครื่อง
  • เอ็นเตอร์ไพรส์สำหรับพรอมต์สวย
  • Ripgrepสำหรับค้นหาไฟล์ข้อความ
  • fzfสำหรับการค้นหาแบบคลุมเครือ
  • Exaสำหรับรายชื่อไฟล์
  • แบตสำหรับดูไฟล์
  • เศร้าสำหรับการค้นหาและแทนที่ในไฟล์ข้อความ
  • jqสำหรับการทำงานกับ JSON
  • zoxideสำหรับการนำทาง
  • Tigสำหรับการดูประวัติ Git
  • direnvสำหรับการจัดการตัวแปรสภาพแวดล้อม
  • Lazydockerสำหรับนักเทียบท่า
  • Markservสำหรับดูตัวอย่าง Markdown
  • ngrokสำหรับการเปิดเผยเซิร์ฟเวอร์ท้องถิ่นกับอินเทอร์เน็ต

เรียนรู้ทีละเครื่องมืออย่างต่อเนื่องเพื่อเป็นเทอร์มินัลมาสเตอร์

เผยแพร่ครั้งแรกที่https://www.datasciencesouth.com

เพิ่มระดับการเข้ารหัส

ขอบคุณที่เป็นส่วนหนึ่งของชุมชนของเรา! ก่อนที่คุณจะไป:

  • ปรบมือให้กับเรื่องราวและติดตามผู้เขียน
  • ดูเนื้อหาเพิ่มเติมในสิ่งพิมพ์ Level Up Coding
  • หลักสูตรสัมภาษณ์การเข้ารหัสฟรี ⇒ ดูหลักสูตร
  • ติดตามเรา: Twitter | LinkedIn | จดหมายข่าว