•10 min read

Tạo một thiết lập Terminal hiện đại

Tạo một thiết lập Terminal hiện đại

Tôi đã tinh chỉnh terminal của mình trong nhiều năm. Có những giai đoạn tôi dành nhiều thời gian cấu hình prompt hơn là thực sự viết code (cái bẫy kinh điển). Nhưng sau nhiều lần lặp lại, tôi đã có một thiết lập nhanh, hữu ích và không yêu cầu tôi phải nhớ cú pháp cấu hình phức tạp mỗi khi tôi dùng một máy mới.

Audio Briefing
0:00 / 0:00

Nền tảng

Màu 24-bit. Nếu terminal của bạn vẫn trông như terminal những năm 1980, hãy sửa lỗi này trước. Hầu hết các trình giả lập hiện đại đều hỗ trợ nó ngay lập tức, và sự khác biệt sẽ rõ rệt ngay khi bạn mở một diff có màu hoặc một output lint.

Cuộn vô hạn. Không có gì tệ hơn một lệnh phức tạp bị cuộn ra khỏi màn hình ngay khi bạn cần tham chiếu nó. Hãy đặt cuộn của bạn thành không giới hạn hoặc một số rất lớn.

Tự động hoàn thành. Fish shell làm điều này một cách tự nhiên. Với Zsh bạn cần một plugin. Dù bằng cách nào, một khi bạn đã quen với việc tab hoàn thành các nhánh git và đường dẫn tệp, việc quay lại một shell trần trụi sẽ cảm thấy bị hỏng.

Chọn một trình giả lập

iTerm2 trên macOS, Kitty hoặc GNOME Terminal trên Linux. Tăng tốc GPU quan trọng hơn bạn nghĩ: nó giữ cho terminal phản hồi nhanh khi bạn đang chạy thứ gì đó phun log với tốc độ cao.

Thay đổi Shell của bạn

Bash mặc định tốt nhưng bị hạn chế. Zsh với một framework hoặc Fish ngay lập tức cung cấp cho bạn tính năng tự động hoàn thành, chủ đề và quản lý plugin mà không cần phải đấu tranh với các quy ước .bashrc từ năm 1999.

Thiết lập một Prompt

Starship là lựa chọn của tôi. Nó hoạt động trên nhiều shell, hiển thị trạng thái Git, phiên bản Python, phiên bản Node và nó nhanh. Không có độ trễ đáng kể khi hiển thị.

Advertisement

Nơi mọi người gặp khó khăn

Cái hố thỏ dotfile là có thật. Bạn sẽ tìm thấy một chủ đề prompt thú vị, sau đó là một plugin phụ thuộc vào một plugin khác, và đột nhiên bạn đang đọc một tệp .zshrc dài 200 dòng để tìm hiểu tại sao git status lại mất hai giây.

Quy tắc của tôi: nếu một tùy chỉnh terminal mất hơn 10 phút để cấu hình, thì nó phải tiết kiệm cho tôi 10 phút mỗi tuần, nếu không thì nó sẽ bị loại bỏ. Theo tiêu chuẩn đó, hầu hết các chủ đề prompt và một nửa số plugin Zsh phổ biến đều không đạt yêu cầu.

Những gì thực sự còn lại

  1. Một prompt Starship tối giản hiển thị nhánh Git, phiên bản Python và mã thoát.
  2. zsh-autosuggestions: làm mờ các lệnh đã sử dụng gần đây khi bạn gõ. Tiết kiệm nhiều lần gõ phím hơn bất cứ thứ gì khác tôi đã cài đặt.
  3. zsh-syntax-highlighting: văn bản màu đỏ cho các lệnh không hợp lệ trước khi bạn nhấn enter. Liên tục bắt lỗi chính tả.
  4. Một vài alias mà tôi thực sự sử dụng. Không phải là một đống alias 50 dòng từ một bài đăng trên blog mà tôi đã sao chép một lần và không bao giờ chỉnh sửa.

Thiết lập của bạn nên phản ánh cách bạn thực sự làm việc, chứ không phải cách một bài đăng trên blog nói rằng bạn nên làm việc. Bắt đầu với ba điều trên, sử dụng chúng trong một tuần, sau đó quyết định xem còn thiếu gì.

Loạt bài về Terminal
Công cụ phát triển miễn phí: AI CLI & Trình dọn dẹp đầu ra Terminal

Chia sẻ đầu ra terminal, nhật ký trình biên dịch hoặc dấu vết AI CLI trong các vấn đề GitHub hoặc tài liệu? Sử dụng AI CLI & Trình dọn dẹp đầu ra Terminal miễn phí của chúng tôi để loại bỏ các mã thoát ANSI, ký tự nhắc và dấu thời gian ngay lập tức.

Tìm hiểu sâu: Cơ chế cốt lõi

Khi chúng ta nhìn sâu hơn, các cơ chế cơ bản cho thấy một sự tương tác phức tạp của các hệ thống. Trong phát triển hiện đại, việc hiểu các cơ chế này là điều phân biệt một người mới với một chuyên gia.

Hãy xem xét ví dụ thực tế này:

// A comprehensive example demonstrating advanced patterns
class ServiceManager {
  constructor() {
    this.services = new Map();
    this.initialized = false;
  }

  register(name, service) {
    if (this.services.has(name)) {
      throw new Error(`Service ${name} already registered`);
    }
    this.services.set(name, service);
  }

  async initializeAll() {
    this.initialized = true;
    for (const [name, service] of this.services) {
      if (typeof service.init === 'function') {
        await service.init();
      }
    }
  }

  get(name) {
    if (!this.initialized) {
      console.warn('Accessing services before initialization');
    }
    return this.services.get(name);
  }
}

Mô hình này đảm bảo rằng kiến trúc của chúng ta vẫn có thể mở rộng và mạnh mẽ ngay cả khi các yêu cầu kinh doanh thay đổi. Đây là một cách tiếp cận cơ bản mang lại lợi ích trong các ứng dụng quy mô lớn.

Ứng dụng thực tế và mở rộng quy mô

Việc triển khai điều này trong môi trường sản xuất đặt ra một loạt thách thức mới. Chúng ta phải tính đến tính đồng thời, quản lý trạng thái và rò rỉ bộ nhớ.

Ví dụ, khi xử lý các hệ thống thông lượng cao, mọi tối ưu hóa nhỏ đều có giá trị. Chúng ta thường dựa vào các công cụ phân tích hiệu suất để xác định các nút thắt cổ chai không rõ ràng trong quá trình phát triển cục bộ.

Sơ đồ trên minh họa một chiến lược triển khai điển hình, trong đó ứng dụng của chúng ta mở rộng theo chiều ngang.

Advertisement

Kiểm tra sự hiểu biết của bạn

Nhật ký Terminal sạch cho LLM & Tài liệu

Khi chia sẻ đầu ra terminal vào các lời nhắc trò chuyện AI, phiếu lỗi hoặc tài liệu, các chuỗi màu thoát ANSI, dấu thời gian và lời nhắc shell thường làm hỏng định dạng. Sử dụng công cụ dọn dẹp tương tác của chúng tôi bên dưới để loại bỏ các mã ANSI, số dòng và nhiễu shell ngay lập tức:

Bạn cũng có thể thích

Câu hỏi thường gặp

Oh-My-Zsh thực thi hàng trăm script shell đồng bộ trên mỗi lần vẽ lại prompt, gây ra độ trễ đáng kể 200-500ms trong các kho Git lớn. Starship được biên dịch bằng Rust, hiển thị không đồng bộ song song với độ trễ dưới 10ms và chia sẻ cấu hình giống hệt nhau trên các shell Bash, Zsh và Fish.
Tăng tốc GPU chuyển việc bố trí văn bản glyph và vẽ lại khung nhìn sang đường ống đồ họa thông qua Metal, Vulkan hoặc OpenGL. Điều này loại bỏ độ trễ terminal và giảm khung hình khi truyền các đầu ra thử nghiệm lớn hoặc nhật ký xây dựng, đồng thời giữ độ trễ nhập bàn phím dưới 5ms.
Sử dụng các trình quản lý dotfile khai báo như chezmoi hoặc duy trì một kho git trần trong $HOME với một alias (dotfiles='git --git-dir=$HOME/.cfg/ --work-tree=$HOME'). Điều này loại bỏ các script symlink bên ngoài và cho phép đồng bộ hóa git push/pull đơn giản trên các máy.
Zsh vẫn là tiêu chuẩn công nghiệp do tuân thủ POSIX, đảm bảo rằng các đoạn mã bash được sao chép và các script CI của doanh nghiệp thực thi mà không cần sửa đổi. Fish cung cấp tính năng tự động hoàn thành và tô sáng cú pháp nhanh nhất ngay lập tức, nhưng yêu cầu chạy bash một cách rõ ràng cho các script shell không phải POSIX.
Các kỹ sư được hưởng lợi nhiều nhất từ các công cụ thay thế dựa trên Rust: eza (thay thế ls bằng các dấu trạng thái git và chế độ xem cây), bat (thay thế cat bằng tô sáng cú pháp và số dòng), ripgrep (tìm kiếm regex cực nhanh thay thế grep), và fzf (tìm kiếm lịch sử shell tương tác mờ).
Share this article:

Stay Updated

Get the latest posts delivered straight to your inbox.

Free Developer Utilities

Free In-Browser Developer Tools

Clean AI CLI logs, build cron expressions, decode JWTs, and calculate chmod permissions offline.

Explore Tools
Advertisement
Tại sao pipe đôi khi bị "kẹt": buffering
terminal

Tại sao pipe đôi khi bị "kẹt": buffering

Lần đầu tiên terminal của tôi bị treo giữa pipeline, tôi đã mất một giờ để gỡ lỗi sai vấn đề. Đây là những gì thực sự đã xảy ra và cách khắc phục nó trong vài giây.

Read more