VietTechiesHIỂU CÔNG NGHỆ. MỞ GÓC NHÌN.
☰ Chuyên mục

Bill Joy xây dựng trình soạn thảo vi qua kết nối chỉ truyền khoảng ba mươi ký tự mỗi giây, giảm cập nhật màn hình để việc soạn thảo trở nên khả thi

19/10/2026 · VietTechies · Biên tập

Chân dung nhà khoa học máy tính Bill Joy trên nền bố cục biên tập tối giản.


Năm 1976, Bill Joy là học viên cao học tại Đại học California, Berkeley, và sửa code từ nhà ở Berkeley. Ông kể lại rằng mình dùng một thiết bị đầu cuối nối qua modem điện thoại tốc độ khoảng 300 baud — truyền được khoảng ba mươi ký tự mỗi giây. Trước khi phát triển trình soạn thảo văn bản vi, Joy dùng ed, trình soạn thảo theo dòng tiêu chuẩn của Unix, chỉ hiển thị văn bản khi người dùng yêu cầu. Để xem một đoạn chương trình, lập trình viên phải gõ lệnh, nhấn Enter rồi chờ thiết bị đầu cuối in từng dòng, từng ký tự.

Khi bắt tay xây dựng trình soạn thảo hiển thị toàn màn hình mà sau này trở thành vi, Joy gặp một giới hạn vật lý khắc nghiệt: truyền tám mươi ký tự trên mỗi dòng, với tổng cộng hai mươi bốn dòng, qua đường dây điện thoại ấy sẽ mất hơn một phút. Chỉ cập nhật những phần cần thiết trên màn hình giúp việc soạn thảo trở nên khả thi.

Sửa code từng dòng

Giữa thập niên 1970, Unix chạy trên những máy tính mini dùng chung như PDP-11 (Programmed Data Processor-11) của Digital Equipment Corporation. Ban đầu, người dùng tương tác với máy tính qua các máy điện báo cơ điện, in kết quả trực tiếp lên những cuộn giấy liên tục. Trong môi trường ấy, trình soạn thảo ed của Ken Thompson là một giải pháp gọn gàng, phù hợp. Lập trình viên có thể chỉ định dòng bằng số, thay thế từ bằng biểu thức chính quy và in các dòng trong phạm vi đã chọn để xem phần code xung quanh.

Đến năm 1976, các thiết bị đầu cuối dùng màn hình ống tia âm cực đã dần thay thế máy điện báo in giấy tại các khoa khoa học máy tính. Màn hình có thể hiển thị hai mươi bốn dòng văn bản cùng lúc, nhưng ed vẫn coi màn hình như một cuộn giấy vô tận: in những dòng được yêu cầu ở phía dưới rồi cuộn các dòng cũ lên trên cho đến khi khuất hẳn. Những lập trình viên từng thấy các trình soạn thảo màn hình thử nghiệm đầu tiên biết rằng thao tác sửa văn bản có thể cho kết quả tức thì. Nếu màn hình liên tục hiển thị tệp đang mở và con trỏ nhấp nháy đánh dấu vị trí soạn thảo, người dùng có thể sửa lỗi gõ ngay tại chỗ.

Joy đang làm việc với một trình biên dịch (compiler) Pascal mà Thompson mang đến Berkeley. Tìm và sửa lỗi trong các chương trình lớn bằng ed chậm đến sốt ruột, nhất là khi làm việc từ xa qua đường dây điện thoại. Nếu trình soạn thảo in nhầm khối code, lập trình viên mất hàng phút chờ văn bản truyền hết qua modem. Joy muốn có một trình soạn thảo hiển thị phần code xung quanh thành một trang liền mạch.

Từ em đến ex

Bước đột phá bắt đầu vào mùa hè năm 1976, khi nhà khoa học máy tính người Anh George Coulouris từ Queen Mary College, Đại học London, đến thăm Berkeley. Coulouris đã phát triển một trình soạn thảo tên em vào mùa thu năm 1975; tên này viết tắt của “editor for mortals”, nghĩa là “trình soạn thảo cho người thường”. Dựa trên ed, Coulouris sửa chương trình để người dùng có thể chỉnh sửa từng ký tự trong một dòng đang hiển thị trên màn hình thiết bị đầu cuối. Coulouris giới thiệu em cho Joy tại Berkeley, rồi Joy cùng các đồng nghiệp sao chép mã nguồn của chương trình.

Joy lấy mã nguồn của Coulouris làm điểm khởi đầu. Chuck Haley thực hiện nhiều thay đổi để phát triển em thành những phiên bản ex đầu tiên; Joy ghi nhận sự cộng tác và dìu dắt của Haley. Trong cuộc phỏng vấn năm 1999, Joy nhớ lại một tên gọi trung gian là en, dù ông không chắc về thứ tự các tên gọi. Bản phân phối phần mềm Berkeley đầu tiên (1BSD) có ex 1.1. Dù ex vẫn giữ các lệnh thao tác theo dòng, phiên bản 1.1 đã có chế độ trực quan để soạn thảo trên màn hình ở những thiết bị đầu cuối cho phép định vị con trỏ.

Thiết kế cho modem 300 baud

Các kết nối cục bộ nhanh hơn giúp việc soạn thảo toàn màn hình trở nên khả thi hơn nhờ rút ngắn thời gian cập nhật màn hình. Nhưng ở tốc độ 300 baud, làm mới màn hình sau mỗi lệnh là điều không thể. Truyền tám mươi ký tự trên mỗi dòng của hai mươi bốn dòng cần tới 1.920 ký tự, mất khoảng sáu mươi bốn giây ở tốc độ ba mươi ký tự mỗi giây, chưa kể các chuỗi điều khiển bổ sung. Nếu mỗi lần nhấn phím đều khiến màn hình vẽ lại, trình soạn thảo sẽ không thể dùng được.

Joy giải quyết vấn đề bằng cách coi khả năng cập nhật màn hình là một tài nguyên khan hiếm, cần tiết kiệm ở từng bước. Thay vì luôn vẽ lại toàn bộ màn hình, vi tận dụng những thao tác mà thiết bị đầu cuối hỗ trợ, như định vị con trỏ, xóa từ vị trí hiện tại đến cuối dòng, chèn hoặc xóa ký tự. Trình soạn thảo thời kỳ đầu lưu đặc tính của thiết bị đầu cuối trong /etc/ttycap, nhưng muốn bổ sung khả năng định vị con trỏ cho một loại thiết bị khác thì phải biên dịch lại chương trình.

Với các kết nối chậm, Joy điều chỉnh ngay trong thiết kế của trình soạn thảo. Khi chạy ở tốc độ 300 baud, ex và vi tự động thu vùng soạn thảo mặc định xuống còn nửa màn hình, nhờ đó giảm đáng kể số dòng cần làm mới. Ở tốc độ 1200 baud, vùng mặc định mở rộng thành hai phần ba màn hình. Đây chỉ là các thiết lập ban đầu: người dùng vẫn có thể mở rộng vùng soạn thảo ngay cả trên kết nối chậm. Joy còn bổ sung tùy chọn slowopen, tạm ngừng cập nhật phần hiển thị trực quan khi người dùng gõ văn bản mới, rồi hiển thị lại phần nội dung đã hoãn cập nhật khi người dùng nhấn Escape để kết thúc thao tác chèn.

Cú pháp lệnh cũng chịu cùng sức ép phải ngắn gọn. Nhiều lệnh cơ bản rất ngắn và không cần nhấn Return: “dw” để xóa một từ, “yy” để sao chép một dòng và “p” để đặt văn bản đã sao chép hoặc xóa vào sau vị trí hiện tại. Lệnh tìm kiếm, số đếm và lệnh bắt đầu bằng dấu hai chấm có thể cần nhập dài hơn; riêng lệnh tìm kiếm và lệnh dấu hai chấm còn cần ký tự kết thúc. Joy thiết kế vi để người dùng vẫn làm việc được khi màn hình cập nhật chậm hơn tốc độ gõ phím của họ. Khả năng gõ trước trong lúc chương trình còn xử lý có những giới hạn tùy hệ thống: tài liệu thời đó cảnh báo rằng một số hệ thống không cho phép làm vậy trong lúc tính toán nếu con trỏ đang ở dòng cuối màn hình.

Giai thoại viết vi trong một cuối tuần

Một giai thoại dai dẳng trong giới lập trình kể rằng Bill Joy viết vi trong một cuối tuần làm việc điên cuồng. Trong cuộc phỏng vấn năm 1999 với Linux Magazine, sau được The Register đăng lại, Joy bác bỏ thẳng câu chuyện ấy. Khi được hỏi liệu trình soạn thảo có ra đời chỉ trong một cuối tuần hay không, ông trả lời: “Không. Phải mất một thời gian dài.” Ở một đoạn khác trong cuộc phỏng vấn, ông nhớ lại mình đã thức trắng đêm trong vài tháng để viết vi.

Chế độ soạn thảo trực quan đã được ghi trong tài liệu ex 1.1 vào tháng 11 năm 1977. Ex 2.0, có trong bản phân phối phần mềm Berkeley thứ hai (2BSD), mở rộng giao diện ấy và bổ sung khả năng khởi động trực tiếp bằng lệnh vi. Chạy ex với cờ “-v” sẽ mở giao diện toàn màn hình; một liên kết đơn giản mang tên vi được tạo để lập trình viên có thể mở thẳng chế độ trực quan.

Nút thắt qua đi, dấu ấn thiết kế còn lại

Trong hồi ức năm 1999, Joy nhấn mạnh môi trường máy tính thuở đầu của ông khác biệt đến mức nào. Những lựa chọn thiết kế cho kết nối chậm ấy vẫn hiện diện trong vi. Vim, hậu duệ của vi, vẫn giữ lại cách vi phân biệt chế độ Normal để nhập lệnh chỉnh sửa và chế độ Insert để nhập văn bản.

Joy cho rằng kết nối 300 baud là lý do khiến vi có những lệnh khác thường và việc làm cho soạn thảo trên màn hình trở nên khả thi lại khó đến vậy. Ở tốc độ ba mươi ký tự mỗi giây, mỗi lần vẽ lại màn hình không cần thiết đều khiến lập trình viên phải chờ.

Bài liên quan

Đọc bằng ngôn ngữ khác: English

Nguồn