Lệnh thao tác trên cửa sổ
- C-v
scroll-up. Cuộn tới (về cuối tập tin) một màn hình. Theo mặc định, Emacs chừa 2 hàng từ màn hình trước.- M-v
scroll-down. Như C-v, nhưng cuộn ngược.- C-x o
other-window. Chuyển sang cửa sổ khác. Lặp đi lặp lại lệnh này sẽ di chuyển qua tất cả các cửa sổ, từ trái sang phải và trên xuống dưới.- C-x 1
delete-other-windows. Xoá tất cả các cửa sổ khác, trừ cửa sổ hiện tại. Lệnh này không xoá các bộ đệm và tập tin liên hệ với cửa sổ bị xoá.- C-x 0
delete-window. Xoá cửa sổ hiện tại, thay đổi kích thước các cửa sổ khác cho thích hợp.- C-x 2
split-window-vertically. Chia cửa sổ hiện tại thành hai, theo chiều dọc. Lệnh này tạo một cửa sổ mới, nhưng không tạo bộ đệm mới: cùng một bộ đệm sẽ được xem trong 2 cửa sổ. Điều này giúp xem các phần khác nhau của bộ đệm đồng thời.- C-x 3
split-window-horizontally. Tương tự như C-x 2 nhưng chia cửa sổ theo chiều ngang.- C-M-v
scroll-other-window. Tương tự như C-v, nhưng cuộn các cửa sổ kế tiếp (là cửa sổ mà lệnh C-o sẽ chuyển sang).
Các khái niệm căn bản
Vào và ra
Để khởi động Emacs:
emacs
sau đó dùng các lệnh tập tin để đọc tập tin cần biên tập. Thay vào đó, bạn cũng có thể khởi động Emacs với một (hoặc nhiều) tập tin ban đầu:
emacs foo.bar
Để thoát Emacs, dùng lệnh C-x C-c (liên kết với save-buffers-kill-emacs). Nó sẽ đề nghị bạn lưu tất cả bộ đệm và rồi thoát.
Bạn cũng có thể hoãn Emacs (theo nghĩa Unix là dừng nó và đặt vào hậu trường) bằng C-x C-z (liên kết với suspend-emacs). Khởi động lại Emacs tuỳ theo shell, nhưng thông thường dựa trên lệnh fg.
Các lệnh tự điền (self inserting command)
Một khi Emacs đã khởi động, bạn có thể gõ văn bản vào nó. Các kí tự in được tự điền vào vì mỗi kí tự liên kết với lệnh tự điền self-insert-command.
Màn hình
Dòng chế độ
Màn hình Emacs hoàn toàn được dành cho văn bản của tập tin, chỉ trừ một dòng gần cuối màn hinh được dành cho dòng chế độ. Dòng này hiển thị các thông tin quan trọng, bao gồm:
- Trạng thái của bộ đệm: đã thay đổi (cặp dấu sao), chưa thay đổi (dấu gạch ngang), hay chỉ đọc (cặp dấu %).
- Tên tập tin đang biên tập (sẽ là *scratch* nếu bạn không đang biên tập tập tin nào).
- Chế độ chính (trong dấu ngoặc).
- Lượng của tập tin xem trên màn hình:
- All
- Tất cả nội dung của tập tin.
- Top
- Phần đầu của tập tin.
- Bot
- Phần cuối của tập tin.
- NN%
- Phần trăm tập tin trên cửa sổ.
Tiểu bộ đệm (minibuffer)
Dòng trắng bên dưới dòng chế độ là tiểu bộ đệm, dùng hiển thị thông điệp và dấu nhắc yêu cầu gõ một cái gì đó (trả lời có/không cho câu hỏi, tên tập tin, tên lệnh dài, v.v).
Tiểu bộ đệm cũng được gọi là vùng phản hồi (echo area), vì Emacs hiển thị các gõ phím ở đây nếu bạn gõ thật chậm. Thí dụ gõ phím đa kí tự (multi-character keystroke) (như ESC q) với khoảng dừng dài giữa các lần gõ.
Thông điệp lạ
Thỉnh thoảng Emacs tự động in các thông điệp trên tiểu bộ đệm mà dường nhu không liên quan gì đến việc bạn đang làm. Hai thông điệp thường gặp nhất là:
- Mark set
- Emacs đánh dấu cho bạn do kết quả của câu lệnh cuối; đánh dấu tự động là tính năng tiện lợi của một số lệnh, xem Đánh dấu và vùng.
- Garbage collecting…
- Bộ máy lips của Emacs đang thực hiện lưu trữ, bạn có thể bỏ qua và tiếp tục gõ.
Kí tự khôi hài (funny character)
Khi tập tin chứa kí tự điều khiển (control character) hoặc kí tự với high-order bit bằng 1 (được set), Emacs hiển thị chúng bằng dấu gạch xiên ngược và 3 số bát phân (cho giá trị ASCII của kí tự) đi theo sau. Nếu trạm cuối (terminal) có thể hiển thị bộ kí tự 8 bit, như ISO Latin-1, Emacs sẽ hiển thị các kí tự này thay vì các số bát phân.
Dòng dài
Emacs không ngắt dòng tự động nếu không được yêu cầu. Vì vậy nó không làm xáo trộn các dòng dài trong tập tin. Ở các chế độ hướng về soạn thảo văn bản, Emacs có thể thêm ngắt dòng tự động.
Eight-bit clean
Emacs có thể biên tập tập tin nhị phân mà không làm hỏng chúng.
Ngắt ngang và bỏ ngang
C-g (liên kết với keyboard-quit) dùng để ngắt ngang công việc Emacs đang làm (chẳng hạn như đang hỏi bạn gì đó mà bạn không hiểu), và nó cũng bỏ ngang một phần chuỗi phím vừa được gõ (ví dụ nếu bạn bất cẩn gõ C-x). C-g là kí tự ASCII BEL, do đó khi bạn gõ chuông sẽ kêu.
Vì Emacs có khả năng đệ quy đầy đủ nên đôi khi cần phải gõ C-g vài lần để thoát khỏi chuỗi lệnh đệ quy. Cũng vậy, nếu Emacs thật sự bị treo, có thể gõ nhanh 3 lần C-g để bỏ ngang cái đang làm treo.
Giúp đỡ
Emacs có hệ thống giúp đỡ trực tuyến phong phú, có thể được truy cập qua phím giúp đỡ C-h. C-h là phím tiền tố. Gõ C-h hai lần để xem danh sách các lệnh con (subcommand); gõ ba lần để được cửa sổ miêu tả tất cả các lệnh này (gõ SPC sẽ cuộn cửa sổ này). Một vài lệnh giúp đỡ thường dùng:
- C-h a
command-apropos. Nhắc nhập từ khoá và sau đó liệt kê tất cả các lệnh mang từ khoá đó trong tên dài.- C-h k
describe-key. Nhắc nhập một gõ phím, và miêu tả lệnh liên kết với phím đó, nếu có.- C-h i
info. Gọi trình đọc tài liệu siêu văn bản Info.- C-h m
describe-mode. Miêu tả chế độ chính hiện tại và các liên kết phím (key binding) cụ thể của nó.- C-h p
finder-by-keyword. Chạy trình duyệt hướng chủ đề tương tác (interactive subject-oriented browser) của các gói Emacs.- C-h t
help-with-tutorial. Chạy tài liệu hướng dẫn sử dụng Emacs. Rất có ích cho người mới bắt đầu.
Info
Emacs cài đặt sẵn trình đọc tài liệu siêu văn bản được gọi là Info. Để chạy nó, gõ C-h i hoặc M-x info RET. Nó có tài liệu hướng dẫn cho chính nó, được mở bằng cách gõ h.
Undo không giới hạn và redo
Một trong các lệnh quan trọng nhất của Emacs là undo, bằng cách gõ C-_ (control thanh dưới). C-_ là một kí tự ASCII hợp lệ, nhưng một vài bàn phím không phát sinh được kí tự này, khi đó có thể dùng C-x u.
Emacs có thể undo không giới hạn số lần thay đổi trước, và nó cũng có khả năng redo những gì đã bị undo.
Lưu dự phòng và chế độ tự động lưu
Emacs không bao giờ thay đổi tập tin trên đĩa cho đến khi bạn yêu cầu nó làm, nhưng nó rất cẩn thận trong việc lưu công việc bạn đang làm theo một số cách.
- Tập tin lưu dự phòng (backup file).
- Emacs luôn luôn lưu lại phiên bản trước của tập tin khi bạn lưu tập tin. Nếu tập tin có tênfoo, bản lưu dự phòng sẽ được gọi làfoo~. Emacs có thể lưu giữ bất cứ số phiên bản nào trước đó (tuỳ theo bạn quy định, và theo mặc định là off), đặt tên làfoo.~1~,foo.~2~, v.v.
- Tập tin tự động lưu (auto-save file).
- Theo mặc định Emacs cũng tự động lưutập tin trong khi bạn đang biên tập nó. Tập tin tự động lưu cho tập tinfoođược gọi là#foo#. Nếu Emacs (hoặc hệ thống) bị crash trước khi bạn lưu các thay đổi, bạn có thể khôi phục gần như toàn bộ từ tập tin này. Tự động lưu (theo mặc định) được thực hiện mỗi 300 kí tự, hoặc khi hệ thống gặp lỗi.
Hoàn thành (completion)
Để tiết kiệm gõ phím, Emacs cung cấp nhiều dạng hoàn thành: có nghĩa là Emacs cố gắng hoàn thành tên tập tin, tên lệnh, v.v đã được gõ một phần. Thường dùng phím TAB để gọi chế độ hoàn thành.
Tue, 08/14/2012 – 20:47 — Admin
Cung cấp đối số cho câu lệnh
Cung cấp đối số cho câu lệnh
Nhiều lệnh Emacs lấy đối số, giống như cách một thủ tục hoặc một hàm lấy đối số trong ngôn ngữ lập trình. Hầu hết các lệnh tạo dấu nhắc cho bạn nhập đối số của nó: thí dụ lệnh đọc nội dung tập tin sẽ nhắc bạn nhập tên tập tin.
Có một loại đối số thường được chấp nhận đến nỗi có cách đặc biệt để cung cấp nó: đối số số (numeric argument). Nhiều lệnh hiểu đối số số là một yêu cầu lặp lại bấy nhiêu lần. Thí dụ, lệnh delete-char (liên kết với C-d), thông thường xoá một kí tự bên phải con trỏ, sẽ xoá N kí tự nếu được cho đối số số là N. Nó cũng làm việc với các lệnh tự điên vào.
Để cung cấp đối số số, thí dụ 12, cho một lệnh, gõ C-u 12 trước khi gõ lệnh. Nếu gõ chậm rãi, bạn sẽ thấy:
C-u 1 2-
ở vùng phản hồi. Sau đó gõ C-d và như vậy bạn đã cho lệnh delete-char đối số 12. Dấu gạch ngang dẫn đầu biểu thị đối số âm; dấu gạch ngang duy nhất (không có con số theo sau) biểu thị đối số -1. Bỏ ngang một đối số số vừa gõ bằng C-g.
Vì người ta thường không quan tâm precisely chính xác bao nhiêu lần một lệnh được lặp lại, có cách nhanh để lấy đối số số với các biên độ khác nhau. C-u một mình, không có chữ số nào theo sau, tương ứng với đối số số là 4. Lần C-u tiếp theo sẽ nhân nó lên 4, được đối số số 16. Lần C-u tiếp nữa sẽ nhân thêm 4, được đối số số 64, v.v. Vì vậy C-u được gọi là universal-argument (đối số phổ quát).
Tuỳ theo lệnh, đối số số không nhất thiết được hiểu là số lần lặp lại, mà có thể bị bỏ qua hoặc được hiểu là Boolean (sự có mặt của đối số — bất cứ đối số nào — và ngược lại là sự vắng mặt của nó), v.v.
Trích dẫn các kí tự liên kết với lệnh
Để điền kí tự điều khiển (control character) vào tập tin, có thể dùng lệnh quoted-insert, liên kết với C-q. C-q có tác dụng như lệnh tiền tố, nhưng kí tự kế tiếp sẽ được điền vào bộ đệm thay vì thi hành như một lệnh. Thí dụ C-q ESC sẽ điền một Escape.
C-q cũng có thể dùng nhập kí tự bằng cách gõ C-q và theo sau với mã ASCII ở dạng chữ 3 số bát phân.
Các lệnh bị bất hoạt
Một số lệnh đặc biệt dễ gây nhầm lẫn cho người mới sử dụng được bất hoạt theo mặc định. Khi một lệnh bị bất hoạt được gọi, sẽ xuất hiện hộp thoại ngắn và cửa sổ tài liệu cho lệnh đó, và cho bạn 3 lựa chọn:
- Space để dùng lệnh đó chỉ ở lần này, và tiếp tục bất hoạt,
- Y để dùng nó và hoạt hoá nó (sẽ không bị câu hỏi ở lần dùng sau),
- N để không làm gì hết (lệnh vẫn bị bất hoạt).
Di chuyển và đối tượng văn bản
Emacs cung cấp nhiều lệnh để di chuyển xung quanh đối tượng văn bản. Các lệnh này có thể nhận đối số số để lặp lại. Định nghĩa đối tượng văn bản có thể thay đổi tuỳ theo chế độ (thí dụ dấu gạch dưới (underbar) được xem là yếu tố cấu tạo từ trong C Mode, vì chúng hợp lệ trong tên identifier, nhưng không được xem là yếu tố cấu tạo từ trong Text Mode).
Kí tự
- C-f
forward-char. Di chuyển tới (về phải) một kí tự.- C-b
backward-char. Di chuyển lùi (về trái) một kí tự.
Từ
- M-f
forward-word. Di chuyển tới một từ.- M-b
backward-word. Di chuyển lùi một từ.
Dòng (dọc)
- C-n
next-line. Di chuyển xuống dòng kế tiếp.- C-p
previous-line. Di chuyển lên dòng trước.
Con trỏ vẫn ở cùng cột khi di chuyển theo dòng (hoặc cuối dòng nếu dòng đó ngắn).
Dòng (ngang)
- C-a
beginning-of-line. Di chuyển đến đầu dòng hiện tại.- C-e
end-of-line. Di chuyển đến cuối dòng hiện tại.
Câu
- M-a
backward-sentence. Di chuyển đến đầu câu hiện tại.- M-e
forward-sentence. Di chuyển đến cuối câu hiện tại.
Đoạn
- M-{
backward-paragraph. Di chuyển đến đầu đoạn hiện tại.- M-}
forward-paragraph. Di chuyển đến cuối đoạn hiện tại.
Trang
- C-x [
backward-page. Di chuyển đến đầu trang hiện tại.- C-x ]
forward-page. Di chuyển đến cuối trang hiện tại.
Trang được chia bởi kí tự formfeed (C-l) trong hầu hết các chế độ.
Bộ đệm
- M-<
beginning-of-buffer. Di chuyển đến đầu bộ đệm.- M->
end-of-buffer. Di chuyển đến cuối bộ đệm.
Biểu thức S (cặp dấu ngoặc)
Biểu thức S (S-expression, gọi tắt là sexp) là tên cho cho các cặp dấu ngoặc (balanced parentheses) (và văn bản chứa trong đó) trong Lisp. Các kí tự mà Emacs nhận biết là dấu ngoặc gồm ngoặc tròn, ngoặc vuông và ngoặc nhọn, nhưng cũng còn tuỳ vào ngôn ngữ lập trình.
Ngoài ra, trong hầu hết các chế độ ngôn ngữ lập trình, các chuỗi đặt trong dấu nháy (quoted string) cũng được xem là sexps (có thể là dấu nháy đơn hay nháy kép).
- C-M-b
backward-sexp. Di chuyển lùi đến sexp kế tiếp. Nếu con trỏ ở ngay bên phải của dấu ngoặc trái, C-M-b sẽ bíp, vì không có sexp ở phía trái để di chuyển đến: bạn phải di chuyển lên.- C-M-f
forward-sexp. Di chuyển tới sexp kế tiếp. Tương tự như trên nếu con trỏ nằm ngay bên trái của dấu ngoặc phải.- C-M-u
backward-up-list. Di chuyển lùi lên một cấp dấu ngoặc. Nói cách khác, di chuyển sang dấu ngoặc trái của dấu ngoặc đang chứa con trỏ, bỏ qua các sexp trong các cặp dấu ngoặc.- C-M-d
down-list. Di chuyển xuống một cấp dấu ngoặc. Nói cách khác, di chuyển sang bên phải của dấu ngoặc trái kế tiếp, bỏ qua các sexp trong các cặp dấu ngoặc.
Hàm
Emacs, theo Lips, gọi các hàm và thủ tục là defun.
- C-M-a
beginning-of-defun. Di chuyển đến đầu của defun hiện tại.- C-M-e
end-of-defun. Di chuyển đến cuối của defun hiện tại.
Xoá (delete), kill và yank
Xoá (delete): lấy bỏ đoạn văn bản từ bộ đệm mà không lưu lại. Kill: lưu văn bản đã lấy bỏ, nhờ đó có thể yank trở lại ở nơi khác.
Văn bản bị kill được lưu ở vòng kill (kill ring). Vòng kill giữ N kill cuối, mặc định N là 30, nhưng có thể thay đổi bằng cách thay giá trị cho biến kill-ring-max. Vòng kill đóng vai trò như một fifo khi bạn kill một cái gì đó (sau lần kill thứ 30, kill số 1 sẽ biến mất), nhưng như một cái vòng khi bạn yank chúng trở lại (có thể yank vòng quanh một cách tuần hoàn).
Kí tự
- C-d, Delete
delete-char. Xoá kí tự bên phải (hoặc dưới, nếu con trỏ là khối chứa một kí tự) con trỏ.- DEL, BS
delete-backward-char. Xoá kí tự bên trái con trỏ.
Từ
- M-d
kill-word. Kill đến cuối từ phía bên phải con trỏ (tới).- M-DEL
backward-kill-word. Kill đến đâu từ phía bên trái con trỏ (lui).
Dòng (ngang)
- C-k
kill-line. Kill đến cuối dòng hiện tại, không bao gồm kí tự xuống dòng (newline). Vì vậy nếu từ đầu dòng, cần 2 lần C-k để kill toàn bộ dòng và đóng khoảng trắng.- C-u 0 C-k
kill-line. Xoá đến đầu dòng hiện tại, không bao gồm newline.- C-u -n C-k
kill-line. Xoá đến đầu của -n dòng trước.
Câu
- M-k
kill-sentence. Kill đến cuối câu hiện tại, bao gồm các newline có trong câu.- C-u -1 M-k
kill-sentence. Kill đến đầu câu hiện tại, bao gồm các newline có trong câu.
Đoạn
Có các lệnh forward-kill-paragraph và backward-kill-paragraph, nhưng theo mặc định chúng không liên kết với phím nào.
Trang
Không có lệnh kill trang (nhưng xem Đánh dấu và vùng).
Bộ đệm
Lệnh kill-buffer không kill tất cả văn bản trong bộ đệm, nhưng kill toàn bộ cấu trúc dữ liệu bộ đệm: xem Đánh dấu và vùng.
Biểu thức S (cặp dấu ngoặc)
- C-M-k
kill-sexp. Kill sexp sau con trỏ.- C-u -1 C-M-k
kill-sexp. Kill sexp trước con trỏ.
Có lệnh backward-kill-sexp, nhưng theo mặc định không liên kết với phím nào.
Hàm
Không có lệnh kill hàm (defuns) (nhưng xem Đánh dấu và vùng).
Yank
C-y (yank) lấy (yank) văn bản bị kill gần đây nhất.
M-y (yank-pop) di chuyển sang các văn bản ở các lần kill trước bằng cách thế văn bảng vừa được yank bằng văn bản ở lần kill trước nó. Các lần M-y tiếp theo sẽ di chuyển quanh vòng kill.
Vì Emacs chỉ có một vòng kill (chứ không phải một vòng cho mỗi bộ đệm), bạn có thể kill trong bộ đệm này và yank ở bộ đệm khác.