1 điểm bởi GN⁺ 4 giờ trước | 1 bình luận | Chia sẻ qua WhatsApp
  • Các chức năng mặc định của Emacs có nhiều công cụ có thể dùng mà không cần gói bổ sung nhưng ít được biết đến, và ngay cả trên Emacs hiện đại 28.1+ vẫn liên tục có những tính năng thực dụng có thể học trong chưa đến 5 phút
  • Các tác vụ hằng ngày như mở tệp, thu thập URL, so sánh và theo dõi thay đổi phần lớn có thể xử lý chỉ với find-file, dired, ffap-menu, compare-windows, highlight-changes-mode
  • Tệp sao lưu và tệp quản lý phiên bản có thể được gộp vào một mô hình công việc duy nhất là so sánh với phiên bản trước nếu mở rộng nhóm lệnh vc-diff
  • Các tác vụ chỉnh sửa, điều hướng và hiển thị được cải thiện nhanh chóng bằng những tính năng đã tích hợp sẵn như nhóm apropos, find-function-on-key, kmacro-edit-lossage, subword-mode, keymap thao tác ảnh
  • Takeaway cốt lõi là dù thư mục lisp của Emacs không lớn, vẫn luôn còn dư địa để mở rộng quy trình làm việc chỉ với chức năng tích hợp sẵn

Tổng quan và phạm vi

  • Các tính năng của Emacs có vấn đề về khả năng được khám phá, và bài viết này là một nỗ lực giảm bớt vấn đề đó bằng cách lần lượt giới thiệu các tính năng tích hợp hữu ích nhưng ít được biết đến
  • Đây là bài thứ ba nói về các tính năng hữu ích nhưng ít nổi bật được tích hợp sẵn trong Emacs
  • “Ít được biết đến” là đánh giá mang tính chủ quan, đại khái chỉ những tính năng trong 20 năm qua khi theo dõi thảo luận Emacs trên mạng, tác giả thấy được nhắc đến ít hơn năm lần hoặc chưa từng thấy
  • Người mới dùng Emacs tốt hơn không nên bắt đầu từ đây; danh sách này sẽ hữu ích hơn sau khi đã quen với các khái niệm cơ bản và những gói thường được khuyến nghị
  • Tiêu chí là chỉ dùng Emacs nguyên bản không cần gói, không có đường cong học tập quá dốc, loại trừ các tính năng mang tính vui đùa và những tính năng thường được nhắc đến, đồng thời giả định môi trường Emacs hiện đại 28.1+

Từ điển khi rê chuột: M-x dictionary-tooltip-mode

  • Khi bật dictionary-tooltip-mode, bạn có thể xem nghĩa bằng tooltip khi rê chuột lên một từ
  • tooltip-mode cũng phải được bật, nhưng mặc định nó đã được kích hoạt
  • Nếu đã thiết lập từ điển cục bộ thì nó sẽ được ưu tiên dùng trước; từ điển của Emacs thường có thể tìm được cả thuật ngữ hiện đại và tiếng lóng thông qua Wiktionary

Wildcard trong find-filedired

  • Ngay cả khi dùng find-filedired ở chế độ tương tác, bạn vẫn có thể dùng wildcard
  • Nếu dùng mẫu như *foo*.txt trong find-file, bạn có thể mở nhiều tệp cùng lúc
  • Khi mở thư mục trong Dired, nếu chỉ định wildcard tên tệp, bạn có thể tạo một danh sách tùy chỉnh chỉ gồm các tệp cụ thể
  • Luồng ví dụ là dùng mẫu */*_region_* để tìm các tệp tạm AucTeX trong thư mục con, chọn chúng trong Dired rồi xóa, sau đó lại dùng wildcard để mở nhiều tệp TeX trong các thư mục con
  • Khả năng này lộ ra ở chữ ký hàm khi gọi bằng lập trình, nhưng việc cũng dùng được trong chế độ tương tác thì thường chỉ dễ nhận ra nếu đọc toàn bộ docstring
  • Tính năng wildcard của Dired có thể bị lấn át bởi luồng Dired hiện đại tạo từ consult-findembark-export, nhưng nó hoạt động ngay ở trạng thái mặc định

Danh sách URI trong buffer: M-x ffap-menu

  • ffap là tính năng find-file-at-point cho phép kiểm tra xem vị trí con trỏ có phải là đường dẫn tệp hoặc URL hợp lệ để mở hay không
  • ffap-menu quét toàn bộ buffer để tìm các mục trông giống đường dẫn tệp hoặc URL rồi cung cấp chúng dưới dạng danh sách
  • Vì dùng giao diện completing-read, bạn có thể xuất danh sách ứng viên đã lọc ra buffer, hoặc sao chép, mở, hay xử lý một phần hoặc toàn bộ bằng Embark
  • Liệt kê các liên kết có thuộc tính

    • Các ứng dụng Emacs như EWW đôi khi chèn URL dưới dạng thuộc tính văn bản chứ không phải liên kết văn bản thuần, và ffap-menu sẽ bỏ sót chúng
    • Để khắc phục, có thể dùng một lệnh tùy biến lấy ý tưởng từ ffap-menu để thu thập cả thuộc tính văn bản shr-url
    • Lệnh ví dụ my/search-occur-browse-url được cấu hình để tìm cả regex URL thông thường lẫn thuộc tính shr-url rồi tạo ứng viên hoàn tất, sau đó mở URL đã chọn bằng browse-url hoặc browse-url-generic

So sánh cửa sổ: M-x compare-windows

  • Emacs có rất nhiều lệnh so sánh như diff, diff-buffers, diff-backup, dired-diff, vc-diff, và nhiều lệnh ediff-*
  • compare-windows so sánh văn bản từ vị trí con trỏ của hai cửa sổ, dừng ở điểm khác nhau tiếp theo rồi báo lại
  • Đối tượng so sánh là cửa sổ hiện tại và cửa sổ mà other-window sẽ chọn; tính năng ít hơn Ediff hay diff nhưng chạy dễ và nhanh hơn
  • Nó chỉ so sánh văn bản thực tế đang hiển thị trong hai cửa sổ, bất kể loại buffer, trạng thái chỉnh sửa, tệp hay trạng thái quản lý phiên bản
  • Nếu hiển thị hai phần khác nhau của cùng một buffer trong hai cửa sổ, bạn cũng có thể so sánh hai đoạn văn bản trong cùng một buffer
  • Cũng có thể so sánh danh sách thư mục; trong ví dụ, thời gian sửa đổi tệp được phát hiện là điểm khác biệt đầu tiên
  • Nếu truyền đối số tiền tố, bạn có thể bỏ qua khác biệt về khoảng trắng

So sánh thư mục bằng Dired: M-x dired-compare-directories

  • dired-compare-directories sẽ hỏi thư mục cần so sánh trong Dired và đánh dấu các tệp có tên khác nhau trong hai danh sách Dired
  • Cách này có thể xử lý trường hợp sử dụng so sánh thư mục phổ biến nhất
  • Vì là so sánh ở cấp độ tệp, bạn có thể đưa vào điều kiện khớp tùy chỉnh bao gồm cả thuộc tính tệp như thời gian sửa đổi hay kích thước
  • Điều kiện (> mtime2 mtime1) có thể đánh dấu các tệp được sửa gần đây hơn
  • Điều kiện (/= size1 size2) có thể đánh dấu các tệp trùng tên nhưng khác kích thước
  • Nếu cần so sánh mang tính tương tác hơn, bạn cũng có thể dùng ediff-directories

Tô sáng thay đổi trong buffer: M-x highlight-changes-mode

  • highlight-changes-mode là tính năng tô sáng các điểm thay đổi trong tệp, và có thể dùng như một lựa chọn “live” thay cho các lệnh diff như diff-buffer-with-file
  • Hành vi mặc định là tô sáng các thay đổi từ lúc bật mode đến lúc tắt, chứ không tự động chỉ tô sáng các thay đổi chưa lưu
  • Có thể dùng before-save-hookafter-save-hook để tạo luồng chỉ tô sáng thay đổi trước khi lưu, bằng cách tắt tô sáng trước khi lưu rồi bật lại sau khi lưu
  • Mã ví dụ bật highlight-changes-mode cho file buffer trong text-mode-hook và điều chỉnh trạng thái tô sáng bằng các hook trước/sau khi lưu
  • Nếu tách ra thành dạng highlight-unsaved-mode độc lập, nó sẽ trở thành một minor mode tô sáng mọi thay đổi cho đến khi lưu
  • Bạn có thể di chuyển tới thay đổi tiếp theo hoặc trước đó bằng highlight-changes-next-changehighlight-changes-previous-change
  • Với highlight-changes-remove-highlight, bạn có thể xóa phần tô sáng trực quan và chỉ dùng việc di chuyển dựa trên theo dõi thay đổi

Biến tệp sao lưu thành thứ thực sự hữu ích: họ vc-diff

  • Vấn đề của bản sao lưu Emacs

    • Emacs mặc định sẽ định kỳ tạo bản sao lưu cho các tệp đang được chỉnh sửa và lưu
    • Hệ thống sao lưu này thường bị nhắc đến như một tính năng phiền toái cần tắt bằng make-backup-files
    • Có thể có lo ngại về bảo mật khi các tệp nhạy cảm bị sao chép sang nơi khác trên đĩa
    • Ngoài ra, vấn đề chủ yếu là các tệp sao lưu bị rải rác trong thư mục làm việc, và thiếu một UI thuận tiện để xem hoặc xử lý chúng
    • Có thể điều chỉnh vị trí sao lưu và số lượng lưu giữ bằng các tùy chọn người dùng như backup-directory-alist, kept-old-versions, kept-new-versions
    • Gói bên ngoài backup-walker cung cấp giao diện duyệt bản sao lưu như du hành thời gian
  • Mở rộng giao diện VC

    • Gói VC tích hợp sẵn của Emacs cung cấp giao diện để xem các phiên bản trước của tệp được quản lý phiên bản
    • vc-diff tạo diff giữa tệp và phiên bản ngay trước đó hoặc một phiên bản được chỉ định
    • vc-ediff chạy Ediff với phiên bản ngay trước đó hoặc một phiên bản được chỉ định của tệp
    • vc-revision-other-window hiển thị phiên bản trước đó hoặc một phiên bản cũ được chỉ định cạnh tệp hiện tại
    • Giao diện này không bị giới hạn ở Git, nhưng sẽ không hoạt động với các tệp không được quản lý phiên bản
    • Nếu nạp chồng ba lệnh VC này, có thể gộp bộ đệm chưa lưu, tệp được quản lý phiên bản và bản sao lưu của tệp không được quản lý phiên bản vào cùng một mô hình “so sánh với phiên bản trước”
    • Với tệp chưa lưu, vc-diffvc-ediff sẽ so sánh bộ đệm với tệp
    • Với tệp được quản lý phiên bản, vc-diff, vc-ediff, vc-revision-other-window gốc vẫn chạy như bình thường
    • Với tệp không được quản lý phiên bản, có thể so sánh hoặc hiển thị bản sao lưu có số mới nhất, hoặc bản sao lưu theo số được chọn bằng đối số tiền tố

Họ apropos

  • C-h k, tức describe-key, là một phím trợ giúp cực kỳ hữu ích vì cho phép kiểm tra trực tiếp hàm được gọi bởi tổ hợp phím
  • Là tính năng trợ giúp thứ hai nên học, apropos rất mạnh mẽ và là cửa ngõ để nắm được cách các chức năng của Emacs được sắp xếp khi bạn không biết phải tìm gì
  • apropos không chỉ là một lệnh đơn lẻ mà là cả một họ gồm nhiều lệnh tìm kiếm chuyên biệt như apropos-library, apropos-function, apropos-command, apropos-variable, apropos-user-option, apropos-documentation, info-apropos
  • Cấu hình ví dụ buộc các lệnh này vào keymap dưới C-h a để thay thế apropos
  • Ngay cả khi không có trình gợi ý như which-key, bạn vẫn có thể nhấn C-h sau phím tiền tố C-h a để xem danh sách lệnh khả dụng
  • customize-apropos tạo một bộ đệm customize chuyên biệt, tập hợp các tùy chọn, face và nhóm khớp với từ khóa tìm kiếm

Công cụ find-func: M-x find-function-on-key, M-x find-function

  • Khi không thích một keybinding hoặc muốn biết nó hoạt động thế nào, bạn có thể nhảy tới định nghĩa của lệnh mà phím đó gọi để đọc hoặc chỉnh sửa hành vi
  • Luồng thông thường là dùng describe-key hoặc C-h k để xác định lệnh mà phím gọi, rồi nhấn s để chuyển tới mã nguồn
  • find-function-on-key rút gọn bước thứ hai này bằng cách đi thẳng từ keybinding tới mã nguồn của hàm
  • Cấu hình ví dụ gán C-h M-k trong help-map cho find-function-on-key

copy-from-above-commandduplicate-dwim

  • Gần đây Emacs đã thêm một số lệnh nhân bản văn bản mà nhiều người dùng đã dùng từ lâu
  • copy-from-above-command sao chép văn bản từ dòng không trống đầu tiên phía trên dòng hiện tại, tương tự C-y của Vim
  • duplicate-dwim sao chép dòng hiện tại hoặc vùng đang kích hoạt xuống dưới dòng hiện tại, tương tự yy<N>p của Vim
  • copy-from-above-command sao chép số ký tự từ dòng phía trên theo đối số tiền tố, nhưng advice ví dụ biến đối số tiền tố C-u thành hành vi “sao chép toàn bộ dòng phía trên và biến nó thành chú thích”
  • Nếu dùng đối số tiền tố số C-<N>, bạn vẫn có thể sao chép số ký tự xác định từ phía trên như cũ
  • duplicate-dwim cần chọn xem sau khi nhân bản thì con trỏ sẽ ở bản gốc hay bản sao, và có thể đặt điều này bằng tùy chọn người dùng
  • Cấu hình ví dụ đặt duplicate-region-final-positionduplicate-line-final-position thành -1 để con trỏ và vùng chọn chuyển tới phần văn bản vừa được nhân bản

Biến lịch sử nhập phím thành macro: M-x kmacro-edit-lossage

  • Macro bàn phím của Emacs có thể ghi lại và phát lại mọi chuỗi thao tác trong Emacs, không chỉ biến đổi văn bản mà cả các cú nhấp chuột
  • Macro bàn phím rất mạnh, nhưng đòi hỏi phải dự đoán trước khả năng lặp lại trước khi bắt đầu ghi, đồng thời thực hiện thao tác đã được khái quát hóa và không lỗi, nên tạo ra gánh nặng nhận thức khá lớn
  • Lệnh . của Vim và gói dot-mode của Emacs giúp giảm bớt bài toán lặp lại chỉnh sửa, nhưng phạm vi của chúng khác với macro bàn phím đầy đủ
  • view-lossage (C-h l) hiển thị lịch sử khoảng 300 lần nhập phím gần nhất
  • kmacro-edit-lossage cho phép tạo macro từ lịch sử nhập phím này vào bất kỳ lúc nào
  • Lossage thực sự có thể chỉnh sửa được, nên khi tạo macro bạn có thể chèn thêm lệnh mới vào trong bản ghi
  • Macro đã định nghĩa sẵn có thể được chỉnh sửa thường xuyên hơn bằng edit-kbd-macro (C-x C-k e), nhưng kmacro-edit-lossage đặc biệt hữu ích để biến một thao tác phức tạp vừa làm xong trong tình huống hiếm gặp thành thứ có thể lặp lại
  • Để tạo macro có thể khái quát hóa, bạn thường cần chèn lời gọi kbd-macro-query vào lossage

subword-mode, superword-mode, cú pháp từ

  • Các lệnh di chuyển và chỉnh sửa theo từ trong Emacs dùng syntax table theo từng major mode, và người dùng có thể tự điều chỉnh điều gì được xem là một từ
  • Trong subword-mode, mỗi thành phần của ký hiệu CamelCase được coi là một từ
  • Ví dụ, GtkWindow được tách thành GtkWindow, EmacsFrameClass thành Emacs, Frame, Class, còn NSGraphicsContext thành NS, Graphics, Context
  • Trong superword-mode, các ký hiệu snake_case như this_is_a_symbol được coi là một từ duy nhất
  • Trong thực tế sử dụng, việc thao tác symbol đã được hỗ trợ tốt bởi các lệnh *-sexp, nên superword-mode kém hữu ích hơn subword-mode
  • Chỉ cần chỉnh sửa syntax table của major mode vài phút cũng có thể giảm bớt sự bất tiện khi di chuyển theo cấu trúc
  • Trong ngữ cảnh họ Lisp, nếu biến : thành ký tự cấu thành từ thì sẽ dễ xử lý các keyword như :foo bằng backward-kill-word hơn
  • Trong Org mode, bạn có thể đổi để các dấu phân cách =~ cũng được coi là ký tự cấu thành từ
  • Có thể xem cách chỉ định cú pháp ký tự trong describe-syntax (C-h s) và modify-syntax-entry

Thao tác hiển thị hình ảnh

  • Ở gần như mọi nơi Emacs hiển thị hình ảnh, bạn có thể đặt con trỏ lên ảnh và nhấn i để thao tác cách hiển thị
  • Có thể dùng cùng thao tác này với phần xem trước liên kết ảnh trong Org mode và cả ảnh trong bộ đệm mục của Elfeed
  • i +i - hữu ích để phóng to và thu nhỏ, còn i r xoay ảnh 90 độ
  • Bạn cũng có thể cắt ảnh bằng i c; để xem các phím chi tiết, dùng M-x describe-keymap RET image-map
  • Phím tắt quen thuộc C-<wheel> từ trình duyệt và các ứng dụng khác cũng dùng được
  • Nếu dùng repeat-mode, sau lần gọi đầu tiên bạn có thể lặp lại chỉ với +, -, r mà không cần tiền tố i
  • Tính năng này được cung cấp qua keymap đặt trên ảnh và không cần kích hoạt riêng
  • Thứ được thao tác chỉ là trạng thái hiển thị, không phải tệp ảnh trên đĩa
  • Trong trang web và bộ đệm HTML đã render, z (shr-zoom-image) chia ảnh thành nhiều lát ngang nhiều dòng và luân phiên kích thước để giảm giới hạn khi hiển thị ảnh lớn

Hiển thị toàn bộ văn bản: M-x visible-mode

  • Emacs có thể khiến văn bản trong buffer tạm thời không hiển thị, và đây là nền tảng cho cơ chế gập trong Magit section, Outline mode, Org mode
  • Các mode cung cấp tính năng gập thường đi kèm keybinding để đổi trạng thái gập, và TAB thường sẽ hoạt động
  • Nếu khó nhớ keybinding theo từng mode hoặc không dùng đủ thường xuyên, bạn có thể dùng visible-mode để xem toàn bộ văn bản đang bị ẩn
  • visible-mode vô hiệu hóa tính không hiển thị của toàn bộ văn bản trong buffer, và khi chạy lại sẽ khôi phục trạng thái ẩn trước đó
  • Trong các buffer có UI gập động, màn hình có thể trông bị vỡ khi visible-mode đang bật
  • Tính năng này gần với một biện pháp tạm thời hay công cụ debug hơn, nhưng có thể làm lộ ra toàn bộ văn bản trong buffer chỉ với một lệnh

Bỏ qua văn bản ẩn: isearch-toggle-invisible

  • Một số lệnh Emacs như Isearch mặc định bỏ qua tính không hiển thị của văn bản để có thể dễ dàng tìm kiếm trên toàn bộ tài liệu thực tế
  • Khi trạng thái hiển thị của buffer đóng vai trò chỉ dẫn điều hướng, việc tìm kiếm tự động làm lộ phần văn bản gập có thể hoạt động khác với mong đợi
  • Khi dùng Isearch như công cụ điều hướng hơn là tìm kiếm, việc nhảy tới kết quả nằm trong vùng đã gập có thể gây vấn đề
  • Trong lúc Isearch, có thể chuyển đổi việc tìm trong văn bản không hiển thị bằng isearch-toggle-invisible, được gán với M-s i
  • Trong ví dụ, người dùng tìm zero để đi tới tiêu đề cuối cùng của tài liệu Org nhưng lại nhảy qua một kết quả trong vùng gập, rồi khi tìm lại đã nhấn M-s i để chỉ di chuyển giữa các kết quả trong phần văn bản đang hiển thị
  • Các phím chuyển đổi hành vi của Isearch nằm dưới keymap M-s, tương ứng với binding mặc định C-s

Thước canh: M-x ruler-mode

  • Emacs vẫn còn giữ lại những tính năng như lệnh center-* như tàn dư của thời kỳ hỗ trợ soạn thảo kiểu WYSIWYG
  • Các lệnh center-* căn giữa dòng, đoạn văn hoặc vùng theo fill-column, và có thể dùng cho những việc như comment trang trí trong mã
  • Margin hiển thị và độ rộng fringe là phần không gian màn hình có thể chứa nhiều chức năng, nhưng thao tác đổi trực tiếp độ rộng margin hiển thị không hề đơn giản
  • set-left-marginset-right-margin không phải là lệnh đổi độ rộng margin hiển thị mà hoạt động giống nhóm lệnh center, tức là thụt lề vào chính văn bản trong buffer
  • Việc cấu hình margin hiển thị không có lệnh trực tiếp, và còn có vấn đề là hiệu lực không áp dụng cho tới khi cửa sổ được hiển thị lại
  • Khi bật ruler-mode, có thể xem cách dùng qua tooltip trên header-line
  • Có thể đặt margin trái và phải của buffer bằng S-<mouse-1>S-<mouse-3>
  • Cũng có thể đặt fill-column bằng cách kéo <mouse-2>
  • Nếu muốn thay đổi margin ngay tại chỗ thay vì bật/tắt các độ rộng đặt sẵn, ruler-mode có thể thân thiện hơn với người dùng so với các gói như visual-fill-column hay olivetti

Dàn lại văn bản: M-x refill-mode

  • Emacs cung cấp nhiều lệnh fill-* để dàn văn bản và cả auto-fill-mode để xử lý xuống dòng trong lúc nhập
  • auto-fill-mode được giới thiệu khá sớm trong phần hướng dẫn Emacs, cho thấy việc dàn văn bản được xem là một chức năng biên tập quan trọng
  • auto-fill-mode thực ra không hoàn toàn tự động: nó chỉ ngắt dòng hiện tại, còn những lệch lạc ở các đoạn trước do dán nội dung hay thao tác khác vẫn phải sửa thủ công
  • refill-mode mới là tính năng dàn văn bản tự động thực sự của Emacs, giúp tài liệu luôn bám theo fill-column
  • Chỉ cần chạy M-x refill-mode là có thể dùng hành vi này

Cuộn mọi cửa sổ cùng lúc: M-x scroll-all-mode

  • scroll-other-window cho phép cuộn một cửa sổ khác chưa được chọn mà không cần chuyển focus, hữu ích khi làm việc ở cửa sổ hiện tại nhưng vẫn muốn xem tài liệu tham chiếu ở cửa sổ kế bên
  • follow-mode là tính năng xem liên tục một buffer qua nhiều cửa sổ
  • scroll-all-mode ít được biết đến hơn, nhưng sẽ cuộn đồng thời mọi cửa sổ trong frame
  • Nó hữu ích khi xem các buffer cần được đồng bộ để so sánh, và trong ví dụ được dùng để đối chiếu bằng mắt hai phiên bản tệp mà không cần vào phiên Ediff
  • Luồng thao tác mẫu là mở một bản sao lưu cũ cụ thể của tệp hiện tại bằng vc-revision-other-window, bật scroll-all-mode, rồi cuộn như bình thường để mọi cửa sổ cùng di chuyển
  • Cuộn cửa sổ khác và master-mode

    • Có thể phát sinh vấn đề khi trên màn hình có hơn hai cửa sổ và cửa sổ bạn muốn cuộn không phải next-window mà Emacs chọn
    • master-mode tích hợp sẵn cho phép chỉ định trước hoặc chỉ định tức thời buffer có thể được cuộn từ buffer khác
    • Một cách trực tiếp hơn là cấu hình chiến lược tìm cửa sổ để cuộn
    • (setq other-window-scroll-default #'get-lru-window) sẽ luôn cuộn cửa sổ ít được dùng gần đây nhất
    • Cách này hữu ích khi muốn cuộn một cửa sổ chứa tài liệu tham chiếu và hầu như không bao giờ được chọn
    • Nếu hai cửa sổ được chỉnh sửa thường xuyên nằm giữa nhiều cửa sổ khác nhau, bạn có thể đặt một hàm lambda để cuộn cửa sổ được dùng gần đây nhất như cửa sổ kia
    • Tổ hợp các thiết lập kiểu này giúp scroll-other-window cuộn đúng cửa sổ mong muốn

Từ chối thoát: M-x emacs-lock-mode

  • Khi có tệp chưa lưu, Emacs sẽ từ chối thoát cho đến khi bạn trả lời phải xử lý từng tệp như thế nào
  • emacs-lock-mode mở rộng ý tưởng đó để người dùng có thể khóa các buffer tùy ý
  • Cho tới khi được mở khóa, buffer đó sẽ từ chối bị kill và hiện thông báo như Buffer "*scratch*" is locked and cannot be killed
  • Nếu còn buffer bị khóa, Emacs cũng sẽ từ chối thoát và hiện thông báo như Emacs cannot exit because buffer "*scratch*" is locked
  • Tính năng này hữu ích để tránh vô tình mất thông tin trong các buffer không gắn với tệp, hoặc để nhắc rằng vẫn còn việc dở dang trong buffer đó
  • Sau Org-capture, vấn đề đầu tiên ít gặp hơn, nhưng nó vẫn hữu ích để tránh mất đầu ra hoặc trạng thái của shell·compilation buffer, website, hay các ứng dụng đặc biệt khác

Khôi phục frame đã đóng: M-x undelete-frame-mode, M-x undelete-frame

  • Nếu bạn lỡ đóng một frame Emacs đã được sắp xếp công phu, có thể khôi phục nó bằng undelete-frame
  • Muốn dùng tính năng này thì undelete-frame-mode phải được bật
  • Nó làm với frame điều mà winnertab-bar-history tích hợp sẵn làm với cửa sổ
  • Nếu bật undelete-frame-mode cùng với Emacs, bạn sẽ bớt phải lo khi đóng nhầm frame
  • Có thể khôi phục tối đa 16 frame đã bị xóa

Các tính năng còn lại và những thứ bị loại ra

  • Trong số các tính năng bắt gặp suốt 6 năm qua, có 20 tính năng đã trụ lại trong thực tế sử dụng Emacs năm 2026
  • Nhiều thư viện Emacs được phát hiện tình cờ mang tính hấp dẫn khảo cổ nhiều hơn là giải pháp ổn định cho nhu cầu của người dùng phổ thông
  • allout-mode là một trình quản lý outline ở vũ trụ song song khá giống Org mode, có các tính năng như speed-key của Org và mã hóa theo từng subtree
  • shadowfile hiện thực hóa unison bên trong Emacs, nhưng tính hữu dụng còn đáng nghi ngờ
  • double-mode là một cách nhập ký tự không có trên bàn phím dựa trên chuyển đổi phím, có trước quail
  • Thư viện bs từng là một nỗ lực nhằm tạo ra lệnh list-buffers thông minh hơn, nhưng ibuffer tốt hơn nên không còn lý do để dùng
  • Ngay cả những tính năng bề ngoài có vẻ hữu ích như bao một vùng bằng cặp dấu phân cách trong electric-pair-mode cũng bị loại vì hiệu quả không tương xứng với độ rắc rối
  • Với các nhu cầu như vậy, các gói ngoài như wrap-region, smartparens, embrace tốt hơn
  • Các thư viện tích hợp gắn với Org và lân cận Org như appt cũng thú vị, nhưng phạm vi đủ lớn để nên viết thành bài riêng
  • Những thư viện chủ yếu hữu ích cho lập trình viên Elisp như thunk cũng cần được tổng hợp riêng
  • Thư mục lisp đi kèm Emacs không quá lớn, nhưng vẫn còn nhiều khả năng tiếp tục phát hiện ra các tính năng mặc định hữu ích

1 bình luận

 
Ý kiến trên Lobste.rs
  • Trong find-file (C-x C-f), việc mở nhiều tệp bằng ký tự đại diện như *foo*.txt thường là do nhầm lẫn, nên khi dùng wildcard thì họ gắn advice-add vào find-file-noselect để find-file lập tức mở dired
    Cách làm là nếu kết quả của file-expand-wildcards có từ 2 mục trở lên thì chuyển sang dired-noselect, còn không thì gọi find-file-noselect gốc

  • ruler-mode thực sự rất thú vị. Trước giờ tôi hoàn toàn không biết Emacs có kiểu tính năng WYSIWYG này, đúng là một phần mềm vừa kỳ lạ vừa đầy niềm vui

  • Tôi cứ nghĩ mình đã xem gần hết mọi thứ chỉ với Emacs thuần, nhưng hóa ra vẫn còn nhiều thứ để khám phá. ruler-mode khá tuyệt cho việc viết lách

    • Thật ngạc nhiên khi những tính năng như vậy lại có sẵn ngay trong Emacs. Rất dễ nghĩ rằng Emacs chỉ cung cấp API elisp để tạo ra những thứ này, nhưng hóa ra tôi đã bỏ lỡ khá nhiều công cụ mặc định
      Trước đây tôi dùng Magit nhiều hơn hẳn, nhưng giờ đã chuyển sang vc-mode và công cụ diff tích hợp sẵn, và tôi hài lòng vì cả hai đều hoạt động rất tốt
  • Tôi thích những bài viết như thế này. Khi dùng các trình soạn thảo phức tạp và có thể tùy biến như Emacs hay Neovim, nhiều người thường cài bản phân phối phình to trước và lao đi quá nhanh, trước cả khi hiểu trình soạn thảo gốc có thể làm được gì
    Nếu có thời gian, đọc tài liệu hướng dẫn và tự xây dựng cấu hình từ đầu là một quá trình khá đáng giá. Có một hàm Emacs ít người biết là finder-list-keywords; khi chạy nó, bạn sẽ thấy một menu giúp khám phá các tính năng Emacs khó tìm. Ví dụ, bạn có biết là có tới 24 trò chơi tích hợp sẵn không?