Đặt ứng dụng mặc định trên Mac theo nhóm bằng Defaultly, để tệp không có phần mở rộng như .env, Dockerfile mở bằng trình soạn thảo
Viết code trên Mac, mấy tệp không có phần mở rộng như .env, .gitignore, Dockerfile lúc nào cũng phiền: bấm đúp thì hoặc mở bằng TextEdit, hoặc không mở được luôn. Vào Lấy thông tin › Mở bằng › Thay đổi tất cả… của Finder để đổi sang VS Code hay Zed thì bấm cũng chẳng ăn thua; còn Luôn mở bằng lại chỉ áp dụng cho đúng một tệp đang chọn.
Lý do là macOS xếp hầu hết tệp không có phần mở rộng vào loại public.data và không cho bất kỳ ứng dụng nào làm ứng dụng mặc định cho loại này, dùng công cụ dòng lệnh để đổi cũng chỉ nhận về lỗi -50.
Vấn đề thứ hai là liên kết tệp hay bị chiếm. Cài một ứng dụng mới (điển hình là Xcode), liên kết tệp bạn đã đặt có thể bị nó giành mất, macOS không hề báo, cũng không có cách khôi phục bằng một cú bấm, chỉ có thể đổi lại từng định dạng một, mà từ macOS 26.4 trở đi, mỗi loại đổi xong còn phải xác nhận một lần.
Vì vậy tôi viết Defaultly, một ứng dụng macOS miễn phí, mã nguồn mở để quản lý ứng dụng mặc định, gom việc đặt ứng dụng mở mặc định cho loại tệp, phần mở rộng và liên kết vào một cửa sổ.

Defaultly làm được gì
- Đặt ứng dụng mặc định theo nhóm: loại tệp được chia theo mục đích thành Văn bản, Markdown, Mã nguồn, Cấu hình & Dữ liệu, Tệp không có phần mở rộng, PDF, Tài liệu, Hình ảnh, Video, Âm thanh, Tệp nén. Mỗi nhóm có một menu chọn ứng dụng, đặt cả nhóm trong một lần, không phải xác nhận từng cái, có hiệu lực sau vài giây.
- Tệp không có phần mở rộng: cho
.env,Dockerfile,.gitignore,.npmrcmở bằng trình soạn thảo bạn chọn, kể cả khi trình soạn thảo đó không khai báo hỗ trợ chúng. - Ngoại lệ cho từng định dạng: mở rộng nhóm để gán ứng dụng riêng cho một định dạng như
.md,.py; sau này đổi ứng dụng của nhóm cũng không ảnh hưởng đến chúng. - Phần mở rộng tùy chỉnh: thêm phần mở rộng chưa có trong danh sách, kể cả
.go,.rs,.kt,.dart,.luavốn chỉ được macOS biết đến dưới dạng loại tạm thời. - Ứng dụng mặc định cho liên kết: liên kết web (
http,https), email (mailto), đăng ký lịch (webcal), cuộc gọi, tin nhắn văn bản, FaceTime, SSH, FTP, chia sẻ màn hình đều chọn được ứng dụng mặc định, cũng có thể chọn Không mở, chẳng hạn để bấm vào số điện thoại trên trang web không còn gọi đi nữa. - Chẩn đoán: thả một tệp vào để xem vì sao nó mở bằng một ứng dụng nào đó và đổi sang ứng dụng khác ngay tại chỗ; thả một thư mục vào để tìm các tệp có cài đặt Mở bằng riêng và xóa chúng.
- Cảnh báo bị chiếm quyền: khi Xcode, trình duyệt… chiếm mất liên kết bạn đã đặt, Defaultly hiện biểu ngữ để khôi phục bằng một cú bấm.
- Hoàn tác và khôi phục: lưu ảnh chụp trước mỗi lần thay đổi, có thể hoàn tác bằng
⌘Z, hoặc khôi phục về trạng thái trước lần đầu mở Defaultly, trước khi khôi phục sẽ cho xem trước từng thay đổi. - Gỡ cài đặt sạch sẽ: trình gỡ cài đặt tích hợp trả mọi liên kết về ứng dụng ban đầu trước, rồi mới tự chuyển vào Thùng rác.
- 15 ngôn ngữ: giao diện hỗ trợ 15 ngôn ngữ, gồm tiếng Việt, tiếng Anh, tiếng Trung giản thể, tiếng Nhật…, có thể chuyển ngay trong ứng dụng.
Defaultly không chạy nền, không có mục đăng nhập, không kết nối mạng và không thu thập dữ liệu.
Cài đặt Defaultly
Cần macOS 26 Tahoe trở lên.
- Mở trang Releases, tải
Defaultly-<version>.dmgtrong mục Assets của bản phát hành mới nhất. - Bấm đúp để mở DMG, kéo Defaultly vào thư mục Ứng dụng trong cùng cửa sổ.
- Đẩy DMG ra, rồi mở Defaultly từ thư mục Ứng dụng.
Không có trình cài đặt, cũng không cần mật khẩu quản trị viên. Khi cập nhật, chỉ cần tải DMG mới rồi kéo thả lần nữa để ghi đè bản cũ, cài đặt, quy tắc và ảnh chụp đều được giữ nguyên.
Lần mở đầu tiên: cho phép ứng dụng chưa được công chứng
Defaultly chưa được Apple công chứng, nên lần đầu mở macOS sẽ chặn lại, chỉ cần cho phép một lần:
-
Bấm đúp vào Defaultly, khi macOS báo không thể xác minh, bấm Xong. Đừng bấm nút Chuyển vào Thùng rác màu xanh.

-
Mở Cài đặt hệ thống › Quyền riêng tư & Bảo mật, cuộn xuống phần Bảo mật và bấm Vẫn mở bên cạnh Defaultly. Nút này còn đó trong khoảng một giờ sau bước 1.

-
Nhập mật khẩu đăng nhập hoặc dùng Touch ID, trong hộp thoại tiếp theo bấm Vẫn mở thêm một lần nữa.

Từ đó Defaultly mở bình thường, chương trình trợ giúp đi kèm cũng được cho phép luôn, mở tệp không có phần mở rộng sẽ không còn hiện cảnh báo nữa. Ảnh chụp màn hình là giao diện tiếng Anh, trên macOS tiếng Việt tên các nút chính là những tên đã viết ở trên.
Cách sử dụng
Cho .env, Dockerfile mở bằng trình soạn thảo
Trong tab Loại tệp, tìm nhóm Tệp không có phần mở rộng, chọn trình soạn thảo của bạn ở menu bên phải (ví dụ VS Code, Zed, Sublime Text), rồi bấm Áp dụng ở cuối cửa sổ. Sau đó bấm đúp vào các tệp như .env, Dockerfile là mở thẳng bằng trình soạn thảo này.
Đặt trình soạn thảo mặc định cho tệp mã nguồn hàng loạt
Làm tương tự, chọn ứng dụng cho các nhóm Mã nguồn, Cấu hình & Dữ liệu, Markdown rồi bấm Áp dụng. Nhóm Mã nguồn bao gồm các ngôn ngữ thông dụng như JavaScript, TypeScript (.tsx), Python, Java, C, C++, C#, PHP, Ruby, Swift, Go, Rust, Kotlin, Dart, Lua, Shell, PowerShell, SQL, kể cả .go, .rs vốn không có loại chính thức trong macOS.
Muốn một định dạng nào đó là ngoại lệ, bấm vào hàng của nhóm để mở rộng, chọn ứng dụng khác trong menu của hàng đó, hàng này sẽ được đánh dấu Đặt riêng; muốn quay lại theo nhóm, chọn Theo nhóm.
Tìm kiếm và thêm phần mở rộng
Gõ phần mở rộng vào ô tìm kiếm ở góc trên bên phải, ví dụ py hoặc env, sẽ nhảy thẳng đến hàng tương ứng. Nếu phần mở rộng không thuộc nhóm nào, kết quả tìm kiếm sẽ có Thêm…: gõ phần mở rộng vào, Defaultly sẽ cho biết macOS nhận diện nó là gì và đề xuất nên đưa vào nhóm nào, bấm Thêm là xong.
Đặt trình duyệt và ứng dụng email mặc định
Bên dưới loại tệp có một thẻ Liên kết, dùng để đặt ứng dụng mở các liên kết trình duyệt web, email, đăng ký lịch, cuộc gọi, SSH… Khi đổi trình duyệt, macOS vẫn sẽ bật hộp thoại hệ thống để bạn xác nhận, nhằm tránh trình duyệt bị chiếm quyền một cách âm thầm.
Áp dụng, hoàn tác và khôi phục
Mọi thay đổi đều được tạm giữ trước, cuối cửa sổ sẽ hiển thị có bao nhiêu thay đổi đang chờ, bấm Áp dụng để có hiệu lực, bấm Bỏ để hủy.
- Sửa › Hoàn tác (
⌘Z) hoàn tác lần áp dụng gần nhất, có thể hoàn tác liên tiếp. - Nút mũi tên vòng trên thanh công cụ là Khôi phục ban đầu, trỏ mọi loại tệp và liên kết mà Defaultly đã đổi về ứng dụng lúc bạn mở Defaultly lần đầu, trước khi thực hiện sẽ liệt kê từng thay đổi.
- Cài đặt › Lịch sử lưu 20 ảnh chụp gần nhất, khôi phục được bất kỳ bản nào.
Chẩn đoán vì sao một tệp mở bằng ứng dụng này
Chuyển sang tab Chẩn đoán, kéo tệp vào ô viền nét đứt, sẽ hiển thị ứng dụng nào mở nó và vì sao: là do tệp này có cài đặt Mở bằng riêng trong Finder, hay do bạn đã chọn ứng dụng này cho loại tệp này, hoặc chẳng có gì được đặt nên macOS tự chọn. Bên dưới kết quả có thể bấm Dùng thay thế để chuyển sang ứng dụng khác ngay.
Kéo một thư mục vào, Defaultly sẽ liệt kê mọi tệp bên trong có cài đặt Mở bằng riêng, chọn các tệp rồi bấm Xóa cài đặt riêng của chúng, những tệp này sẽ chuyển sang theo cài đặt của loại tương ứng.
Defaultly làm điều đó như thế nào
Trong gói ứng dụng của Defaultly có kèm một chương trình trợ giúp rất nhỏ tên Defaultly Helper. Khi bạn chọn trình soạn thảo cho tệp không có phần mở rộng, Defaultly trỏ public.data đến chương trình trợ giúp này. Khi mở loại tệp đó, chương trình trợ giúp kiểm tra nội dung tệp: tệp văn bản thì chuyển cho trình soạn thảo bạn chọn, tệp nhị phân thì hiển thị trong Finder, rồi thoát. Nó không có cửa sổ, không chạy thường trú, rảnh chưa tới một giây là thoát.
Những loại mà ứng dụng bạn chọn vốn đã hỗ trợ, như .md, .py, sẽ được gán thẳng cho ứng dụng đó, không đi qua chương trình trợ giúp.
macOS không cung cấp API công khai để đặt ứng dụng mặc định cho public.data, nên Defaultly ghi mọi thay đổi loại tệp vào tùy chọn LaunchServices trong một lần, rồi khởi động lại dịch vụ lsd một lần để có hiệu lực. Cơ chế này không có tài liệu chính thức của Apple và có thể ngừng hoạt động sau khi cập nhật hệ thống; nếu thay đổi nào không có hiệu lực, Defaultly sẽ chuyển sang dùng API công khai (cần bạn xác nhận từng cái), còn tệp không có phần mở rộng thì có thể chuyển sang dùng quy tắc thư mục trong Cài đặt.
Câu hỏi thường gặp
Làm sao đổi ứng dụng mở mặc định cho tệp không có phần mở rộng trên Mac?
Mở Defaultly, chọn một ứng dụng cho Tệp không có phần mở rộng, bấm Áp dụng. Sau đó các tệp như .env, Dockerfile sẽ mở bằng ứng dụng này.
Vì sao “Thay đổi tất cả” của Finder không có tác dụng với tệp .env?
macOS coi loại tệp này là dữ liệu chung (public.data) và không cho đổi ứng dụng mặc định của nó qua API công khai. Defaultly dùng chương trình trợ giúp để vượt qua giới hạn này.
Vì sao tệp .ts không nằm trong nhóm Mã nguồn?
macOS nhận diện .ts là định dạng video (MPEG-2 transport stream), đổi nó sẽ ảnh hưởng đến tệp video thật, nên nhóm Mã nguồn chỉ có .tsx của TypeScript.
Có hoàn tác được mọi thay đổi không? Được. Lần chạy đầu tiên Defaultly sẽ ghi lại liên kết ban đầu và không bao giờ ghi đè bản ghi này, Khôi phục ban đầu sẽ trỏ mọi loại đã đổi về ứng dụng ban đầu.
Gỡ cài đặt thế nào? Ở cuối Cài đặt › Những gì Defaultly đã ghi, bấm Gỡ cài đặt Defaultly…, nó sẽ khôi phục toàn bộ liên kết đã đổi trước, rồi tự chuyển vào Thùng rác.
Hướng dẫn chi tiết hơn, gồm chế độ nhà phát triển, quy tắc, quy tắc thư mục, có thể xem README tiếng Việt của dự án.
Địa chỉ dự án trên GitHub: https://github.com/zhaojiannet/defaultly